== Physical Plan ==
VeloxColumnarToRow (71)
+- TakeOrderedAndProjectExecTransformer (70)
   +- ^ FilterExecTransformer (68)
      +- ^ WindowExecTransformer (67)
         +- ^ SortExecTransformer (66)
            +- ^ InputIteratorTransformer (65)
               +- ColumnarExchange (63)
                  +- VeloxResizeBatches (62)
                     +- ^ ProjectExecTransformer (60)
                        +- ^ ShuffledHashJoinExecTransformer FullOuter BuildLeft (59)
                           :- ^ InputIteratorTransformer (29)
                           :  +- ColumnarExchange (27)
                           :     +- VeloxResizeBatches (26)
                           :        +- ^ ProjectExecTransformer (24)
                           :           +- ^ WindowExecTransformer (23)
                           :              +- ^ SortExecTransformer (22)
                           :                 +- ^ InputIteratorTransformer (21)
                           :                    +- ColumnarExchange (19)
                           :                       +- VeloxResizeBatches (18)
                           :                          +- ^ ProjectExecTransformer (16)
                           :                             +- ^ RegularHashAggregateExecTransformer (15)
                           :                                +- ^ InputIteratorTransformer (14)
                           :                                   +- ColumnarExchange (12)
                           :                                      +- VeloxResizeBatches (11)
                           :                                         +- ^ ProjectExecTransformer (9)
                           :                                            +- ^ FlushableHashAggregateExecTransformer (8)
                           :                                               +- ^ ProjectExecTransformer (7)
                           :                                                  +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (6)
                           :                                                     :- ^ FilterExecTransformer (2)
                           :                                                     :  +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.web_sales (1)
                           :                                                     +- ^ InputIteratorTransformer (5)
                           :                                                        +- ReusedExchange (3)
                           +- ^ InputIteratorTransformer (58)
                              +- ColumnarExchange (56)
                                 +- VeloxResizeBatches (55)
                                    +- ^ ProjectExecTransformer (53)
                                       +- ^ WindowExecTransformer (52)
                                          +- ^ SortExecTransformer (51)
                                             +- ^ InputIteratorTransformer (50)
                                                +- ColumnarExchange (48)
                                                   +- VeloxResizeBatches (47)
                                                      +- ^ ProjectExecTransformer (45)
                                                         +- ^ RegularHashAggregateExecTransformer (44)
                                                            +- ^ InputIteratorTransformer (43)
                                                               +- ColumnarExchange (41)
                                                                  +- VeloxResizeBatches (40)
                                                                     +- ^ ProjectExecTransformer (38)
                                                                        +- ^ FlushableHashAggregateExecTransformer (37)
                                                                           +- ^ ProjectExecTransformer (36)
                                                                              +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (35)
                                                                                 :- ^ FilterExecTransformer (31)
                                                                                 :  +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.store_sales (30)
                                                                                 +- ^ InputIteratorTransformer (34)
                                                                                    +- ReusedExchange (32)


