== Physical Plan ==
TakeOrderedAndProject (65)
+- * HashAggregate (64)
   +- Exchange (63)
      +- * HashAggregate (62)
         +- Union (61)
            :- * HashAggregate (50)
            :  +- Exchange (49)
            :     +- * HashAggregate (48)
            :        +- Union (47)
            :           :- * HashAggregate (22)
            :           :  +- * ColumnarToRow (21)
            :           :     +- CometExchange (20)
            :           :        +- CometHashAggregate (19)
            :           :           +- CometProject (18)
            :           :              +- CometBroadcastHashJoin (17)
            :           :                 :- CometProject (13)
            :           :                 :  +- CometBroadcastHashJoin (12)
            :           :                 :     :- CometUnion (7)
            :           :                 :     :  :- CometProject (3)
            :           :                 :     :  :  +- CometFilter (2)
            :           :                 :     :  :     +- CometNativeScan: `spark_catalog`.`default`.`store_sales` (1)
            :           :                 :     :  +- CometProject (6)
            :           :                 :     :     +- CometFilter (5)
            :           :                 :     :        +- CometNativeScan: `spark_catalog`.`default`.`store_returns` (4)
            :           :                 :     +- CometBroadcastExchange (11)
            :           :                 :        +- CometProject (10)
            :           :                 :           +- CometFilter (9)
            :           :                 :              +- CometNativeScan: `spark_catalog`.`default`.`date_dim` (8)
            :           :                 +- CometBroadcastExchange (16)
            :           :                    +- CometFilter (15)
            :           :                       +- CometNativeScan: `spark_catalog`.`default`.`store` (14)
            :           :- * HashAggregate (25)
            :           :  +- * ColumnarToRow (24)
            :           :     +- ReusedExchange (23)
            :           +- * HashAggregate (46)
            :              +- * ColumnarToRow (45)
            :                 +- CometExchange (44)
            :                    +- CometHashAggregate (43)
            :                       +- CometProject (42)
            :                          +- CometBroadcastHashJoin (41)
            :                             :- CometProject (39)
            :                             :  +- CometBroadcastHashJoin (38)
            :                             :     :- CometUnion (36)
            :                             :     :  :- CometProject (28)
            :                             :     :  :  +- CometFilter (27)
            :                             :     :  :     +- CometNativeScan: `spark_catalog`.`default`.`web_sales` (26)
            :                             :     :  +- CometProject (35)
            :                             :     :     +- CometBroadcastHashJoin (34)
            :                             :     :        :- CometBroadcastExchange (30)
            :                             :     :        :  +- CometNativeScan: `spark_catalog`.`default`.`web_returns` (29)
            :                             :     :        +- CometProject (33)
            :                             :     :           +- CometFilter (32)
            :                             :     :              +- CometNativeScan: `spark_catalog`.`default`.`web_sales` (31)
            :                             :     +- ReusedExchange (37)
            :                             +- ReusedExchange (40)
            :- * HashAggregate (55)
            :  +- Exchange (54)
            :     +- * HashAggregate (53)
            :        +- * HashAggregate (52)
            :           +- ReusedExchange (51)
            +- * HashAggregate (60)
               +- Exchange (59)
                  +- * HashAggregate (58)
                     +- * HashAggregate (57)
                        +- ReusedExchange (56)


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

