== Physical Plan ==
TakeOrderedAndProject (50)
+- * HashAggregate (49)
   +- Exchange (48)
      +- * HashAggregate (47)
         +- Union (46)
            :- * HashAggregate (28)
            :  +- Exchange (27)
            :     +- * HashAggregate (26)
            :        +- * ColumnarToRow (25)
            :           +- CometProject (24)
            :              +- CometBroadcastHashJoin (23)
            :                 :- CometProject (14)
            :                 :  +- CometBroadcastHashJoin (13)
            :                 :     :- CometProject (8)
            :                 :     :  +- CometBroadcastHashJoin (7)
            :                 :     :     :- CometFilter (2)
            :                 :     :     :  +- CometNativeScan: `spark_catalog`.`default`.`store_sales` (1)
            :                 :     :     +- CometBroadcastExchange (6)
            :                 :     :        +- CometProject (5)
            :                 :     :           +- CometFilter (4)
            :                 :     :              +- CometNativeScan: `spark_catalog`.`default`.`date_dim` (3)
            :                 :     +- CometBroadcastExchange (12)
            :                 :        +- CometProject (11)
            :                 :           +- CometFilter (10)
            :                 :              +- CometNativeScan: `spark_catalog`.`default`.`customer_address` (9)
            :                 +- CometBroadcastExchange (22)
            :                    +- CometBroadcastHashJoin (21)
            :                       :- CometFilter (16)
            :                       :  +- CometNativeScan: `spark_catalog`.`default`.`item` (15)
            :                       +- CometBroadcastExchange (20)
            :                          +- CometProject (19)
            :                             +- CometFilter (18)
            :                                +- CometNativeScan: `spark_catalog`.`default`.`item` (17)
            :- * HashAggregate (43)
            :  +- Exchange (42)
            :     +- * HashAggregate (41)
            :        +- * ColumnarToRow (40)
            :           +- CometProject (39)
            :              +- CometBroadcastHashJoin (38)
            :                 :- CometProject (36)
            :                 :  +- CometBroadcastHashJoin (35)
            :                 :     :- CometProject (33)
            :                 :     :  +- CometBroadcastHashJoin (32)
            :                 :     :     :- CometFilter (30)
            :                 :     :     :  +- CometNativeScan: `spark_catalog`.`default`.`catalog_sales` (29)
            :                 :     :     +- ReusedExchange (31)
            :                 :     +- ReusedExchange (34)
            :                 +- ReusedExchange (37)
            +- * HashAggregate (45)
               +- ReusedExchange (44)


