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


(1) CometNativeScan: `spark_catalog`.`default`.`web_sales`
Output [6]: [ws_item_sk#1, ws_order_number#2, ws_quantity#3, ws_net_paid#4, ws_net_profit#5, ws_sold_date_sk#6]
Arguments: [ws_item_sk#1, ws_order_number#2, ws_quantity#3, ws_net_paid#4, ws_net_profit#5, ws_sold_date_sk#6]

(2) CometFilter
Input [6]: [ws_item_sk#1, ws_order_number#2, ws_quantity#3, ws_net_paid#4, ws_net_profit#5, ws_sold_date_sk#6]
Condition : (((((((isnotnull(ws_net_profit#5) AND isnotnull(ws_net_paid#4)) AND isnotnull(ws_quantity#3)) AND (ws_net_profit#5 > 1.00)) AND (ws_net_paid#4 > 0.00)) AND (ws_quantity#3 > 0)) AND isnotnull(ws_order_number#2)) AND isnotnull(ws_item_sk#1))

(3) CometProject
Input [6]: [ws_item_sk#1, ws_order_number#2, ws_quantity#3, ws_net_paid#4, ws_net_profit#5, ws_sold_date_sk#6]
Arguments: [ws_item_sk#1, ws_order_number#2, ws_quantity#3, ws_net_paid#4, ws_sold_date_sk#6], [ws_item_sk#1, ws_order_number#2, ws_quantity#3, ws_net_paid#4, ws_sold_date_sk#6]

(4) CometBroadcastExchange
Input [5]: [ws_item_sk#1, ws_order_number#2, ws_quantity#3, ws_net_paid#4, ws_sold_date_sk#6]
Arguments: [ws_item_sk#1, ws_order_number#2, ws_quantity#3, ws_net_paid#4, ws_sold_date_sk#6]

(5) CometNativeScan: `spark_catalog`.`default`.`web_returns`
Output [5]: [wr_item_sk#7, wr_order_number#8, wr_return_quantity#9, wr_return_amt#10, wr_returned_date_sk#11]
Arguments: [wr_item_sk#7, wr_order_number#8, wr_return_quantity#9, wr_return_amt#10, wr_returned_date_sk#11]

(6) CometFilter
Input [5]: [wr_item_sk#7, wr_order_number#8, wr_return_quantity#9, wr_return_amt#10, wr_returned_date_sk#11]
Condition : (((isnotnull(wr_return_amt#10) AND (wr_return_amt#10 > 10000.00)) AND isnotnull(wr_order_number#8)) AND isnotnull(wr_item_sk#7))

(7) CometProject
Input [5]: [wr_item_sk#7, wr_order_number#8, wr_return_quantity#9, wr_return_amt#10, wr_returned_date_sk#11]
Arguments: [wr_item_sk#7, wr_order_number#8, wr_return_quantity#9, wr_return_amt#10], [wr_item_sk#7, wr_order_number#8, wr_return_quantity#9, wr_return_amt#10]

(8) CometBroadcastHashJoin
Left output [5]: [ws_item_sk#1, ws_order_number#2, ws_quantity#3, ws_net_paid#4, ws_sold_date_sk#6]
Right output [4]: [wr_item_sk#7, wr_order_number#8, wr_return_quantity#9, wr_return_amt#10]
Arguments: [ws_order_number#2, ws_item_sk#1], [wr_order_number#8, wr_item_sk#7], Inner, BuildLeft

(9) CometProject
Input [9]: [ws_item_sk#1, ws_order_number#2, ws_quantity#3, ws_net_paid#4, ws_sold_date_sk#6, wr_item_sk#7, wr_order_number#8, wr_return_quantity#9, wr_return_amt#10]
Arguments: [ws_item_sk#1, ws_quantity#3, ws_net_paid#4, ws_sold_date_sk#6, wr_return_quantity#9, wr_return_amt#10], [ws_item_sk#1, ws_quantity#3, ws_net_paid#4, ws_sold_date_sk#6, wr_return_quantity#9, wr_return_amt#10]

(10) CometNativeScan: `spark_catalog`.`default`.`date_dim`
Output [3]: [d_date_sk#12, d_year#13, d_moy#14]
Arguments: [d_date_sk#12, d_year#13, d_moy#14]

(11) CometFilter
Input [3]: [d_date_sk#12, d_year#13, d_moy#14]
Condition : ((((isnotnull(d_year#13) AND isnotnull(d_moy#14)) AND (d_year#13 = 2001)) AND (d_moy#14 = 12)) AND isnotnull(d_date_sk#12))

(12) CometProject
Input [3]: [d_date_sk#12, d_year#13, d_moy#14]
Arguments: [d_date_sk#12], [d_date_sk#12]

(13) CometBroadcastExchange
Input [1]: [d_date_sk#12]
Arguments: [d_date_sk#12]

(14) CometBroadcastHashJoin
Left output [6]: [ws_item_sk#1, ws_quantity#3, ws_net_paid#4, ws_sold_date_sk#6, wr_return_quantity#9, wr_return_amt#10]
Right output [1]: [d_date_sk#12]
Arguments: [ws_sold_date_sk#6], [d_date_sk#12], Inner, BuildRight

(15) CometProject
Input [7]: [ws_item_sk#1, ws_quantity#3, ws_net_paid#4, ws_sold_date_sk#6, wr_return_quantity#9, wr_return_amt#10, d_date_sk#12]
Arguments: [ws_item_sk#1, ws_quantity#3, ws_net_paid#4, wr_return_quantity#9, wr_return_amt#10], [ws_item_sk#1, ws_quantity#3, ws_net_paid#4, wr_return_quantity#9, wr_return_amt#10]

(16) CometHashAggregate
Input [5]: [ws_item_sk#1, ws_quantity#3, ws_net_paid#4, wr_return_quantity#9, wr_return_amt#10]
Keys [1]: [ws_item_sk#1]
Functions [4]: [partial_sum(coalesce(wr_return_quantity#9, 0)), partial_sum(coalesce(ws_quantity#3, 0)), partial_sum(coalesce(cast(wr_return_amt#10 as decimal(12,2)), 0.00)), partial_sum(coalesce(cast(ws_net_paid#4 as decimal(12,2)), 0.00))]

(17) CometExchange
Input [7]: [ws_item_sk#1, sum#15, sum#16, sum#17, isEmpty#18, sum#19, isEmpty#20]
Arguments: hashpartitioning(ws_item_sk#1, 5), ENSURE_REQUIREMENTS, CometNativeShuffle, [plan_id=1]

(18) CometHashAggregate
Input [7]: [ws_item_sk#1, sum#15, sum#16, sum#17, isEmpty#18, sum#19, isEmpty#20]
Keys [1]: [ws_item_sk#1]
Functions [4]: [sum(coalesce(wr_return_quantity#9, 0)), sum(coalesce(ws_quantity#3, 0)), sum(coalesce(cast(wr_return_amt#10 as decimal(12,2)), 0.00)), sum(coalesce(cast(ws_net_paid#4 as decimal(12,2)), 0.00))]

(19) CometExchange
Input [3]: [item#21, return_ratio#22, currency_ratio#23]
Arguments: SinglePartition, ENSURE_REQUIREMENTS, CometNativeShuffle, [plan_id=2]

(20) CometSort
Input [3]: [item#21, return_ratio#22, currency_ratio#23]
Arguments: [item#21, return_ratio#22, currency_ratio#23], [return_ratio#22 ASC NULLS FIRST]

(21) ColumnarToRow [codegen id : 1]
Input [3]: [item#21, return_ratio#22, currency_ratio#23]

(22) Window
Input [3]: [item#21, return_ratio#22, currency_ratio#23]
Arguments: [rank(return_ratio#22) windowspecdefinition(return_ratio#22 ASC NULLS FIRST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS return_rank#24], [return_ratio#22 ASC NULLS FIRST]

(23) Sort [codegen id : 2]
Input [4]: [item#21, return_ratio#22, currency_ratio#23, return_rank#24]
Arguments: [currency_ratio#23 ASC NULLS FIRST], false, 0

(24) Window
Input [4]: [item#21, return_ratio#22, currency_ratio#23, return_rank#24]
Arguments: [rank(currency_ratio#23) windowspecdefinition(currency_ratio#23 ASC NULLS FIRST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS currency_rank#25], [currency_ratio#23 ASC NULLS FIRST]

(25) Filter [codegen id : 3]
Input [5]: [item#21, return_ratio#22, currency_ratio#23, return_rank#24, currency_rank#25]
Condition : ((return_rank#24 <= 10) OR (currency_rank#25 <= 10))

(26) Project [codegen id : 3]
Output [5]: [web AS channel#26, item#21, return_ratio#22, return_rank#24, currency_rank#25]
Input [5]: [item#21, return_ratio#22, currency_ratio#23, return_rank#24, currency_rank#25]

(27) ReusedExchange [Reuses operator id: 19]
Output [3]: [item#27, return_ratio#28, currency_ratio#29]

(28) CometSort
Input [3]: [item#27, return_ratio#28, currency_ratio#29]
Arguments: [item#27, return_ratio#28, currency_ratio#29], [return_ratio#28 ASC NULLS FIRST]

(29) ColumnarToRow [codegen id : 4]
Input [3]: [item#27, return_ratio#28, currency_ratio#29]

(30) Window
Input [3]: [item#27, return_ratio#28, currency_ratio#29]
Arguments: [rank(return_ratio#28) windowspecdefinition(return_ratio#28 ASC NULLS FIRST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS return_rank#30], [return_ratio#28 ASC NULLS FIRST]

(31) Sort [codegen id : 5]
Input [4]: [item#27, return_ratio#28, currency_ratio#29, return_rank#30]
Arguments: [currency_ratio#29 ASC NULLS FIRST], false, 0

(32) Window
Input [4]: [item#27, return_ratio#28, currency_ratio#29, return_rank#30]
Arguments: [rank(currency_ratio#29) windowspecdefinition(currency_ratio#29 ASC NULLS FIRST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS currency_rank#31], [currency_ratio#29 ASC NULLS FIRST]

(33) Filter [codegen id : 6]
Input [5]: [item#27, return_ratio#28, currency_ratio#29, return_rank#30, currency_rank#31]
Condition : ((return_rank#30 <= 10) OR (currency_rank#31 <= 10))

(34) Project [codegen id : 6]
Output [5]: [catalog AS channel#32, item#27, return_ratio#28, return_rank#30, currency_rank#31]
Input [5]: [item#27, return_ratio#28, currency_ratio#29, return_rank#30, currency_rank#31]

(35) ReusedExchange [Reuses operator id: 19]
Output [3]: [item#33, return_ratio#34, currency_ratio#35]

(36) CometSort
Input [3]: [item#33, return_ratio#34, currency_ratio#35]
Arguments: [item#33, return_ratio#34, currency_ratio#35], [return_ratio#34 ASC NULLS FIRST]

(37) ColumnarToRow [codegen id : 7]
Input [3]: [item#33, return_ratio#34, currency_ratio#35]

(38) Window
Input [3]: [item#33, return_ratio#34, currency_ratio#35]
Arguments: [rank(return_ratio#34) windowspecdefinition(return_ratio#34 ASC NULLS FIRST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS return_rank#36], [return_ratio#34 ASC NULLS FIRST]

(39) Sort [codegen id : 8]
Input [4]: [item#33, return_ratio#34, currency_ratio#35, return_rank#36]
Arguments: [currency_ratio#35 ASC NULLS FIRST], false, 0

(40) Window
Input [4]: [item#33, return_ratio#34, currency_ratio#35, return_rank#36]
Arguments: [rank(currency_ratio#35) windowspecdefinition(currency_ratio#35 ASC NULLS FIRST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS currency_rank#37], [currency_ratio#35 ASC NULLS FIRST]

(41) Filter [codegen id : 9]
Input [5]: [item#33, return_ratio#34, currency_ratio#35, return_rank#36, currency_rank#37]
Condition : ((return_rank#36 <= 10) OR (currency_rank#37 <= 10))

(42) Project [codegen id : 9]
Output [5]: [store AS channel#38, item#33, return_ratio#34, return_rank#36, currency_rank#37]
Input [5]: [item#33, return_ratio#34, currency_ratio#35, return_rank#36, currency_rank#37]

(43) Union

(44) HashAggregate [codegen id : 10]
Input [5]: [channel#26, item#21, return_ratio#22, return_rank#24, currency_rank#25]
Keys [5]: [channel#26, item#21, return_ratio#22, return_rank#24, currency_rank#25]
Functions: []
Aggregate Attributes: []
Results [5]: [channel#26, item#21, return_ratio#22, return_rank#24, currency_rank#25]

(45) Exchange
Input [5]: [channel#26, item#21, return_ratio#22, return_rank#24, currency_rank#25]
Arguments: hashpartitioning(channel#26, item#21, return_ratio#22, return_rank#24, currency_rank#25, 5), ENSURE_REQUIREMENTS, [plan_id=3]

(46) HashAggregate [codegen id : 11]
Input [5]: [channel#26, item#21, return_ratio#22, return_rank#24, currency_rank#25]
Keys [5]: [channel#26, item#21, return_ratio#22, return_rank#24, currency_rank#25]
Functions: []
Aggregate Attributes: []
Results [5]: [channel#26, item#21, return_ratio#22, return_rank#24, currency_rank#25]

(47) TakeOrderedAndProject
Input [5]: [channel#26, item#21, return_ratio#22, return_rank#24, currency_rank#25]
Arguments: 100, [channel#26 ASC NULLS FIRST, return_rank#24 ASC NULLS FIRST, currency_rank#25 ASC NULLS FIRST], [channel#26, item#21, return_ratio#22, return_rank#24, currency_rank#25]