(2) CometFilter
Input [4]: [ss_store_sk#1, ss_ext_sales_price#2, ss_net_profit#3, ss_sold_date_sk#4]
Condition : isnotnull(ss_store_sk#1)

(3) CometProject
Input [4]: [ss_store_sk#1, ss_ext_sales_price#2, ss_net_profit#3, ss_sold_date_sk#4]
Arguments: [store_sk#5, date_sk#6, sales_price#7, profit#8, return_amt#9, net_loss#10], [ss_store_sk#1 AS store_sk#5, ss_sold_date_sk#4 AS date_sk#6, ss_ext_sales_price#2 AS sales_price#7, ss_net_profit#3 AS profit#8, 0.00 AS return_amt#9, 0.00 AS net_loss#10]

(4) CometNativeScan: `spark_catalog`.`default`.`store_returns`
Output [4]: [sr_store_sk#11, sr_return_amt#12, sr_net_loss#13, sr_returned_date_sk#14]
Arguments: [sr_store_sk#11, sr_return_amt#12, sr_net_loss#13, sr_returned_date_sk#14]

(5) CometFilter
Input [4]: [sr_store_sk#11, sr_return_amt#12, sr_net_loss#13, sr_returned_date_sk#14]
Condition : isnotnull(sr_store_sk#11)

(6) CometProject
Input [4]: [sr_store_sk#11, sr_return_amt#12, sr_net_loss#13, sr_returned_date_sk#14]
Arguments: [store_sk#15, date_sk#16, sales_price#17, profit#18, return_amt#19, net_loss#20], [sr_store_sk#11 AS store_sk#15, sr_returned_date_sk#14 AS date_sk#16, 0.00 AS sales_price#17, 0.00 AS profit#18, sr_return_amt#12 AS return_amt#19, sr_net_loss#13 AS net_loss#20]

(7) CometUnion
Child 0 Input [6]: [store_sk#5, date_sk#6, sales_price#7, profit#8, return_amt#9, net_loss#10]
Child 1 Input [6]: [store_sk#15, date_sk#16, sales_price#17, profit#18, return_amt#19, net_loss#20]

(8) CometNativeScan: `spark_catalog`.`default`.`date_dim`
Output [2]: [d_date_sk#21, d_date#22]
Arguments: [d_date_sk#21, d_date#22]

(9) CometFilter
Input [2]: [d_date_sk#21, d_date#22]
Condition : (((isnotnull(d_date#22) AND (d_date#22 >= 1998-08-04)) AND (d_date#22 <= 1998-08-18)) AND isnotnull(d_date_sk#21))

(10) CometProject
Input [2]: [d_date_sk#21, d_date#22]
Arguments: [d_date_sk#21], [d_date_sk#21]

(11) CometBroadcastExchange
Input [1]: [d_date_sk#21]
Arguments: [d_date_sk#21]

(12) CometBroadcastHashJoin
Left output [6]: [store_sk#5, date_sk#6, sales_price#7, profit#8, return_amt#9, net_loss#10]
Right output [1]: [d_date_sk#21]
Arguments: [date_sk#6], [d_date_sk#21], Inner, BuildRight

(13) CometProject
Input [7]: [store_sk#5, date_sk#6, sales_price#7, profit#8, return_amt#9, net_loss#10, d_date_sk#21]
Arguments: [store_sk#5, sales_price#7, profit#8, return_amt#9, net_loss#10], [store_sk#5, sales_price#7, profit#8, return_amt#9, net_loss#10]

(14) CometNativeScan: `spark_catalog`.`default`.`store`
Output [2]: [s_store_sk#23, s_store_id#24]
Arguments: [s_store_sk#23, s_store_id#24]

(15) CometFilter
Input [2]: [s_store_sk#23, s_store_id#24]
Condition : isnotnull(s_store_sk#23)

(16) CometBroadcastExchange
Input [2]: [s_store_sk#23, s_store_id#24]
Arguments: [s_store_sk#23, s_store_id#24]

(17) CometBroadcastHashJoin
Left output [5]: [store_sk#5, sales_price#7, profit#8, return_amt#9, net_loss#10]
Right output [2]: [s_store_sk#23, s_store_id#24]
Arguments: [store_sk#5], [s_store_sk#23], Inner, BuildRight

(18) CometProject
Input [7]: [store_sk#5, sales_price#7, profit#8, return_amt#9, net_loss#10, s_store_sk#23, s_store_id#24]
Arguments: [sales_price#7, profit#8, return_amt#9, net_loss#10, s_store_id#24], [sales_price#7, profit#8, return_amt#9, net_loss#10, s_store_id#24]

(19) CometHashAggregate
Input [5]: [sales_price#7, profit#8, return_amt#9, net_loss#10, s_store_id#24]
Keys [1]: [s_store_id#24]
Functions [4]: [partial_sum(UnscaledValue(sales_price#7)), partial_sum(UnscaledValue(return_amt#9)), partial_sum(UnscaledValue(profit#8)), partial_sum(UnscaledValue(net_loss#10))]

(20) CometExchange
Input [5]: [s_store_id#24, sum#25, sum#26, sum#27, sum#28]
Arguments: hashpartitioning(s_store_id#24, 5), ENSURE_REQUIREMENTS, CometNativeShuffle, [plan_id=1]

(21) ColumnarToRow [codegen id : 1]
Input [5]: [s_store_id#24, sum#25, sum#26, sum#27, sum#28]

(22) HashAggregate [codegen id : 1]
Input [5]: [s_store_id#24, sum#25, sum#26, sum#27, sum#28]
Keys [1]: [s_store_id#24]
Functions [4]: [sum(UnscaledValue(sales_price#7)), sum(UnscaledValue(return_amt#9)), sum(UnscaledValue(profit#8)), sum(UnscaledValue(net_loss#10))]
Aggregate Attributes [4]: [sum(UnscaledValue(sales_price#7))#29, sum(UnscaledValue(return_amt#9))#30, sum(UnscaledValue(profit#8))#31, sum(UnscaledValue(net_loss#10))#32]
Results [5]: [store channel AS channel#33, concat(store, s_store_id#24) AS id#34, MakeDecimal(sum(UnscaledValue(sales_price#7))#29,17,2) AS sales#35, MakeDecimal(sum(UnscaledValue(return_amt#9))#30,17,2) AS returns#36, (MakeDecimal(sum(UnscaledValue(profit#8))#31,17,2) - MakeDecimal(sum(UnscaledValue(net_loss#10))#32,17,2)) AS profit#37]

(23) ReusedExchange [Reuses operator id: 20]
Output [5]: [cp_catalog_page_id#38, sum#39, sum#40, sum#41, sum#42]

(24) ColumnarToRow [codegen id : 2]
Input [5]: [cp_catalog_page_id#38, sum#39, sum#40, sum#41, sum#42]

(25) HashAggregate [codegen id : 2]
Input [5]: [cp_catalog_page_id#38, sum#39, sum#40, sum#41, sum#42]
Keys [1]: [cp_catalog_page_id#38]
Functions [4]: [sum(UnscaledValue(sales_price#43)), sum(UnscaledValue(return_amt#44)), sum(UnscaledValue(profit#45)), sum(UnscaledValue(net_loss#46))]
Aggregate Attributes [4]: [sum(UnscaledValue(sales_price#43))#47, sum(UnscaledValue(return_amt#44))#48, sum(UnscaledValue(profit#45))#49, sum(UnscaledValue(net_loss#46))#50]
Results [5]: [catalog channel AS channel#51, concat(catalog_page, cp_catalog_page_id#38) AS id#52, MakeDecimal(sum(UnscaledValue(sales_price#43))#47,17,2) AS sales#53, MakeDecimal(sum(UnscaledValue(return_amt#44))#48,17,2) AS returns#54, (MakeDecimal(sum(UnscaledValue(profit#45))#49,17,2) - MakeDecimal(sum(UnscaledValue(net_loss#46))#50,17,2)) AS profit#55]

(26) CometNativeScan: `spark_catalog`.`default`.`web_sales`
Output [4]: [ws_web_site_sk#56, ws_ext_sales_price#57, ws_net_profit#58, ws_sold_date_sk#59]
Arguments: [ws_web_site_sk#56, ws_ext_sales_price#57, ws_net_profit#58, ws_sold_date_sk#59]

(27) CometFilter
Input [4]: [ws_web_site_sk#56, ws_ext_sales_price#57, ws_net_profit#58, ws_sold_date_sk#59]
Condition : isnotnull(ws_web_site_sk#56)

(28) CometProject
Input [4]: [ws_web_site_sk#56, ws_ext_sales_price#57, ws_net_profit#58, ws_sold_date_sk#59]
Arguments: [wsr_web_site_sk#60, date_sk#61, sales_price#62, profit#63, return_amt#64, net_loss#65], [ws_web_site_sk#56 AS wsr_web_site_sk#60, ws_sold_date_sk#59 AS date_sk#61, ws_ext_sales_price#57 AS sales_price#62, ws_net_profit#58 AS profit#63, 0.00 AS return_amt#64, 0.00 AS net_loss#65]

(29) CometNativeScan: `spark_catalog`.`default`.`web_returns`
Output [5]: [wr_item_sk#66, wr_order_number#67, wr_return_amt#68, wr_net_loss#69, wr_returned_date_sk#70]
Arguments: [wr_item_sk#66, wr_order_number#67, wr_return_amt#68, wr_net_loss#69, wr_returned_date_sk#70]

(30) CometBroadcastExchange
Input [5]: [wr_item_sk#66, wr_order_number#67, wr_return_amt#68, wr_net_loss#69, wr_returned_date_sk#70]
Arguments: [wr_item_sk#66, wr_order_number#67, wr_return_amt#68, wr_net_loss#69, wr_returned_date_sk#70]

(31) CometNativeScan: `spark_catalog`.`default`.`web_sales`
Output [4]: [ws_item_sk#71, ws_web_site_sk#72, ws_order_number#73, ws_sold_date_sk#74]
Arguments: [ws_item_sk#71, ws_web_site_sk#72, ws_order_number#73, ws_sold_date_sk#74]

(32) CometFilter
Input [4]: [ws_item_sk#71, ws_web_site_sk#72, ws_order_number#73, ws_sold_date_sk#74]
Condition : ((isnotnull(ws_item_sk#71) AND isnotnull(ws_order_number#73)) AND isnotnull(ws_web_site_sk#72))

(33) CometProject
Input [4]: [ws_item_sk#71, ws_web_site_sk#72, ws_order_number#73, ws_sold_date_sk#74]
Arguments: [ws_item_sk#71, ws_web_site_sk#72, ws_order_number#73], [ws_item_sk#71, ws_web_site_sk#72, ws_order_number#73]

(34) CometBroadcastHashJoin
Left output [5]: [wr_item_sk#66, wr_order_number#67, wr_return_amt#68, wr_net_loss#69, wr_returned_date_sk#70]
Right output [3]: [ws_item_sk#71, ws_web_site_sk#72, ws_order_number#73]
Arguments: [wr_item_sk#66, wr_order_number#67], [ws_item_sk#71, ws_order_number#73], Inner, BuildLeft

(35) CometProject
Input [8]: [wr_item_sk#66, wr_order_number#67, wr_return_amt#68, wr_net_loss#69, wr_returned_date_sk#70, ws_item_sk#71, ws_web_site_sk#72, ws_order_number#73]
Arguments: [wsr_web_site_sk#75, date_sk#76, sales_price#77, profit#78, return_amt#79, net_loss#80], [ws_web_site_sk#72 AS wsr_web_site_sk#75, wr_returned_date_sk#70 AS date_sk#76, 0.00 AS sales_price#77, 0.00 AS profit#78, wr_return_amt#68 AS return_amt#79, wr_net_loss#69 AS net_loss#80]

(36) CometUnion
Child 0 Input [6]: [wsr_web_site_sk#60, date_sk#61, sales_price#62, profit#63, return_amt#64, net_loss#65]
Child 1 Input [6]: [wsr_web_site_sk#75, date_sk#76, sales_price#77, profit#78, return_amt#79, net_loss#80]

(37) ReusedExchange [Reuses operator id: 11]
Output [1]: [d_date_sk#81]

(38) CometBroadcastHashJoin
Left output [6]: [wsr_web_site_sk#60, date_sk#61, sales_price#62, profit#63, return_amt#64, net_loss#65]
Right output [1]: [d_date_sk#81]
Arguments: [date_sk#61], [d_date_sk#81], Inner, BuildRight

(39) CometProject
Input [7]: [wsr_web_site_sk#60, date_sk#61, sales_price#62, profit#63, return_amt#64, net_loss#65, d_date_sk#81]
Arguments: [wsr_web_site_sk#60, sales_price#62, profit#63, return_amt#64, net_loss#65], [wsr_web_site_sk#60, sales_price#62, profit#63, return_amt#64, net_loss#65]

(40) ReusedExchange [Reuses operator id: 16]
Output [2]: [web_site_sk#82, web_site_id#83]

(41) CometBroadcastHashJoin
Left output [5]: [wsr_web_site_sk#60, sales_price#62, profit#63, return_amt#64, net_loss#65]
Right output [2]: [web_site_sk#82, web_site_id#83]
Arguments: [wsr_web_site_sk#60], [web_site_sk#82], Inner, BuildRight

(42) CometProject
Input [7]: [wsr_web_site_sk#60, sales_price#62, profit#63, return_amt#64, net_loss#65, web_site_sk#82, web_site_id#83]
Arguments: [sales_price#62, profit#63, return_amt#64, net_loss#65, web_site_id#83], [sales_price#62, profit#63, return_amt#64, net_loss#65, web_site_id#83]

(43) CometHashAggregate
Input [5]: [sales_price#62, profit#63, return_amt#64, net_loss#65, web_site_id#83]
Keys [1]: [web_site_id#83]
Functions [4]: [partial_sum(UnscaledValue(sales_price#62)), partial_sum(UnscaledValue(return_amt#64)), partial_sum(UnscaledValue(profit#63)), partial_sum(UnscaledValue(net_loss#65))]

(44) CometExchange
Input [5]: [web_site_id#83, sum#84, sum#85, sum#86, sum#87]
Arguments: hashpartitioning(web_site_id#83, 5), ENSURE_REQUIREMENTS, CometNativeShuffle, [plan_id=2]

(45) ColumnarToRow [codegen id : 3]
Input [5]: [web_site_id#83, sum#84, sum#85, sum#86, sum#87]

(46) HashAggregate [codegen id : 3]
Input [5]: [web_site_id#83, sum#84, sum#85, sum#86, sum#87]
Keys [1]: [web_site_id#83]
Functions [4]: [sum(UnscaledValue(sales_price#62)), sum(UnscaledValue(return_amt#64)), sum(UnscaledValue(profit#63)), sum(UnscaledValue(net_loss#65))]
Aggregate Attributes [4]: [sum(UnscaledValue(sales_price#62))#88, sum(UnscaledValue(return_amt#64))#89, sum(UnscaledValue(profit#63))#90, sum(UnscaledValue(net_loss#65))#91]
Results [5]: [web channel AS channel#92, concat(web_site, web_site_id#83) AS id#93, MakeDecimal(sum(UnscaledValue(sales_price#62))#88,17,2) AS sales#94, MakeDecimal(sum(UnscaledValue(return_amt#64))#89,17,2) AS returns#95, (MakeDecimal(sum(UnscaledValue(profit#63))#90,17,2) - MakeDecimal(sum(UnscaledValue(net_loss#65))#91,17,2)) AS profit#96]

(47) Union

(48) HashAggregate [codegen id : 4]
Input [5]: [channel#33, id#34, sales#35, returns#36, profit#37]
Keys [2]: [channel#33, id#34]
Functions [3]: [partial_sum(sales#35), partial_sum(returns#36), partial_sum(profit#37)]
Aggregate Attributes [6]: [sum#97, isEmpty#98, sum#99, isEmpty#100, sum#101, isEmpty#102]
Results [8]: [channel#33, id#34, sum#103, isEmpty#104, sum#105, isEmpty#106, sum#107, isEmpty#108]

(49) Exchange
Input [8]: [channel#33, id#34, sum#103, isEmpty#104, sum#105, isEmpty#106, sum#107, isEmpty#108]
Arguments: hashpartitioning(channel#33, id#34, 5), ENSURE_REQUIREMENTS, [plan_id=3]

(50) HashAggregate [codegen id : 5]
Input [8]: [channel#33, id#34, sum#103, isEmpty#104, sum#105, isEmpty#106, sum#107, isEmpty#108]
Keys [2]: [channel#33, id#34]
Functions [3]: [sum(sales#35), sum(returns#36), sum(profit#37)]
Aggregate Attributes [3]: [sum(sales#35)#109, sum(returns#36)#110, sum(profit#37)#111]
Results [5]: [channel#33, id#34, cast(sum(sales#35)#109 as decimal(37,2)) AS sales#112, cast(sum(returns#36)#110 as decimal(37,2)) AS returns#113, cast(sum(profit#37)#111 as decimal(38,2)) AS profit#114]

(51) ReusedExchange [Reuses operator id: 49]
Output [8]: [channel#33, id#34, sum#103, isEmpty#104, sum#105, isEmpty#106, sum#107, isEmpty#108]

(52) HashAggregate [codegen id : 10]
Input [8]: [channel#33, id#34, sum#103, isEmpty#104, sum#105, isEmpty#106, sum#107, isEmpty#108]
Keys [2]: [channel#33, id#34]
Functions [3]: [sum(sales#35), sum(returns#36), sum(profit#37)]
Aggregate Attributes [3]: [sum(sales#35)#109, sum(returns#36)#110, sum(profit#37)#111]
Results [4]: [channel#33, sum(sales#35)#109 AS sales#115, sum(returns#36)#110 AS returns#116, sum(profit#37)#111 AS profit#117]

(53) HashAggregate [codegen id : 10]
Input [4]: [channel#33, sales#115, returns#116, profit#117]
Keys [1]: [channel#33]
Functions [3]: [partial_sum(sales#115), partial_sum(returns#116), partial_sum(profit#117)]
Aggregate Attributes [6]: [sum#118, isEmpty#119, sum#120, isEmpty#121, sum#122, isEmpty#123]
Results [7]: [channel#33, sum#124, isEmpty#125, sum#126, isEmpty#127, sum#128, isEmpty#129]

(54) Exchange
Input [7]: [channel#33, sum#124, isEmpty#125, sum#126, isEmpty#127, sum#128, isEmpty#129]
Arguments: hashpartitioning(channel#33, 5), ENSURE_REQUIREMENTS, [plan_id=4]

(55) HashAggregate [codegen id : 11]
Input [7]: [channel#33, sum#124, isEmpty#125, sum#126, isEmpty#127, sum#128, isEmpty#129]
Keys [1]: [channel#33]
Functions [3]: [sum(sales#115), sum(returns#116), sum(profit#117)]
Aggregate Attributes [3]: [sum(sales#115)#130, sum(returns#116)#131, sum(profit#117)#132]
Results [5]: [channel#33, null AS id#133, sum(sales#115)#130 AS sum(sales)#134, sum(returns#116)#131 AS sum(returns)#135, sum(profit#117)#132 AS sum(profit)#136]

(56) ReusedExchange [Reuses operator id: 49]
Output [8]: [channel#33, id#34, sum#103, isEmpty#104, sum#105, isEmpty#106, sum#107, isEmpty#108]

(57) HashAggregate [codegen id : 16]
Input [8]: [channel#33, id#34, sum#103, isEmpty#104, sum#105, isEmpty#106, sum#107, isEmpty#108]
Keys [2]: [channel#33, id#34]
Functions [3]: [sum(sales#35), sum(returns#36), sum(profit#37)]
Aggregate Attributes [3]: [sum(sales#35)#109, sum(returns#36)#110, sum(profit#37)#111]
Results [3]: [sum(sales#35)#109 AS sales#137, sum(returns#36)#110 AS returns#138, sum(profit#37)#111 AS profit#139]

(58) HashAggregate [codegen id : 16]
Input [3]: [sales#137, returns#138, profit#139]
Keys: []
Functions [3]: [partial_sum(sales#137), partial_sum(returns#138), partial_sum(profit#139)]
Aggregate Attributes [6]: [sum#140, isEmpty#141, sum#142, isEmpty#143, sum#144, isEmpty#145]
Results [6]: [sum#146, isEmpty#147, sum#148, isEmpty#149, sum#150, isEmpty#151]

(59) Exchange
Input [6]: [sum#146, isEmpty#147, sum#148, isEmpty#149, sum#150, isEmpty#151]
Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=5]

(60) HashAggregate [codegen id : 17]
Input [6]: [sum#146, isEmpty#147, sum#148, isEmpty#149, sum#150, isEmpty#151]
Keys: []
Functions [3]: [sum(sales#137), sum(returns#138), sum(profit#139)]
Aggregate Attributes [3]: [sum(sales#137)#152, sum(returns#138)#153, sum(profit#139)#154]
Results [5]: [null AS channel#155, null AS id#156, sum(sales#137)#152 AS sum(sales)#157, sum(returns#138)#153 AS sum(returns)#158, sum(profit#139)#154 AS sum(profit)#159]

(61) Union

(62) HashAggregate [codegen id : 18]
Input [5]: [channel#33, id#34, sales#112, returns#113, profit#114]
Keys [5]: [channel#33, id#34, sales#112, returns#113, profit#114]
Functions: []
Aggregate Attributes: []
Results [5]: [channel#33, id#34, sales#112, returns#113, profit#114]

(63) Exchange
Input [5]: [channel#33, id#34, sales#112, returns#113, profit#114]
Arguments: hashpartitioning(channel#33, id#34, sales#112, returns#113, profit#114, 5), ENSURE_REQUIREMENTS, [plan_id=6]

(64) HashAggregate [codegen id : 19]
Input [5]: [channel#33, id#34, sales#112, returns#113, profit#114]
Keys [5]: [channel#33, id#34, sales#112, returns#113, profit#114]
Functions: []
Aggregate Attributes: []
Results [5]: [channel#33, id#34, sales#112, returns#113, profit#114]

(65) TakeOrderedAndProject
Input [5]: [channel#33, id#34, sales#112, returns#113, profit#114]
Arguments: 100, [channel#33 ASC NULLS FIRST, id#34 ASC NULLS FIRST], [channel#33, id#34, sales#112, returns#113, profit#114]