(1) FileSourceScanExecTransformer parquet spark_catalog.default.web_sales
Output [3]: [ws_item_sk#1, ws_sales_price#2, ws_sold_date_sk#3]
Batched: true
Location: InMemoryFileIndex []
PartitionFilters: [isnotnull(ws_sold_date_sk#3), dynamicpruningexpression(ws_sold_date_sk#3 IN dynamicpruning#4)]
PushedFilters: [IsNotNull(ws_item_sk)]
ReadSchema: struct<ws_item_sk:int,ws_sales_price:decimal(7,2)>

(2) FilterExecTransformer
Input [3]: [ws_item_sk#1, ws_sales_price#2, ws_sold_date_sk#3]
Arguments: isnotnull(ws_item_sk#1)

(3) ReusedExchange [Reuses operator id: 76]
Output [2]: [d_date_sk#5, d_date#6]

(4) InputAdapter
Input [2]: [d_date_sk#5, d_date#6]

(5) InputIteratorTransformer
Input [2]: [d_date_sk#5, d_date#6]

(6) BroadcastHashJoinExecTransformer
Left keys [1]: [ws_sold_date_sk#3]
Right keys [1]: [d_date_sk#5]
Join type: Inner
Join condition: None

(7) ProjectExecTransformer
Output [3]: [ws_item_sk#1, d_date#6, UnscaledValue(ws_sales_price#2) AS _pre_1#7]
Input [5]: [ws_item_sk#1, ws_sales_price#2, ws_sold_date_sk#3, d_date_sk#5, d_date#6]

(8) FlushableHashAggregateExecTransformer
Input [3]: [ws_item_sk#1, d_date#6, _pre_1#7]
Keys [2]: [ws_item_sk#1, d_date#6]
Functions [1]: [partial_sum(_pre_1#7)]
Aggregate Attributes [1]: [sum#8]
Results [3]: [ws_item_sk#1, d_date#6, sum#9]

(9) ProjectExecTransformer
Output [4]: [hash(ws_item_sk#1, d_date#6, 42) AS hash_partition_key#10, ws_item_sk#1, d_date#6, sum#9]
Input [3]: [ws_item_sk#1, d_date#6, sum#9]

(10) WholeStageCodegenTransformer (3)
Input [4]: [hash_partition_key#10, ws_item_sk#1, d_date#6, sum#9]
Arguments: false

(11) VeloxResizeBatches
Input [4]: [hash_partition_key#10, ws_item_sk#1, d_date#6, sum#9]
Arguments: 1024, 2147483647, 10485760

(12) ColumnarExchange
Input [4]: [hash_partition_key#10, ws_item_sk#1, d_date#6, sum#9]
Arguments: hashpartitioning(ws_item_sk#1, d_date#6, 1), ENSURE_REQUIREMENTS, [ws_item_sk#1, d_date#6, sum#9], [plan_id=1], [shuffle_writer_type=hash]

(13) InputAdapter
Input [3]: [ws_item_sk#1, d_date#6, sum#9]

(14) InputIteratorTransformer
Input [3]: [ws_item_sk#1, d_date#6, sum#9]

(15) RegularHashAggregateExecTransformer
Input [3]: [ws_item_sk#1, d_date#6, sum#9]
Keys [2]: [ws_item_sk#1, d_date#6]
Functions [1]: [sum(UnscaledValue(ws_sales_price#2))]
Aggregate Attributes [1]: [sum(UnscaledValue(ws_sales_price#2))#11]
Results [3]: [ws_item_sk#1, d_date#6, sum(UnscaledValue(ws_sales_price#2))#11]

(16) ProjectExecTransformer
Output [5]: [hash(ws_item_sk#1, 42) AS hash_partition_key#12, ws_item_sk#1 AS item_sk#13, d_date#6, MakeDecimal(sum(UnscaledValue(ws_sales_price#2))#11,17,2) AS _w0#14, ws_item_sk#1]
Input [3]: [ws_item_sk#1, d_date#6, sum(UnscaledValue(ws_sales_price#2))#11]

(17) WholeStageCodegenTransformer (4)
Input [5]: [hash_partition_key#12, item_sk#13, d_date#6, _w0#14, ws_item_sk#1]
Arguments: false

(18) VeloxResizeBatches
Input [5]: [hash_partition_key#12, item_sk#13, d_date#6, _w0#14, ws_item_sk#1]
Arguments: 1024, 2147483647, 10485760

(19) ColumnarExchange
Input [5]: [hash_partition_key#12, item_sk#13, d_date#6, _w0#14, ws_item_sk#1]
Arguments: hashpartitioning(ws_item_sk#1, 1), ENSURE_REQUIREMENTS, [item_sk#13, d_date#6, _w0#14, ws_item_sk#1], [plan_id=2], [shuffle_writer_type=hash]

(20) InputAdapter
Input [4]: [item_sk#13, d_date#6, _w0#14, ws_item_sk#1]

(21) InputIteratorTransformer
Input [4]: [item_sk#13, d_date#6, _w0#14, ws_item_sk#1]

(22) SortExecTransformer
Input [4]: [item_sk#13, d_date#6, _w0#14, ws_item_sk#1]
Arguments: [ws_item_sk#1 ASC NULLS FIRST, d_date#6 ASC NULLS FIRST], false, 0

(23) WindowExecTransformer
Input [4]: [item_sk#13, d_date#6, _w0#14, ws_item_sk#1]
Arguments: [sum(_w0#14) windowspecdefinition(ws_item_sk#1, d_date#6 ASC NULLS FIRST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS cume_sales#15], [ws_item_sk#1], [d_date#6 ASC NULLS FIRST]

(24) ProjectExecTransformer
Output [4]: [hash(item_sk#13, d_date#6, 42) AS hash_partition_key#16, item_sk#13, d_date#6, cume_sales#15]
Input [5]: [item_sk#13, d_date#6, _w0#14, ws_item_sk#1, cume_sales#15]

(25) WholeStageCodegenTransformer (5)
Input [4]: [hash_partition_key#16, item_sk#13, d_date#6, cume_sales#15]
Arguments: false

(26) VeloxResizeBatches
Input [4]: [hash_partition_key#16, item_sk#13, d_date#6, cume_sales#15]
Arguments: 1024, 2147483647, 10485760

(27) ColumnarExchange
Input [4]: [hash_partition_key#16, item_sk#13, d_date#6, cume_sales#15]
Arguments: hashpartitioning(item_sk#13, d_date#6, 1), ENSURE_REQUIREMENTS, [item_sk#13, d_date#6, cume_sales#15], [plan_id=3], [shuffle_writer_type=hash]

(28) InputAdapter
Input [3]: [item_sk#13, d_date#6, cume_sales#15]

(29) InputIteratorTransformer
Input [3]: [item_sk#13, d_date#6, cume_sales#15]

(30) FileSourceScanExecTransformer parquet spark_catalog.default.store_sales
Output [3]: [ss_item_sk#17, ss_sales_price#18, ss_sold_date_sk#19]
Batched: true
Location: InMemoryFileIndex []
PartitionFilters: [isnotnull(ss_sold_date_sk#19), dynamicpruningexpression(ss_sold_date_sk#19 IN dynamicpruning#4)]
PushedFilters: [IsNotNull(ss_item_sk)]
ReadSchema: struct<ss_item_sk:int,ss_sales_price:decimal(7,2)>

(31) FilterExecTransformer
Input [3]: [ss_item_sk#17, ss_sales_price#18, ss_sold_date_sk#19]
Arguments: isnotnull(ss_item_sk#17)

(32) ReusedExchange [Reuses operator id: 76]
Output [2]: [d_date_sk#20, d_date#21]

(33) InputAdapter
Input [2]: [d_date_sk#20, d_date#21]

(34) InputIteratorTransformer
Input [2]: [d_date_sk#20, d_date#21]

(35) BroadcastHashJoinExecTransformer
Left keys [1]: [ss_sold_date_sk#19]
Right keys [1]: [d_date_sk#20]
Join type: Inner
Join condition: None

(36) ProjectExecTransformer
Output [3]: [ss_item_sk#17, d_date#21, UnscaledValue(ss_sales_price#18) AS _pre_2#22]
Input [5]: [ss_item_sk#17, ss_sales_price#18, ss_sold_date_sk#19, d_date_sk#20, d_date#21]

(37) FlushableHashAggregateExecTransformer
Input [3]: [ss_item_sk#17, d_date#21, _pre_2#22]
Keys [2]: [ss_item_sk#17, d_date#21]
Functions [1]: [partial_sum(_pre_2#22)]
Aggregate Attributes [1]: [sum#23]
Results [3]: [ss_item_sk#17, d_date#21, sum#24]

(38) ProjectExecTransformer
Output [4]: [hash(ss_item_sk#17, d_date#21, 42) AS hash_partition_key#25, ss_item_sk#17, d_date#21, sum#24]
Input [3]: [ss_item_sk#17, d_date#21, sum#24]

(39) WholeStageCodegenTransformer (8)
Input [4]: [hash_partition_key#25, ss_item_sk#17, d_date#21, sum#24]
Arguments: false

(40) VeloxResizeBatches
Input [4]: [hash_partition_key#25, ss_item_sk#17, d_date#21, sum#24]
Arguments: 1024, 2147483647, 10485760

(41) ColumnarExchange
Input [4]: [hash_partition_key#25, ss_item_sk#17, d_date#21, sum#24]
Arguments: hashpartitioning(ss_item_sk#17, d_date#21, 1), ENSURE_REQUIREMENTS, [ss_item_sk#17, d_date#21, sum#24], [plan_id=4], [shuffle_writer_type=hash]

(42) InputAdapter
Input [3]: [ss_item_sk#17, d_date#21, sum#24]

(43) InputIteratorTransformer
Input [3]: [ss_item_sk#17, d_date#21, sum#24]

(44) RegularHashAggregateExecTransformer
Input [3]: [ss_item_sk#17, d_date#21, sum#24]
Keys [2]: [ss_item_sk#17, d_date#21]
Functions [1]: [sum(UnscaledValue(ss_sales_price#18))]
Aggregate Attributes [1]: [sum(UnscaledValue(ss_sales_price#18))#26]
Results [3]: [ss_item_sk#17, d_date#21, sum(UnscaledValue(ss_sales_price#18))#26]

(45) ProjectExecTransformer
Output [5]: [hash(ss_item_sk#17, 42) AS hash_partition_key#27, ss_item_sk#17 AS item_sk#28, d_date#21, MakeDecimal(sum(UnscaledValue(ss_sales_price#18))#26,17,2) AS _w0#29, ss_item_sk#17]
Input [3]: [ss_item_sk#17, d_date#21, sum(UnscaledValue(ss_sales_price#18))#26]

(46) WholeStageCodegenTransformer (9)
Input [5]: [hash_partition_key#27, item_sk#28, d_date#21, _w0#29, ss_item_sk#17]
Arguments: false

(47) VeloxResizeBatches
Input [5]: [hash_partition_key#27, item_sk#28, d_date#21, _w0#29, ss_item_sk#17]
Arguments: 1024, 2147483647, 10485760

(48) ColumnarExchange
Input [5]: [hash_partition_key#27, item_sk#28, d_date#21, _w0#29, ss_item_sk#17]
Arguments: hashpartitioning(ss_item_sk#17, 1), ENSURE_REQUIREMENTS, [item_sk#28, d_date#21, _w0#29, ss_item_sk#17], [plan_id=5], [shuffle_writer_type=hash]

(49) InputAdapter
Input [4]: [item_sk#28, d_date#21, _w0#29, ss_item_sk#17]

(50) InputIteratorTransformer
Input [4]: [item_sk#28, d_date#21, _w0#29, ss_item_sk#17]

(51) SortExecTransformer
Input [4]: [item_sk#28, d_date#21, _w0#29, ss_item_sk#17]
Arguments: [ss_item_sk#17 ASC NULLS FIRST, d_date#21 ASC NULLS FIRST], false, 0

(52) WindowExecTransformer
Input [4]: [item_sk#28, d_date#21, _w0#29, ss_item_sk#17]
Arguments: [sum(_w0#29) windowspecdefinition(ss_item_sk#17, d_date#21 ASC NULLS FIRST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS cume_sales#30], [ss_item_sk#17], [d_date#21 ASC NULLS FIRST]

(53) ProjectExecTransformer
Output [4]: [hash(item_sk#28, d_date#21, 42) AS hash_partition_key#31, item_sk#28, d_date#21, cume_sales#30]
Input [5]: [item_sk#28, d_date#21, _w0#29, ss_item_sk#17, cume_sales#30]

(54) WholeStageCodegenTransformer (10)
Input [4]: [hash_partition_key#31, item_sk#28, d_date#21, cume_sales#30]
Arguments: false

(55) VeloxResizeBatches
Input [4]: [hash_partition_key#31, item_sk#28, d_date#21, cume_sales#30]
Arguments: 1024, 2147483647, 10485760

(56) ColumnarExchange
Input [4]: [hash_partition_key#31, item_sk#28, d_date#21, cume_sales#30]
Arguments: hashpartitioning(item_sk#28, d_date#21, 1), ENSURE_REQUIREMENTS, [item_sk#28, d_date#21, cume_sales#30], [plan_id=6], [shuffle_writer_type=hash]

(57) InputAdapter
Input [3]: [item_sk#28, d_date#21, cume_sales#30]

(58) InputIteratorTransformer
Input [3]: [item_sk#28, d_date#21, cume_sales#30]

(59) ShuffledHashJoinExecTransformer
Left keys [2]: [item_sk#13, d_date#6]
Right keys [2]: [item_sk#28, d_date#21]
Join type: FullOuter
Join condition: None

(60) ProjectExecTransformer
Output [5]: [hash(CASE WHEN isnotnull(item_sk#13) THEN item_sk#13 ELSE item_sk#28 END, 42) AS hash_partition_key#32, CASE WHEN isnotnull(item_sk#13) THEN item_sk#13 ELSE item_sk#28 END AS item_sk#33, CASE WHEN isnotnull(d_date#6) THEN d_date#6 ELSE d_date#21 END AS d_date#34, cume_sales#15 AS web_sales#35, cume_sales#30 AS store_sales#36]
Input [6]: [item_sk#13, d_date#6, cume_sales#15, item_sk#28, d_date#21, cume_sales#30]

(61) WholeStageCodegenTransformer (11)
Input [5]: [hash_partition_key#32, item_sk#33, d_date#34, web_sales#35, store_sales#36]
Arguments: false

(62) VeloxResizeBatches
Input [5]: [hash_partition_key#32, item_sk#33, d_date#34, web_sales#35, store_sales#36]
Arguments: 1024, 2147483647, 10485760

(63) ColumnarExchange
Input [5]: [hash_partition_key#32, item_sk#33, d_date#34, web_sales#35, store_sales#36]
Arguments: hashpartitioning(item_sk#33, 1), ENSURE_REQUIREMENTS, [item_sk#33, d_date#34, web_sales#35, store_sales#36], [plan_id=7], [shuffle_writer_type=hash]

(64) InputAdapter
Input [4]: [item_sk#33, d_date#34, web_sales#35, store_sales#36]

(65) InputIteratorTransformer
Input [4]: [item_sk#33, d_date#34, web_sales#35, store_sales#36]

(66) SortExecTransformer
Input [4]: [item_sk#33, d_date#34, web_sales#35, store_sales#36]
Arguments: [item_sk#33 ASC NULLS FIRST, d_date#34 ASC NULLS FIRST], false, 0

(67) WindowExecTransformer
Input [4]: [item_sk#33, d_date#34, web_sales#35, store_sales#36]
Arguments: [max(web_sales#35) windowspecdefinition(item_sk#33, d_date#34 ASC NULLS FIRST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS web_cumulative#37, max(store_sales#36) windowspecdefinition(item_sk#33, d_date#34 ASC NULLS FIRST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())) AS store_cumulative#38], [item_sk#33], [d_date#34 ASC NULLS FIRST]

(68) FilterExecTransformer
Input [6]: [item_sk#33, d_date#34, web_sales#35, store_sales#36, web_cumulative#37, store_cumulative#38]
Arguments: ((isnotnull(web_cumulative#37) AND isnotnull(store_cumulative#38)) AND (web_cumulative#37 > store_cumulative#38))

(69) WholeStageCodegenTransformer (12)
Input [6]: [item_sk#33, d_date#34, web_sales#35, store_sales#36, web_cumulative#37, store_cumulative#38]
Arguments: false

(70) TakeOrderedAndProjectExecTransformer
Input [6]: [item_sk#33, d_date#34, web_sales#35, store_sales#36, web_cumulative#37, store_cumulative#38]
Arguments: 100, [item_sk#33 ASC NULLS FIRST, d_date#34 ASC NULLS FIRST], [item_sk#33, d_date#34, web_sales#35, store_sales#36, web_cumulative#37, store_cumulative#38], 0

(71) VeloxColumnarToRow
Input [6]: [item_sk#33, d_date#34, web_sales#35, store_sales#36, web_cumulative#37, store_cumulative#38]

===== Subqueries =====

Subquery:1 Hosting operator id = 1 Hosting Expression = ws_sold_date_sk#3 IN dynamicpruning#4
ColumnarBroadcastExchange (76)
+- ^ ProjectExecTransformer (74)
   +- ^ FilterExecTransformer (73)
      +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (72)


(72) FileSourceScanExecTransformer parquet spark_catalog.default.date_dim
Output [3]: [d_date_sk#5, d_date#6, d_month_seq#39]
Batched: true
Location: InMemoryFileIndex [{warehouse_dir}/date_dim]
PushedFilters: [IsNotNull(d_month_seq), GreaterThanOrEqual(d_month_seq,1200), LessThanOrEqual(d_month_seq,1211), IsNotNull(d_date_sk)]
ReadSchema: struct<d_date_sk:int,d_date:date,d_month_seq:int>

(73) FilterExecTransformer
Input [3]: [d_date_sk#5, d_date#6, d_month_seq#39]
Arguments: (((isnotnull(d_month_seq#39) AND (d_month_seq#39 >= 1200)) AND (d_month_seq#39 <= 1211)) AND isnotnull(d_date_sk#5))

(74) ProjectExecTransformer
Output [2]: [d_date_sk#5, d_date#6]
Input [3]: [d_date_sk#5, d_date#6, d_month_seq#39]

(75) WholeStageCodegenTransformer (1)
Input [2]: [d_date_sk#5, d_date#6]
Arguments: false

(76) ColumnarBroadcastExchange
Input [2]: [d_date_sk#5, d_date#6]
Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=8]

Subquery:2 Hosting operator id = 30 Hosting Expression = ss_sold_date_sk#19 IN dynamicpruning#4