(1) CometNativeScan: `spark_catalog`.`default`.`store_sales`
Output [4]: [ss_item_sk#1, ss_addr_sk#2, ss_ext_sales_price#3, ss_sold_date_sk#4]
Arguments: [ss_item_sk#1, ss_addr_sk#2, ss_ext_sales_price#3, ss_sold_date_sk#4]

(2) CometFilter
Input [4]: [ss_item_sk#1, ss_addr_sk#2, ss_ext_sales_price#3, ss_sold_date_sk#4]
Condition : (isnotnull(ss_addr_sk#2) AND isnotnull(ss_item_sk#1))

(3) CometNativeScan: `spark_catalog`.`default`.`date_dim`
Output [3]: [d_date_sk#5, d_year#6, d_moy#7]
Arguments: [d_date_sk#5, d_year#6, d_moy#7]

(4) CometFilter
Input [3]: [d_date_sk#5, d_year#6, d_moy#7]
Condition : ((((isnotnull(d_year#6) AND isnotnull(d_moy#7)) AND (d_year#6 = 2001)) AND (d_moy#7 = 2)) AND isnotnull(d_date_sk#5))

(5) CometProject
Input [3]: [d_date_sk#5, d_year#6, d_moy#7]
Arguments: [d_date_sk#5], [d_date_sk#5]

(6) CometBroadcastExchange
Input [1]: [d_date_sk#5]
Arguments: [d_date_sk#5]

(7) CometBroadcastHashJoin
Left output [4]: [ss_item_sk#1, ss_addr_sk#2, ss_ext_sales_price#3, ss_sold_date_sk#4]
Right output [1]: [d_date_sk#5]
Arguments: [ss_sold_date_sk#4], [d_date_sk#5], Inner, BuildRight

(8) CometProject
Input [5]: [ss_item_sk#1, ss_addr_sk#2, ss_ext_sales_price#3, ss_sold_date_sk#4, d_date_sk#5]
Arguments: [ss_item_sk#1, ss_addr_sk#2, ss_ext_sales_price#3], [ss_item_sk#1, ss_addr_sk#2, ss_ext_sales_price#3]

(9) CometNativeScan: `spark_catalog`.`default`.`customer_address`
Output [2]: [ca_address_sk#8, ca_gmt_offset#9]
Arguments: [ca_address_sk#8, ca_gmt_offset#9]

(10) CometFilter
Input [2]: [ca_address_sk#8, ca_gmt_offset#9]
Condition : ((isnotnull(ca_gmt_offset#9) AND (ca_gmt_offset#9 = -5.00)) AND isnotnull(ca_address_sk#8))

(11) CometProject
Input [2]: [ca_address_sk#8, ca_gmt_offset#9]
Arguments: [ca_address_sk#8], [ca_address_sk#8]

(12) CometBroadcastExchange
Input [1]: [ca_address_sk#8]
Arguments: [ca_address_sk#8]

(13) CometBroadcastHashJoin
Left output [3]: [ss_item_sk#1, ss_addr_sk#2, ss_ext_sales_price#3]
Right output [1]: [ca_address_sk#8]
Arguments: [ss_addr_sk#2], [ca_address_sk#8], Inner, BuildRight

(14) CometProject
Input [4]: [ss_item_sk#1, ss_addr_sk#2, ss_ext_sales_price#3, ca_address_sk#8]
Arguments: [ss_item_sk#1, ss_ext_sales_price#3], [ss_item_sk#1, ss_ext_sales_price#3]

(15) CometNativeScan: `spark_catalog`.`default`.`item`
Output [2]: [i_item_sk#10, i_item_id#11]
Arguments: [i_item_sk#10, i_item_id#11]

(16) CometFilter
Input [2]: [i_item_sk#10, i_item_id#11]
Condition : isnotnull(i_item_sk#10)

(17) CometNativeScan: `spark_catalog`.`default`.`item`
Output [2]: [i_item_id#12, i_color#13]
Arguments: [i_item_id#12, i_color#13]

(18) CometFilter
Input [2]: [i_item_id#12, i_color#13]
Condition : i_color#13 IN (slate               ,blanched            ,burnished           )

(19) CometProject
Input [2]: [i_item_id#12, i_color#13]
Arguments: [i_item_id#12], [i_item_id#12]

(20) CometBroadcastExchange
Input [1]: [i_item_id#12]
Arguments: [i_item_id#12]

(21) CometBroadcastHashJoin
Left output [2]: [i_item_sk#10, i_item_id#11]
Right output [1]: [i_item_id#12]
Arguments: [i_item_id#11], [i_item_id#12], LeftSemi, BuildRight

(22) CometBroadcastExchange
Input [2]: [i_item_sk#10, i_item_id#11]
Arguments: [i_item_sk#10, i_item_id#11]

(23) CometBroadcastHashJoin
Left output [2]: [ss_item_sk#1, ss_ext_sales_price#3]
Right output [2]: [i_item_sk#10, i_item_id#11]
Arguments: [ss_item_sk#1], [i_item_sk#10], Inner, BuildRight

(24) CometProject
Input [4]: [ss_item_sk#1, ss_ext_sales_price#3, i_item_sk#10, i_item_id#11]
Arguments: [ss_ext_sales_price#3, i_item_id#11], [ss_ext_sales_price#3, i_item_id#11]

(25) ColumnarToRow [codegen id : 1]
Input [2]: [ss_ext_sales_price#3, i_item_id#11]

(26) HashAggregate [codegen id : 1]
Input [2]: [ss_ext_sales_price#3, i_item_id#11]
Keys [1]: [i_item_id#11]
Functions [1]: [partial_sum(UnscaledValue(ss_ext_sales_price#3))]
Aggregate Attributes [1]: [sum#14]
Results [2]: [i_item_id#11, sum#15]

(27) Exchange
Input [2]: [i_item_id#11, sum#15]
Arguments: hashpartitioning(i_item_id#11, 5), ENSURE_REQUIREMENTS, [plan_id=1]

(28) HashAggregate [codegen id : 2]
Input [2]: [i_item_id#11, sum#15]
Keys [1]: [i_item_id#11]
Functions [1]: [sum(UnscaledValue(ss_ext_sales_price#3))]
Aggregate Attributes [1]: [sum(UnscaledValue(ss_ext_sales_price#3))#16]
Results [2]: [i_item_id#11, MakeDecimal(sum(UnscaledValue(ss_ext_sales_price#3))#16,17,2) AS total_sales#17]

(29) CometNativeScan: `spark_catalog`.`default`.`catalog_sales`
Output [4]: [cs_bill_addr_sk#18, cs_item_sk#19, cs_ext_sales_price#20, cs_sold_date_sk#21]
Arguments: [cs_bill_addr_sk#18, cs_item_sk#19, cs_ext_sales_price#20, cs_sold_date_sk#21]

(30) CometFilter
Input [4]: [cs_bill_addr_sk#18, cs_item_sk#19, cs_ext_sales_price#20, cs_sold_date_sk#21]
Condition : (isnotnull(cs_bill_addr_sk#18) AND isnotnull(cs_item_sk#19))

(31) ReusedExchange [Reuses operator id: 6]
Output [1]: [d_date_sk#22]

(32) CometBroadcastHashJoin
Left output [4]: [cs_bill_addr_sk#18, cs_item_sk#19, cs_ext_sales_price#20, cs_sold_date_sk#21]
Right output [1]: [d_date_sk#22]
Arguments: [cs_sold_date_sk#21], [d_date_sk#22], Inner, BuildRight

(33) CometProject
Input [5]: [cs_bill_addr_sk#18, cs_item_sk#19, cs_ext_sales_price#20, cs_sold_date_sk#21, d_date_sk#22]
Arguments: [cs_bill_addr_sk#18, cs_item_sk#19, cs_ext_sales_price#20], [cs_bill_addr_sk#18, cs_item_sk#19, cs_ext_sales_price#20]

(34) ReusedExchange [Reuses operator id: 12]
Output [1]: [ca_address_sk#23]

(35) CometBroadcastHashJoin
Left output [3]: [cs_bill_addr_sk#18, cs_item_sk#19, cs_ext_sales_price#20]
Right output [1]: [ca_address_sk#23]
Arguments: [cs_bill_addr_sk#18], [ca_address_sk#23], Inner, BuildRight

(36) CometProject
Input [4]: [cs_bill_addr_sk#18, cs_item_sk#19, cs_ext_sales_price#20, ca_address_sk#23]
Arguments: [cs_item_sk#19, cs_ext_sales_price#20], [cs_item_sk#19, cs_ext_sales_price#20]

(37) ReusedExchange [Reuses operator id: 22]
Output [2]: [i_item_sk#24, i_item_id#25]

(38) CometBroadcastHashJoin
Left output [2]: [cs_item_sk#19, cs_ext_sales_price#20]
Right output [2]: [i_item_sk#24, i_item_id#25]
Arguments: [cs_item_sk#19], [i_item_sk#24], Inner, BuildRight

(39) CometProject
Input [4]: [cs_item_sk#19, cs_ext_sales_price#20, i_item_sk#24, i_item_id#25]
Arguments: [cs_ext_sales_price#20, i_item_id#25], [cs_ext_sales_price#20, i_item_id#25]

(40) ColumnarToRow [codegen id : 3]
Input [2]: [cs_ext_sales_price#20, i_item_id#25]

(41) HashAggregate [codegen id : 3]
Input [2]: [cs_ext_sales_price#20, i_item_id#25]
Keys [1]: [i_item_id#25]
Functions [1]: [partial_sum(UnscaledValue(cs_ext_sales_price#20))]
Aggregate Attributes [1]: [sum#26]
Results [2]: [i_item_id#25, sum#27]

(42) Exchange
Input [2]: [i_item_id#25, sum#27]
Arguments: hashpartitioning(i_item_id#25, 5), ENSURE_REQUIREMENTS, [plan_id=2]

(43) HashAggregate [codegen id : 4]
Input [2]: [i_item_id#25, sum#27]
Keys [1]: [i_item_id#25]
Functions [1]: [sum(UnscaledValue(cs_ext_sales_price#20))]
Aggregate Attributes [1]: [sum(UnscaledValue(cs_ext_sales_price#20))#28]
Results [2]: [i_item_id#25, MakeDecimal(sum(UnscaledValue(cs_ext_sales_price#20))#28,17,2) AS total_sales#29]

(44) ReusedExchange [Reuses operator id: 27]
Output [2]: [i_item_id#30, sum#31]

(45) HashAggregate [codegen id : 6]
Input [2]: [i_item_id#30, sum#31]
Keys [1]: [i_item_id#30]
Functions [1]: [sum(UnscaledValue(ws_ext_sales_price#32))]
Aggregate Attributes [1]: [sum(UnscaledValue(ws_ext_sales_price#32))#33]
Results [2]: [i_item_id#30, MakeDecimal(sum(UnscaledValue(ws_ext_sales_price#32))#33,17,2) AS total_sales#34]

(46) Union

(47) HashAggregate [codegen id : 7]
Input [2]: [i_item_id#11, total_sales#17]
Keys [1]: [i_item_id#11]
Functions [1]: [partial_sum(total_sales#17)]
Aggregate Attributes [2]: [sum#35, isEmpty#36]
Results [3]: [i_item_id#11, sum#37, isEmpty#38]

(48) Exchange
Input [3]: [i_item_id#11, sum#37, isEmpty#38]
Arguments: hashpartitioning(i_item_id#11, 5), ENSURE_REQUIREMENTS, [plan_id=3]

(49) HashAggregate [codegen id : 8]
Input [3]: [i_item_id#11, sum#37, isEmpty#38]
Keys [1]: [i_item_id#11]
Functions [1]: [sum(total_sales#17)]
Aggregate Attributes [1]: [sum(total_sales#17)#39]
Results [2]: [i_item_id#11, sum(total_sales#17)#39 AS total_sales#40]

(50) TakeOrderedAndProject
Input [2]: [i_item_id#11, total_sales#40]
Arguments: 100, [total_sales#40 ASC NULLS FIRST], [i_item_id#11, total_sales#40]

