== Physical Plan ==
VeloxColumnarToRow (150)
+- TakeOrderedAndProjectExecTransformer (149)
   +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (147)
      :- ^ FilterExecTransformer (116)
      :  +- ^ ProjectExecTransformer (115)
      :     +- ^ RegularHashAggregateExecTransformer (114)
      :        +- ^ InputIteratorTransformer (113)
      :           +- ColumnarExchange (111)
      :              +- VeloxResizeBatches (110)
      :                 +- ^ ProjectExecTransformer (108)
      :                    +- ^ FlushableHashAggregateExecTransformer (107)
      :                       +- ^ ProjectExecTransformer (106)
      :                          +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (105)
      :                             :- ^ ProjectExecTransformer (94)
      :                             :  +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (93)
      :                             :     :- ^ BroadcastHashJoinExecTransformer LeftSemi BuildRight (89)
      :                             :     :  :- ^ FilterExecTransformer (2)
      :                             :     :  :  +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.store_sales (1)
      :                             :     :  +- ^ InputIteratorTransformer (88)
      :                             :     :     +- ColumnarBroadcastExchange (86)
      :                             :     :        +- ^ ProjectExecTransformer (84)
      :                             :     :           +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (83)
      :                             :     :              :- ^ FilterExecTransformer (4)
      :                             :     :              :  +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.item (3)
      :                             :     :              +- ^ InputIteratorTransformer (82)
      :                             :     :                 +- ColumnarBroadcastExchange (80)
      :                             :     :                    +- ^ ShuffledHashJoinExecTransformer LeftSemi BuildRight (78)
      :                             :     :                       :- ^ InputIteratorTransformer (60)
      :                             :     :                       :  +- ColumnarExchange (58)
      :                             :     :                       :     +- VeloxResizeBatches (57)
      :                             :     :                       :        +- ^ ProjectExecTransformer (55)
      :                             :     :                       :           +- ^ FlushableHashAggregateExecTransformer (54)
      :                             :     :                       :              +- ^ InputIteratorTransformer (53)
      :                             :     :                       :                 +- ColumnarExchange (51)
      :                             :     :                       :                    +- VeloxResizeBatches (50)
      :                             :     :                       :                       +- ^ ProjectExecTransformer (48)
      :                             :     :                       :                          +- ^ FlushableHashAggregateExecTransformer (47)
      :                             :     :                       :                             +- ^ ProjectExecTransformer (46)
      :                             :     :                       :                                +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (45)
      :                             :     :                       :                                   :- ^ ProjectExecTransformer (11)
      :                             :     :                       :                                   :  +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (10)
      :                             :     :                       :                                   :     :- ^ FilterExecTransformer (6)
      :                             :     :                       :                                   :     :  +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.store_sales (5)
      :                             :     :                       :                                   :     +- ^ InputIteratorTransformer (9)
      :                             :     :                       :                                   :        +- ReusedExchange (7)
      :                             :     :                       :                                   +- ^ InputIteratorTransformer (44)
      :                             :     :                       :                                      +- ColumnarBroadcastExchange (42)
      :                             :     :                       :                                         +- ^ ShuffledHashJoinExecTransformer LeftSemi BuildRight (40)
      :                             :     :                       :                                            :- ^ InputIteratorTransformer (19)
      :                             :     :                       :                                            :  +- ColumnarExchange (17)
      :                             :     :                       :                                            :     +- VeloxResizeBatches (16)
      :                             :     :                       :                                            :        +- ^ ProjectExecTransformer (14)
      :                             :     :                       :                                            :           +- ^ FilterExecTransformer (13)
      :                             :     :                       :                                            :              +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.item (12)
      :                             :     :                       :                                            +- ^ InputIteratorTransformer (39)
      :                             :     :                       :                                               +- ColumnarExchange (37)
      :                             :     :                       :                                                  +- VeloxResizeBatches (36)
      :                             :     :                       :                                                     +- ^ ProjectExecTransformer (34)
      :                             :     :                       :                                                        +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (33)
      :                             :     :                       :                                                           :- ^ ProjectExecTransformer (26)
      :                             :     :                       :                                                           :  +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (25)
      :                             :     :                       :                                                           :     :- ^ FilterExecTransformer (21)
      :                             :     :                       :                                                           :     :  +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.catalog_sales (20)
      :                             :     :                       :                                                           :     +- ^ InputIteratorTransformer (24)
      :                             :     :                       :                                                           :        +- ReusedExchange (22)
      :                             :     :                       :                                                           +- ^ InputIteratorTransformer (32)
      :                             :     :                       :                                                              +- ColumnarBroadcastExchange (30)
      :                             :     :                       :                                                                 +- ^ FilterExecTransformer (28)
      :                             :     :                       :                                                                    +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.item (27)
      :                             :     :                       +- ^ InputIteratorTransformer (77)
      :                             :     :                          +- ColumnarExchange (75)
      :                             :     :                             +- VeloxResizeBatches (74)
      :                             :     :                                +- ^ ProjectExecTransformer (72)
      :                             :     :                                   +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (71)
      :                             :     :                                      :- ^ ProjectExecTransformer (67)
      :                             :     :                                      :  +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (66)
      :                             :     :                                      :     :- ^ FilterExecTransformer (62)
      :                             :     :                                      :     :  +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.web_sales (61)
      :                             :     :                                      :     +- ^ InputIteratorTransformer (65)
      :                             :     :                                      :        +- ReusedExchange (63)
      :                             :     :                                      +- ^ InputIteratorTransformer (70)
      :                             :     :                                         +- ReusedExchange (68)
      :                             :     +- ^ InputIteratorTransformer (92)
      :                             :        +- ReusedExchange (90)
      :                             +- ^ InputIteratorTransformer (104)
      :                                +- ColumnarBroadcastExchange (102)
      :                                   +- ^ BroadcastHashJoinExecTransformer LeftSemi BuildRight (100)
      :                                      :- ^ FilterExecTransformer (96)
      :                                      :  +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.item (95)
      :                                      +- ^ InputIteratorTransformer (99)
      :                                         +- ReusedExchange (97)
      +- ^ InputIteratorTransformer (146)
         +- ColumnarBroadcastExchange (144)
            +- ^ FilterExecTransformer (142)
               +- ^ ProjectExecTransformer (141)
                  +- ^ RegularHashAggregateExecTransformer (140)
                     +- ^ InputIteratorTransformer (139)
                        +- ColumnarExchange (137)
                           +- VeloxResizeBatches (136)
                              +- ^ ProjectExecTransformer (134)
                                 +- ^ FlushableHashAggregateExecTransformer (133)
                                    +- ^ ProjectExecTransformer (132)
                                       +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (131)
                                          :- ^ ProjectExecTransformer (127)
                                          :  +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (126)
                                          :     :- ^ BroadcastHashJoinExecTransformer LeftSemi BuildRight (122)
                                          :     :  :- ^ FilterExecTransformer (118)
                                          :     :  :  +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.store_sales (117)
                                          :     :  +- ^ InputIteratorTransformer (121)
                                          :     :     +- ReusedExchange (119)
                                          :     +- ^ InputIteratorTransformer (125)
                                          :        +- ReusedExchange (123)
                                          +- ^ InputIteratorTransformer (130)
                                             +- ReusedExchange (128)


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

(2) FilterExecTransformer
Input [4]: [ss_item_sk#1, ss_quantity#2, ss_list_price#3, ss_sold_date_sk#4]
Arguments: isnotnull(ss_item_sk#1)

(3) FileSourceScanExecTransformer parquet spark_catalog.default.item
Output [4]: [i_item_sk#6, i_brand_id#7, i_class_id#8, i_category_id#9]
Batched: true
Location: InMemoryFileIndex [{warehouse_dir}/item]
PushedFilters: [IsNotNull(i_brand_id), IsNotNull(i_class_id), IsNotNull(i_category_id)]
ReadSchema: struct<i_item_sk:int,i_brand_id:int,i_class_id:int,i_category_id:int>

(4) FilterExecTransformer
Input [4]: [i_item_sk#6, i_brand_id#7, i_class_id#8, i_category_id#9]
Arguments: ((isnotnull(i_brand_id#7) AND isnotnull(i_class_id#8)) AND isnotnull(i_category_id#9))

(5) FileSourceScanExecTransformer parquet spark_catalog.default.store_sales
Output [2]: [ss_item_sk#10, ss_sold_date_sk#11]
Batched: true
Location: InMemoryFileIndex []
PartitionFilters: [isnotnull(ss_sold_date_sk#11), dynamicpruningexpression(ss_sold_date_sk#11 IN dynamicpruning#12)]
PushedFilters: [IsNotNull(ss_item_sk)]
ReadSchema: struct<ss_item_sk:int>

(6) FilterExecTransformer
Input [2]: [ss_item_sk#10, ss_sold_date_sk#11]
Arguments: isnotnull(ss_item_sk#10)

(7) ReusedExchange [Reuses operator id: 199]
Output [1]: [d_date_sk#13]

(8) InputAdapter
Input [1]: [d_date_sk#13]

(9) InputIteratorTransformer
Input [1]: [d_date_sk#13]

(10) BroadcastHashJoinExecTransformer
Left keys [1]: [ss_sold_date_sk#11]
Right keys [1]: [d_date_sk#13]
Join type: Inner
Join condition: None

(11) ProjectExecTransformer
Output [1]: [ss_item_sk#10]
Input [3]: [ss_item_sk#10, ss_sold_date_sk#11, d_date_sk#13]

(12) FileSourceScanExecTransformer parquet spark_catalog.default.item
Output [4]: [i_item_sk#14, i_brand_id#15, i_class_id#16, i_category_id#17]
Batched: true
Location: InMemoryFileIndex [{warehouse_dir}/item]
PushedFilters: [IsNotNull(i_item_sk), IsNotNull(i_brand_id), IsNotNull(i_class_id), IsNotNull(i_category_id)]
ReadSchema: struct<i_item_sk:int,i_brand_id:int,i_class_id:int,i_category_id:int>

(13) FilterExecTransformer
Input [4]: [i_item_sk#14, i_brand_id#15, i_class_id#16, i_category_id#17]
Arguments: (((isnotnull(i_item_sk#14) AND isnotnull(i_brand_id#15)) AND isnotnull(i_class_id#16)) AND isnotnull(i_category_id#17))

(14) ProjectExecTransformer
Output [5]: [hash(coalesce(i_brand_id#15, 0), isnull(i_brand_id#15), coalesce(i_class_id#16, 0), isnull(i_class_id#16), coalesce(i_category_id#17, 0), isnull(i_category_id#17), 42) AS hash_partition_key#18, i_item_sk#14, i_brand_id#15, i_class_id#16, i_category_id#17]
Input [4]: [i_item_sk#14, i_brand_id#15, i_class_id#16, i_category_id#17]

(15) WholeStageCodegenTransformer (17)
Input [5]: [hash_partition_key#18, i_item_sk#14, i_brand_id#15, i_class_id#16, i_category_id#17]
Arguments: false

(16) VeloxResizeBatches
Input [5]: [hash_partition_key#18, i_item_sk#14, i_brand_id#15, i_class_id#16, i_category_id#17]
Arguments: 1024, 2147483647, 10485760

(17) ColumnarExchange
Input [5]: [hash_partition_key#18, i_item_sk#14, i_brand_id#15, i_class_id#16, i_category_id#17]
Arguments: hashpartitioning(coalesce(i_brand_id#15, 0), isnull(i_brand_id#15), coalesce(i_class_id#16, 0), isnull(i_class_id#16), coalesce(i_category_id#17, 0), isnull(i_category_id#17), 1), ENSURE_REQUIREMENTS, [i_item_sk#14, i_brand_id#15, i_class_id#16, i_category_id#17], [plan_id=1], [shuffle_writer_type=hash]

(18) InputAdapter
Input [4]: [i_item_sk#14, i_brand_id#15, i_class_id#16, i_category_id#17]

(19) InputIteratorTransformer
Input [4]: [i_item_sk#14, i_brand_id#15, i_class_id#16, i_category_id#17]

(20) FileSourceScanExecTransformer parquet spark_catalog.default.catalog_sales
Output [2]: [cs_item_sk#19, cs_sold_date_sk#20]
Batched: true
Location: InMemoryFileIndex []
PartitionFilters: [isnotnull(cs_sold_date_sk#20), dynamicpruningexpression(cs_sold_date_sk#20 IN dynamicpruning#12)]
PushedFilters: [IsNotNull(cs_item_sk)]
ReadSchema: struct<cs_item_sk:int>

(21) FilterExecTransformer
Input [2]: [cs_item_sk#19, cs_sold_date_sk#20]
Arguments: isnotnull(cs_item_sk#19)

(22) ReusedExchange [Reuses operator id: 199]
Output [1]: [d_date_sk#21]

(23) InputAdapter
Input [1]: [d_date_sk#21]

(24) InputIteratorTransformer
Input [1]: [d_date_sk#21]

(25) BroadcastHashJoinExecTransformer
Left keys [1]: [cs_sold_date_sk#20]
Right keys [1]: [d_date_sk#21]
Join type: Inner
Join condition: None

(26) ProjectExecTransformer
Output [1]: [cs_item_sk#19]
Input [3]: [cs_item_sk#19, cs_sold_date_sk#20, d_date_sk#21]

(27) FileSourceScanExecTransformer parquet spark_catalog.default.item
Output [4]: [i_item_sk#22, i_brand_id#23, i_class_id#24, i_category_id#25]
Batched: true
Location: InMemoryFileIndex [{warehouse_dir}/item]
PushedFilters: [IsNotNull(i_item_sk)]
ReadSchema: struct<i_item_sk:int,i_brand_id:int,i_class_id:int,i_category_id:int>

(28) FilterExecTransformer
Input [4]: [i_item_sk#22, i_brand_id#23, i_class_id#24, i_category_id#25]
Arguments: isnotnull(i_item_sk#22)

(29) WholeStageCodegenTransformer (20)
Input [4]: [i_item_sk#22, i_brand_id#23, i_class_id#24, i_category_id#25]
Arguments: false

(30) ColumnarBroadcastExchange
Input [4]: [i_item_sk#22, i_brand_id#23, i_class_id#24, i_category_id#25]
Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=2]

(31) InputAdapter
Input [4]: [i_item_sk#22, i_brand_id#23, i_class_id#24, i_category_id#25]

(32) InputIteratorTransformer
Input [4]: [i_item_sk#22, i_brand_id#23, i_class_id#24, i_category_id#25]

(33) BroadcastHashJoinExecTransformer
Left keys [1]: [cs_item_sk#19]
Right keys [1]: [i_item_sk#22]
Join type: Inner
Join condition: None

(34) ProjectExecTransformer
Output [4]: [hash(coalesce(i_brand_id#23, 0), isnull(i_brand_id#23), coalesce(i_class_id#24, 0), isnull(i_class_id#24), coalesce(i_category_id#25, 0), isnull(i_category_id#25), 42) AS hash_partition_key#26, i_brand_id#23, i_class_id#24, i_category_id#25]
Input [5]: [cs_item_sk#19, i_item_sk#22, i_brand_id#23, i_class_id#24, i_category_id#25]

(35) WholeStageCodegenTransformer (21)
Input [4]: [hash_partition_key#26, i_brand_id#23, i_class_id#24, i_category_id#25]
Arguments: false

(36) VeloxResizeBatches
Input [4]: [hash_partition_key#26, i_brand_id#23, i_class_id#24, i_category_id#25]
Arguments: 1024, 2147483647, 10485760

(37) ColumnarExchange
Input [4]: [hash_partition_key#26, i_brand_id#23, i_class_id#24, i_category_id#25]
Arguments: hashpartitioning(coalesce(i_brand_id#23, 0), isnull(i_brand_id#23), coalesce(i_class_id#24, 0), isnull(i_class_id#24), coalesce(i_category_id#25, 0), isnull(i_category_id#25), 1), ENSURE_REQUIREMENTS, [i_brand_id#23, i_class_id#24, i_category_id#25], [plan_id=3], [shuffle_writer_type=hash]

(38) InputAdapter
Input [3]: [i_brand_id#23, i_class_id#24, i_category_id#25]

(39) InputIteratorTransformer
Input [3]: [i_brand_id#23, i_class_id#24, i_category_id#25]

(40) ShuffledHashJoinExecTransformer
Left keys [6]: [coalesce(i_brand_id#15, 0), isnull(i_brand_id#15), coalesce(i_class_id#16, 0), isnull(i_class_id#16), coalesce(i_category_id#17, 0), isnull(i_category_id#17)]
Right keys [6]: [coalesce(i_brand_id#23, 0), isnull(i_brand_id#23), coalesce(i_class_id#24, 0), isnull(i_class_id#24), coalesce(i_category_id#25, 0), isnull(i_category_id#25)]
Join type: LeftSemi
Join condition: None

(41) WholeStageCodegenTransformer (22)
Input [4]: [i_item_sk#14, i_brand_id#15, i_class_id#16, i_category_id#17]
Arguments: false

(42) ColumnarBroadcastExchange
Input [4]: [i_item_sk#14, i_brand_id#15, i_class_id#16, i_category_id#17]
Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=4]

(43) InputAdapter
Input [4]: [i_item_sk#14, i_brand_id#15, i_class_id#16, i_category_id#17]

(44) InputIteratorTransformer
Input [4]: [i_item_sk#14, i_brand_id#15, i_class_id#16, i_category_id#17]

(45) BroadcastHashJoinExecTransformer
Left keys [1]: [ss_item_sk#10]
Right keys [1]: [i_item_sk#14]
Join type: Inner
Join condition: None

(46) ProjectExecTransformer
Output [3]: [i_brand_id#15 AS brand_id#27, i_class_id#16 AS class_id#28, i_category_id#17 AS category_id#29]
Input [5]: [ss_item_sk#10, i_item_sk#14, i_brand_id#15, i_class_id#16, i_category_id#17]

(47) FlushableHashAggregateExecTransformer
Input [3]: [brand_id#27, class_id#28, category_id#29]
Keys [3]: [brand_id#27, class_id#28, category_id#29]
Functions: []
Aggregate Attributes: []
Results [3]: [brand_id#27, class_id#28, category_id#29]

(48) ProjectExecTransformer
Output [4]: [hash(brand_id#27, class_id#28, category_id#29, 42) AS hash_partition_key#30, brand_id#27, class_id#28, category_id#29]
Input [3]: [brand_id#27, class_id#28, category_id#29]

(49) WholeStageCodegenTransformer (23)
Input [4]: [hash_partition_key#30, brand_id#27, class_id#28, category_id#29]
Arguments: false

(50) VeloxResizeBatches
Input [4]: [hash_partition_key#30, brand_id#27, class_id#28, category_id#29]
Arguments: 1024, 2147483647, 10485760

(51) ColumnarExchange
Input [4]: [hash_partition_key#30, brand_id#27, class_id#28, category_id#29]
Arguments: hashpartitioning(brand_id#27, class_id#28, category_id#29, 1), ENSURE_REQUIREMENTS, [brand_id#27, class_id#28, category_id#29], [plan_id=5], [shuffle_writer_type=hash]

(52) InputAdapter
Input [3]: [brand_id#27, class_id#28, category_id#29]

(53) InputIteratorTransformer
Input [3]: [brand_id#27, class_id#28, category_id#29]

(54) FlushableHashAggregateExecTransformer
Input [3]: [brand_id#27, class_id#28, category_id#29]
Keys [3]: [brand_id#27, class_id#28, category_id#29]
Functions: []
Aggregate Attributes: []
Results [3]: [brand_id#27, class_id#28, category_id#29]

(55) ProjectExecTransformer
Output [4]: [hash(coalesce(brand_id#27, 0), isnull(brand_id#27), coalesce(class_id#28, 0), isnull(class_id#28), coalesce(category_id#29, 0), isnull(category_id#29), 42) AS hash_partition_key#31, brand_id#27, class_id#28, category_id#29]
Input [3]: [brand_id#27, class_id#28, category_id#29]

(56) WholeStageCodegenTransformer (24)
Input [4]: [hash_partition_key#31, brand_id#27, class_id#28, category_id#29]
Arguments: false

(57) VeloxResizeBatches
Input [4]: [hash_partition_key#31, brand_id#27, class_id#28, category_id#29]
Arguments: 1024, 2147483647, 10485760

(58) ColumnarExchange
Input [4]: [hash_partition_key#31, brand_id#27, class_id#28, category_id#29]
Arguments: hashpartitioning(coalesce(brand_id#27, 0), isnull(brand_id#27), coalesce(class_id#28, 0), isnull(class_id#28), coalesce(category_id#29, 0), isnull(category_id#29), 1), ENSURE_REQUIREMENTS, [brand_id#27, class_id#28, category_id#29], [plan_id=6], [shuffle_writer_type=hash]

(59) InputAdapter
Input [3]: [brand_id#27, class_id#28, category_id#29]

(60) InputIteratorTransformer
Input [3]: [brand_id#27, class_id#28, category_id#29]

(61) FileSourceScanExecTransformer parquet spark_catalog.default.web_sales
Output [2]: [ws_item_sk#32, ws_sold_date_sk#33]
Batched: true
Location: InMemoryFileIndex []
PartitionFilters: [isnotnull(ws_sold_date_sk#33), dynamicpruningexpression(ws_sold_date_sk#33 IN dynamicpruning#12)]
PushedFilters: [IsNotNull(ws_item_sk)]
ReadSchema: struct<ws_item_sk:int>

(62) FilterExecTransformer
Input [2]: [ws_item_sk#32, ws_sold_date_sk#33]
Arguments: isnotnull(ws_item_sk#32)

(63) ReusedExchange [Reuses operator id: 199]
Output [1]: [d_date_sk#34]

(64) InputAdapter
Input [1]: [d_date_sk#34]

(65) InputIteratorTransformer
Input [1]: [d_date_sk#34]

(66) BroadcastHashJoinExecTransformer
Left keys [1]: [ws_sold_date_sk#33]
Right keys [1]: [d_date_sk#34]
Join type: Inner
Join condition: None

(67) ProjectExecTransformer
Output [1]: [ws_item_sk#32]
Input [3]: [ws_item_sk#32, ws_sold_date_sk#33, d_date_sk#34]

(68) ReusedExchange [Reuses operator id: 30]
Output [4]: [i_item_sk#35, i_brand_id#36, i_class_id#37, i_category_id#38]

(69) InputAdapter
Input [4]: [i_item_sk#35, i_brand_id#36, i_class_id#37, i_category_id#38]

(70) InputIteratorTransformer
Input [4]: [i_item_sk#35, i_brand_id#36, i_class_id#37, i_category_id#38]

(71) BroadcastHashJoinExecTransformer
Left keys [1]: [ws_item_sk#32]
Right keys [1]: [i_item_sk#35]
Join type: Inner
Join condition: None

(72) ProjectExecTransformer
Output [4]: [hash(coalesce(i_brand_id#36, 0), isnull(i_brand_id#36), coalesce(i_class_id#37, 0), isnull(i_class_id#37), coalesce(i_category_id#38, 0), isnull(i_category_id#38), 42) AS hash_partition_key#39, i_brand_id#36, i_class_id#37, i_category_id#38]
Input [5]: [ws_item_sk#32, i_item_sk#35, i_brand_id#36, i_class_id#37, i_category_id#38]

(73) WholeStageCodegenTransformer (28)
Input [4]: [hash_partition_key#39, i_brand_id#36, i_class_id#37, i_category_id#38]
Arguments: false

(74) VeloxResizeBatches
Input [4]: [hash_partition_key#39, i_brand_id#36, i_class_id#37, i_category_id#38]
Arguments: 1024, 2147483647, 10485760

(75) ColumnarExchange
Input [4]: [hash_partition_key#39, i_brand_id#36, i_class_id#37, i_category_id#38]
Arguments: hashpartitioning(coalesce(i_brand_id#36, 0), isnull(i_brand_id#36), coalesce(i_class_id#37, 0), isnull(i_class_id#37), coalesce(i_category_id#38, 0), isnull(i_category_id#38), 1), ENSURE_REQUIREMENTS, [i_brand_id#36, i_class_id#37, i_category_id#38], [plan_id=7], [shuffle_writer_type=hash]

(76) InputAdapter
Input [3]: [i_brand_id#36, i_class_id#37, i_category_id#38]

(77) InputIteratorTransformer
Input [3]: [i_brand_id#36, i_class_id#37, i_category_id#38]

(78) ShuffledHashJoinExecTransformer
Left keys [6]: [coalesce(brand_id#27, 0), isnull(brand_id#27), coalesce(class_id#28, 0), isnull(class_id#28), coalesce(category_id#29, 0), isnull(category_id#29)]
Right keys [6]: [coalesce(i_brand_id#36, 0), isnull(i_brand_id#36), coalesce(i_class_id#37, 0), isnull(i_class_id#37), coalesce(i_category_id#38, 0), isnull(i_category_id#38)]
Join type: LeftSemi
Join condition: None

(79) WholeStageCodegenTransformer (29)
Input [3]: [brand_id#27, class_id#28, category_id#29]
Arguments: false

(80) ColumnarBroadcastExchange
Input [3]: [brand_id#27, class_id#28, category_id#29]
Arguments: HashedRelationBroadcastMode(List(input[0, int, true], input[1, int, true], input[2, int, true]),false), [plan_id=8]

(81) InputAdapter
Input [3]: [brand_id#27, class_id#28, category_id#29]

(82) InputIteratorTransformer
Input [3]: [brand_id#27, class_id#28, category_id#29]

(83) BroadcastHashJoinExecTransformer
Left keys [3]: [i_brand_id#7, i_class_id#8, i_category_id#9]
Right keys [3]: [brand_id#27, class_id#28, category_id#29]
Join type: Inner
Join condition: None

(84) ProjectExecTransformer
Output [1]: [i_item_sk#6 AS ss_item_sk#40]
Input [7]: [i_item_sk#6, i_brand_id#7, i_class_id#8, i_category_id#9, brand_id#27, class_id#28, category_id#29]

(85) WholeStageCodegenTransformer (30)
Input [1]: [ss_item_sk#40]
Arguments: false

(86) ColumnarBroadcastExchange
Input [1]: [ss_item_sk#40]
Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=9]

(87) InputAdapter
Input [1]: [ss_item_sk#40]

(88) InputIteratorTransformer
Input [1]: [ss_item_sk#40]

(89) BroadcastHashJoinExecTransformer
Left keys [1]: [ss_item_sk#1]
Right keys [1]: [ss_item_sk#40]
Join type: LeftSemi
Join condition: None

(90) ReusedExchange [Reuses operator id: 189]
Output [1]: [d_date_sk#41]

(91) InputAdapter
Input [1]: [d_date_sk#41]

(92) InputIteratorTransformer
Input [1]: [d_date_sk#41]

(93) BroadcastHashJoinExecTransformer
Left keys [1]: [ss_sold_date_sk#4]
Right keys [1]: [d_date_sk#41]
Join type: Inner
Join condition: None

(94) ProjectExecTransformer
Output [3]: [ss_item_sk#1, ss_quantity#2, ss_list_price#3]
Input [5]: [ss_item_sk#1, ss_quantity#2, ss_list_price#3, ss_sold_date_sk#4, d_date_sk#41]

(95) FileSourceScanExecTransformer parquet spark_catalog.default.item
Output [4]: [i_item_sk#42, i_brand_id#43, i_class_id#44, i_category_id#45]
Batched: true
Location: InMemoryFileIndex [{warehouse_dir}/item]
PushedFilters: [IsNotNull(i_item_sk), IsNotNull(i_brand_id), IsNotNull(i_class_id), IsNotNull(i_category_id)]
ReadSchema: struct<i_item_sk:int,i_brand_id:int,i_class_id:int,i_category_id:int>

(96) FilterExecTransformer
Input [4]: [i_item_sk#42, i_brand_id#43, i_class_id#44, i_category_id#45]
Arguments: (((isnotnull(i_item_sk#42) AND isnotnull(i_brand_id#43)) AND isnotnull(i_class_id#44)) AND isnotnull(i_category_id#45))

(97) ReusedExchange [Reuses operator id: 86]
Output [1]: [ss_item_sk#40]

(98) InputAdapter
Input [1]: [ss_item_sk#40]

(99) InputIteratorTransformer
Input [1]: [ss_item_sk#40]

(100) BroadcastHashJoinExecTransformer
Left keys [1]: [i_item_sk#42]
Right keys [1]: [ss_item_sk#40]
Join type: LeftSemi
Join condition: None

(101) WholeStageCodegenTransformer (50)
Input [4]: [i_item_sk#42, i_brand_id#43, i_class_id#44, i_category_id#45]
Arguments: false

(102) ColumnarBroadcastExchange
Input [4]: [i_item_sk#42, i_brand_id#43, i_class_id#44, i_category_id#45]
Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=10]

(103) InputAdapter
Input [4]: [i_item_sk#42, i_brand_id#43, i_class_id#44, i_category_id#45]

(104) InputIteratorTransformer
Input [4]: [i_item_sk#42, i_brand_id#43, i_class_id#44, i_category_id#45]

(105) BroadcastHashJoinExecTransformer
Left keys [1]: [ss_item_sk#1]
Right keys [1]: [i_item_sk#42]
Join type: Inner
Join condition: None

(106) ProjectExecTransformer
Output [4]: [i_brand_id#43, i_class_id#44, i_category_id#45, (cast(ss_quantity#2 as decimal(10,0)) * ss_list_price#3) AS _pre_1#46]
Input [7]: [ss_item_sk#1, ss_quantity#2, ss_list_price#3, i_item_sk#42, i_brand_id#43, i_class_id#44, i_category_id#45]

(107) FlushableHashAggregateExecTransformer
Input [4]: [i_brand_id#43, i_class_id#44, i_category_id#45, _pre_1#46]
Keys [3]: [i_brand_id#43, i_class_id#44, i_category_id#45]
Functions [2]: [partial_sum(_pre_1#46), partial_count(1)]
Aggregate Attributes [3]: [sum#47, isEmpty#48, count#49]
Results [6]: [i_brand_id#43, i_class_id#44, i_category_id#45, sum#50, isEmpty#51, count#52]

(108) ProjectExecTransformer
Output [7]: [hash(i_brand_id#43, i_class_id#44, i_category_id#45, 42) AS hash_partition_key#53, i_brand_id#43, i_class_id#44, i_category_id#45, sum#50, isEmpty#51, count#52]
Input [6]: [i_brand_id#43, i_class_id#44, i_category_id#45, sum#50, isEmpty#51, count#52]

(109) WholeStageCodegenTransformer (51)
Input [7]: [hash_partition_key#53, i_brand_id#43, i_class_id#44, i_category_id#45, sum#50, isEmpty#51, count#52]
Arguments: false

(110) VeloxResizeBatches
Input [7]: [hash_partition_key#53, i_brand_id#43, i_class_id#44, i_category_id#45, sum#50, isEmpty#51, count#52]
Arguments: 1024, 2147483647, 10485760

(111) ColumnarExchange
Input [7]: [hash_partition_key#53, i_brand_id#43, i_class_id#44, i_category_id#45, sum#50, isEmpty#51, count#52]
Arguments: hashpartitioning(i_brand_id#43, i_class_id#44, i_category_id#45, 1), ENSURE_REQUIREMENTS, [i_brand_id#43, i_class_id#44, i_category_id#45, sum#50, isEmpty#51, count#52], [plan_id=11], [shuffle_writer_type=hash]

(112) InputAdapter
Input [6]: [i_brand_id#43, i_class_id#44, i_category_id#45, sum#50, isEmpty#51, count#52]

(113) InputIteratorTransformer
Input [6]: [i_brand_id#43, i_class_id#44, i_category_id#45, sum#50, isEmpty#51, count#52]

(114) RegularHashAggregateExecTransformer
Input [6]: [i_brand_id#43, i_class_id#44, i_category_id#45, sum#50, isEmpty#51, count#52]
Keys [3]: [i_brand_id#43, i_class_id#44, i_category_id#45]
Functions [2]: [sum((cast(ss_quantity#2 as decimal(10,0)) * ss_list_price#3)), count(1)]
Aggregate Attributes [2]: [sum((cast(ss_quantity#2 as decimal(10,0)) * ss_list_price#3))#54, count(1)#55]
Results [5]: [i_brand_id#43, i_class_id#44, i_category_id#45, sum((cast(ss_quantity#2 as decimal(10,0)) * ss_list_price#3))#54, count(1)#55]

(115) ProjectExecTransformer
Output [6]: [store AS channel#56, i_brand_id#43, i_class_id#44, i_category_id#45, sum((cast(ss_quantity#2 as decimal(10,0)) * ss_list_price#3))#54 AS sales#57, count(1)#55 AS number_sales#58]
Input [5]: [i_brand_id#43, i_class_id#44, i_category_id#45, sum((cast(ss_quantity#2 as decimal(10,0)) * ss_list_price#3))#54, count(1)#55]

(116) FilterExecTransformer
Input [6]: [channel#56, i_brand_id#43, i_class_id#44, i_category_id#45, sales#57, number_sales#58]
Arguments: (isnotnull(sales#57) AND (cast(sales#57 as decimal(32,6)) > cast(Subquery scalar-subquery#59, [id=#12] as decimal(32,6))))

(117) FileSourceScanExecTransformer parquet spark_catalog.default.store_sales
Output [4]: [ss_item_sk#60, ss_quantity#61, ss_list_price#62, ss_sold_date_sk#63]
Batched: true
Location: InMemoryFileIndex []
PartitionFilters: [isnotnull(ss_sold_date_sk#63), dynamicpruningexpression(ss_sold_date_sk#63 IN dynamicpruning#64)]
PushedFilters: [IsNotNull(ss_item_sk)]
ReadSchema: struct<ss_item_sk:int,ss_quantity:int,ss_list_price:decimal(7,2)>

(118) FilterExecTransformer
Input [4]: [ss_item_sk#60, ss_quantity#61, ss_list_price#62, ss_sold_date_sk#63]
Arguments: isnotnull(ss_item_sk#60)

(119) ReusedExchange [Reuses operator id: 86]
Output [1]: [ss_item_sk#65]

(120) InputAdapter
Input [1]: [ss_item_sk#65]

(121) InputIteratorTransformer
Input [1]: [ss_item_sk#65]

(122) BroadcastHashJoinExecTransformer
Left keys [1]: [ss_item_sk#60]
Right keys [1]: [ss_item_sk#65]
Join type: LeftSemi
Join condition: None

(123) ReusedExchange [Reuses operator id: 204]
Output [1]: [d_date_sk#66]

(124) InputAdapter
Input [1]: [d_date_sk#66]

(125) InputIteratorTransformer
Input [1]: [d_date_sk#66]

(126) BroadcastHashJoinExecTransformer
Left keys [1]: [ss_sold_date_sk#63]
Right keys [1]: [d_date_sk#66]
Join type: Inner
Join condition: None

(127) ProjectExecTransformer
Output [3]: [ss_item_sk#60, ss_quantity#61, ss_list_price#62]
Input [5]: [ss_item_sk#60, ss_quantity#61, ss_list_price#62, ss_sold_date_sk#63, d_date_sk#66]

(128) ReusedExchange [Reuses operator id: 102]
Output [4]: [i_item_sk#67, i_brand_id#68, i_class_id#69, i_category_id#70]

(129) InputAdapter
Input [4]: [i_item_sk#67, i_brand_id#68, i_class_id#69, i_category_id#70]

(130) InputIteratorTransformer
Input [4]: [i_item_sk#67, i_brand_id#68, i_class_id#69, i_category_id#70]

(131) BroadcastHashJoinExecTransformer
Left keys [1]: [ss_item_sk#60]
Right keys [1]: [i_item_sk#67]
Join type: Inner
Join condition: None

(132) ProjectExecTransformer
Output [4]: [i_brand_id#68, i_class_id#69, i_category_id#70, (cast(ss_quantity#61 as decimal(10,0)) * ss_list_price#62) AS _pre_2#71]
Input [7]: [ss_item_sk#60, ss_quantity#61, ss_list_price#62, i_item_sk#67, i_brand_id#68, i_class_id#69, i_category_id#70]

(133) FlushableHashAggregateExecTransformer
Input [4]: [i_brand_id#68, i_class_id#69, i_category_id#70, _pre_2#71]
Keys [3]: [i_brand_id#68, i_class_id#69, i_category_id#70]
Functions [2]: [partial_sum(_pre_2#71), partial_count(1)]
Aggregate Attributes [3]: [sum#72, isEmpty#73, count#74]
Results [6]: [i_brand_id#68, i_class_id#69, i_category_id#70, sum#75, isEmpty#76, count#77]

(134) ProjectExecTransformer
Output [7]: [hash(i_brand_id#68, i_class_id#69, i_category_id#70, 42) AS hash_partition_key#78, i_brand_id#68, i_class_id#69, i_category_id#70, sum#75, isEmpty#76, count#77]
Input [6]: [i_brand_id#68, i_class_id#69, i_category_id#70, sum#75, isEmpty#76, count#77]

(135) WholeStageCodegenTransformer (102)
Input [7]: [hash_partition_key#78, i_brand_id#68, i_class_id#69, i_category_id#70, sum#75, isEmpty#76, count#77]
Arguments: false

(136) VeloxResizeBatches
Input [7]: [hash_partition_key#78, i_brand_id#68, i_class_id#69, i_category_id#70, sum#75, isEmpty#76, count#77]
Arguments: 1024, 2147483647, 10485760

(137) ColumnarExchange
Input [7]: [hash_partition_key#78, i_brand_id#68, i_class_id#69, i_category_id#70, sum#75, isEmpty#76, count#77]
Arguments: hashpartitioning(i_brand_id#68, i_class_id#69, i_category_id#70, 1), ENSURE_REQUIREMENTS, [i_brand_id#68, i_class_id#69, i_category_id#70, sum#75, isEmpty#76, count#77], [plan_id=13], [shuffle_writer_type=hash]

(138) InputAdapter
Input [6]: [i_brand_id#68, i_class_id#69, i_category_id#70, sum#75, isEmpty#76, count#77]

(139) InputIteratorTransformer
Input [6]: [i_brand_id#68, i_class_id#69, i_category_id#70, sum#75, isEmpty#76, count#77]

(140) RegularHashAggregateExecTransformer
Input [6]: [i_brand_id#68, i_class_id#69, i_category_id#70, sum#75, isEmpty#76, count#77]
Keys [3]: [i_brand_id#68, i_class_id#69, i_category_id#70]
Functions [2]: [sum((cast(ss_quantity#61 as decimal(10,0)) * ss_list_price#62)), count(1)]
Aggregate Attributes [2]: [sum((cast(ss_quantity#61 as decimal(10,0)) * ss_list_price#62))#79, count(1)#80]
Results [5]: [i_brand_id#68, i_class_id#69, i_category_id#70, sum((cast(ss_quantity#61 as decimal(10,0)) * ss_list_price#62))#79, count(1)#80]

(141) ProjectExecTransformer
Output [6]: [store AS channel#81, i_brand_id#68, i_class_id#69, i_category_id#70, sum((cast(ss_quantity#61 as decimal(10,0)) * ss_list_price#62))#79 AS sales#82, count(1)#80 AS number_sales#83]
Input [5]: [i_brand_id#68, i_class_id#69, i_category_id#70, sum((cast(ss_quantity#61 as decimal(10,0)) * ss_list_price#62))#79, count(1)#80]

(142) FilterExecTransformer
Input [6]: [channel#81, i_brand_id#68, i_class_id#69, i_category_id#70, sales#82, number_sales#83]
Arguments: (isnotnull(sales#82) AND (cast(sales#82 as decimal(32,6)) > cast(ReusedSubquery Subquery scalar-subquery#59, [id=#12] as decimal(32,6))))

(143) WholeStageCodegenTransformer (103)
Input [6]: [channel#81, i_brand_id#68, i_class_id#69, i_category_id#70, sales#82, number_sales#83]
Arguments: false

(144) ColumnarBroadcastExchange
Input [6]: [channel#81, i_brand_id#68, i_class_id#69, i_category_id#70, sales#82, number_sales#83]
Arguments: HashedRelationBroadcastMode(List(input[1, int, true], input[2, int, true], input[3, int, true]),false), [plan_id=14]

(145) InputAdapter
Input [6]: [channel#81, i_brand_id#68, i_class_id#69, i_category_id#70, sales#82, number_sales#83]

(146) InputIteratorTransformer
Input [6]: [channel#81, i_brand_id#68, i_class_id#69, i_category_id#70, sales#82, number_sales#83]

(147) BroadcastHashJoinExecTransformer
Left keys [3]: [i_brand_id#43, i_class_id#44, i_category_id#45]
Right keys [3]: [i_brand_id#68, i_class_id#69, i_category_id#70]
Join type: Inner
Join condition: None

(148) WholeStageCodegenTransformer (104)
Input [12]: [channel#56, i_brand_id#43, i_class_id#44, i_category_id#45, sales#57, number_sales#58, channel#81, i_brand_id#68, i_class_id#69, i_category_id#70, sales#82, number_sales#83]
Arguments: false

(149) TakeOrderedAndProjectExecTransformer
Input [12]: [channel#56, i_brand_id#43, i_class_id#44, i_category_id#45, sales#57, number_sales#58, channel#81, i_brand_id#68, i_class_id#69, i_category_id#70, sales#82, number_sales#83]
Arguments: 100, [i_brand_id#43 ASC NULLS FIRST, i_class_id#44 ASC NULLS FIRST, i_category_id#45 ASC NULLS FIRST], [channel#56, i_brand_id#43, i_class_id#44, i_category_id#45, sales#57, number_sales#58, channel#81, i_brand_id#68, i_class_id#69, i_category_id#70, sales#82, number_sales#83], 0

(150) VeloxColumnarToRow
Input [12]: [channel#56, i_brand_id#43, i_class_id#44, i_category_id#45, sales#57, number_sales#58, channel#81, i_brand_id#68, i_class_id#69, i_category_id#70, sales#82, number_sales#83]

===== Subqueries =====

Subquery:1 Hosting operator id = 116 Hosting Expression = Subquery scalar-subquery#59, [id=#12]
VeloxColumnarToRow (184)
+- ^ RegularHashAggregateExecTransformer (182)
   +- ^ InputIteratorTransformer (181)
      +- ColumnarExchange (179)
         +- VeloxResizeBatches (178)
            +- ^ FlushableHashAggregateExecTransformer (176)
               +- ^ ProjectExecTransformer (175)
                  +- ^ InputIteratorTransformer (174)
                     +- ColumnarUnion (172)
                        :- ^ ProjectExecTransformer (156)
                        :  +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (155)
                        :     :- ^ FileSourceScanExecTransformer parquet spark_catalog.default.store_sales (151)
                        :     +- ^ InputIteratorTransformer (154)
                        :        +- ReusedExchange (152)
                        :- ^ ProjectExecTransformer (163)
                        :  +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (162)
                        :     :- ^ FileSourceScanExecTransformer parquet spark_catalog.default.catalog_sales (158)
                        :     +- ^ InputIteratorTransformer (161)
                        :        +- ReusedExchange (159)
                        +- ^ ProjectExecTransformer (170)
                           +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (169)
                              :- ^ FileSourceScanExecTransformer parquet spark_catalog.default.web_sales (165)
                              +- ^ InputIteratorTransformer (168)
                                 +- ReusedExchange (166)


(151) FileSourceScanExecTransformer parquet spark_catalog.default.store_sales
Output [3]: [ss_quantity#84, ss_list_price#85, ss_sold_date_sk#86]
Batched: true
Location: InMemoryFileIndex []
PartitionFilters: [isnotnull(ss_sold_date_sk#86), dynamicpruningexpression(ss_sold_date_sk#86 IN dynamicpruning#12)]
ReadSchema: struct<ss_quantity:int,ss_list_price:decimal(7,2)>

(152) ReusedExchange [Reuses operator id: 199]
Output [1]: [d_date_sk#87]

(153) InputAdapter
Input [1]: [d_date_sk#87]

(154) InputIteratorTransformer
Input [1]: [d_date_sk#87]

(155) BroadcastHashJoinExecTransformer
Left keys [1]: [ss_sold_date_sk#86]
Right keys [1]: [d_date_sk#87]
Join type: Inner
Join condition: None

(156) ProjectExecTransformer
Output [2]: [ss_quantity#84 AS quantity#88, ss_list_price#85 AS list_price#89]
Input [4]: [ss_quantity#84, ss_list_price#85, ss_sold_date_sk#86, d_date_sk#87]

(157) WholeStageCodegenTransformer (3)
Input [2]: [quantity#88, list_price#89]
Arguments: false

(158) FileSourceScanExecTransformer parquet spark_catalog.default.catalog_sales
Output [3]: [cs_quantity#90, cs_list_price#91, cs_sold_date_sk#92]
Batched: true
Location: InMemoryFileIndex []
PartitionFilters: [isnotnull(cs_sold_date_sk#92), dynamicpruningexpression(cs_sold_date_sk#92 IN dynamicpruning#12)]
ReadSchema: struct<cs_quantity:int,cs_list_price:decimal(7,2)>

(159) ReusedExchange [Reuses operator id: 199]
Output [1]: [d_date_sk#93]

(160) InputAdapter
Input [1]: [d_date_sk#93]

(161) InputIteratorTransformer
Input [1]: [d_date_sk#93]

(162) BroadcastHashJoinExecTransformer
Left keys [1]: [cs_sold_date_sk#92]
Right keys [1]: [d_date_sk#93]
Join type: Inner
Join condition: None

(163) ProjectExecTransformer
Output [2]: [cs_quantity#90 AS quantity#94, cs_list_price#91 AS list_price#95]
Input [4]: [cs_quantity#90, cs_list_price#91, cs_sold_date_sk#92, d_date_sk#93]

(164) WholeStageCodegenTransformer (6)
Input [2]: [quantity#94, list_price#95]
Arguments: false

(165) FileSourceScanExecTransformer parquet spark_catalog.default.web_sales
Output [3]: [ws_quantity#96, ws_list_price#97, ws_sold_date_sk#98]
Batched: true
Location: InMemoryFileIndex []
PartitionFilters: [isnotnull(ws_sold_date_sk#98), dynamicpruningexpression(ws_sold_date_sk#98 IN dynamicpruning#12)]
ReadSchema: struct<ws_quantity:int,ws_list_price:decimal(7,2)>

(166) ReusedExchange [Reuses operator id: 199]
Output [1]: [d_date_sk#99]

(167) InputAdapter
Input [1]: [d_date_sk#99]

(168) InputIteratorTransformer
Input [1]: [d_date_sk#99]

(169) BroadcastHashJoinExecTransformer
Left keys [1]: [ws_sold_date_sk#98]
Right keys [1]: [d_date_sk#99]
Join type: Inner
Join condition: None

(170) ProjectExecTransformer
Output [2]: [ws_quantity#96 AS quantity#100, ws_list_price#97 AS list_price#101]
Input [4]: [ws_quantity#96, ws_list_price#97, ws_sold_date_sk#98, d_date_sk#99]

(171) WholeStageCodegenTransformer (9)
Input [2]: [quantity#100, list_price#101]
Arguments: false

(172) ColumnarUnion
Arguments: UnknownPartitioning(0)

(173) InputAdapter
Input [2]: [quantity#88, list_price#89]

(174) InputIteratorTransformer
Input [2]: [quantity#88, list_price#89]

(175) ProjectExecTransformer
Output [1]: [(cast(quantity#88 as decimal(10,0)) * list_price#89) AS _pre_3#102]
Input [2]: [quantity#88, list_price#89]

(176) FlushableHashAggregateExecTransformer
Input [1]: [_pre_3#102]
Keys: []
Functions [1]: [partial_avg(_pre_3#102)]
Aggregate Attributes [2]: [sum#103, count#104]
Results [2]: [sum#105, count#106]

(177) WholeStageCodegenTransformer (10)
Input [2]: [sum#105, count#106]
Arguments: false

(178) VeloxResizeBatches
Input [2]: [sum#105, count#106]
Arguments: 1024, 2147483647, 10485760

(179) ColumnarExchange
Input [2]: [sum#105, count#106]
Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=15], [shuffle_writer_type=hash]

(180) InputAdapter
Input [2]: [sum#105, count#106]

(181) InputIteratorTransformer
Input [2]: [sum#105, count#106]

(182) RegularHashAggregateExecTransformer
Input [2]: [sum#105, count#106]
Keys: []
Functions [1]: [avg((cast(quantity#88 as decimal(10,0)) * list_price#89))]
Aggregate Attributes [1]: [avg((cast(quantity#88 as decimal(10,0)) * list_price#89))#107]
Results [1]: [avg((cast(quantity#88 as decimal(10,0)) * list_price#89))#107 AS average_sales#108]

(183) WholeStageCodegenTransformer (11)
Input [1]: [average_sales#108]
Arguments: false

(184) VeloxColumnarToRow
Input [1]: [average_sales#108]

Subquery:2 Hosting operator id = 151 Hosting Expression = ss_sold_date_sk#86 IN dynamicpruning#12

Subquery:3 Hosting operator id = 158 Hosting Expression = cs_sold_date_sk#92 IN dynamicpruning#12

Subquery:4 Hosting operator id = 165 Hosting Expression = ws_sold_date_sk#98 IN dynamicpruning#12

Subquery:5 Hosting operator id = 1 Hosting Expression = ss_sold_date_sk#4 IN dynamicpruning#5
ColumnarBroadcastExchange (189)
+- ^ ProjectExecTransformer (187)
   +- ^ FilterExecTransformer (186)
      +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (185)


(185) FileSourceScanExecTransformer parquet spark_catalog.default.date_dim
Output [2]: [d_date_sk#41, d_week_seq#109]
Batched: true
Location: InMemoryFileIndex [{warehouse_dir}/date_dim]
PushedFilters: [IsNotNull(d_week_seq), EqualTo(d_week_seq,ScalarSubquery#110), IsNotNull(d_date_sk)]
ReadSchema: struct<d_date_sk:int,d_week_seq:int>

(186) FilterExecTransformer
Input [2]: [d_date_sk#41, d_week_seq#109]
Arguments: ((isnotnull(d_week_seq#109) AND (d_week_seq#109 = ReusedSubquery Subquery scalar-subquery#110, [id=#16])) AND isnotnull(d_date_sk#41))

(187) ProjectExecTransformer
Output [1]: [d_date_sk#41]
Input [2]: [d_date_sk#41, d_week_seq#109]

(188) WholeStageCodegenTransformer (14)
Input [1]: [d_date_sk#41]
Arguments: false

(189) ColumnarBroadcastExchange
Input [1]: [d_date_sk#41]
Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=17]

Subquery:6 Hosting operator id = 186 Hosting Expression = ReusedSubquery Subquery scalar-subquery#110, [id=#16]

Subquery:7 Hosting operator id = 185 Hosting Expression = Subquery scalar-subquery#110, [id=#16]
VeloxColumnarToRow (194)
+- ^ ProjectExecTransformer (192)
   +- ^ FilterExecTransformer (191)
      +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (190)


(190) FileSourceScanExecTransformer parquet spark_catalog.default.date_dim
Output [4]: [d_week_seq#111, d_year#112, d_moy#113, d_dom#114]
Batched: true
Location: InMemoryFileIndex [{warehouse_dir}/date_dim]
PushedFilters: [IsNotNull(d_year), IsNotNull(d_moy), IsNotNull(d_dom), EqualTo(d_year,1999), EqualTo(d_moy,12), EqualTo(d_dom,16)]
ReadSchema: struct<d_week_seq:int,d_year:int,d_moy:int,d_dom:int>

(191) FilterExecTransformer
Input [4]: [d_week_seq#111, d_year#112, d_moy#113, d_dom#114]
Arguments: (((((isnotnull(d_year#112) AND isnotnull(d_moy#113)) AND isnotnull(d_dom#114)) AND (d_year#112 = 1999)) AND (d_moy#113 = 12)) AND (d_dom#114 = 16))

(192) ProjectExecTransformer
Output [1]: [d_week_seq#111]
Input [4]: [d_week_seq#111, d_year#112, d_moy#113, d_dom#114]

(193) WholeStageCodegenTransformer (13)
Input [1]: [d_week_seq#111]
Arguments: false

(194) VeloxColumnarToRow
Input [1]: [d_week_seq#111]

Subquery:8 Hosting operator id = 185 Hosting Expression = ReusedSubquery Subquery scalar-subquery#110, [id=#16]

Subquery:9 Hosting operator id = 5 Hosting Expression = ss_sold_date_sk#11 IN dynamicpruning#12
ColumnarBroadcastExchange (199)
+- ^ ProjectExecTransformer (197)
   +- ^ FilterExecTransformer (196)
      +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (195)


(195) FileSourceScanExecTransformer parquet spark_catalog.default.date_dim
Output [2]: [d_date_sk#13, d_year#115]
Batched: true
Location: InMemoryFileIndex [{warehouse_dir}/date_dim]
PushedFilters: [IsNotNull(d_year), GreaterThanOrEqual(d_year,1998), LessThanOrEqual(d_year,2000), IsNotNull(d_date_sk)]
ReadSchema: struct<d_date_sk:int,d_year:int>

(196) FilterExecTransformer
Input [2]: [d_date_sk#13, d_year#115]
Arguments: (((isnotnull(d_year#115) AND (d_year#115 >= 1998)) AND (d_year#115 <= 2000)) AND isnotnull(d_date_sk#13))

(197) ProjectExecTransformer
Output [1]: [d_date_sk#13]
Input [2]: [d_date_sk#13, d_year#115]

(198) WholeStageCodegenTransformer (15)
Input [1]: [d_date_sk#13]
Arguments: false

(199) ColumnarBroadcastExchange
Input [1]: [d_date_sk#13]
Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=18]

Subquery:10 Hosting operator id = 20 Hosting Expression = cs_sold_date_sk#20 IN dynamicpruning#12

Subquery:11 Hosting operator id = 61 Hosting Expression = ws_sold_date_sk#33 IN dynamicpruning#12

Subquery:12 Hosting operator id = 142 Hosting Expression = ReusedSubquery Subquery scalar-subquery#59, [id=#12]

Subquery:13 Hosting operator id = 117 Hosting Expression = ss_sold_date_sk#63 IN dynamicpruning#64
ColumnarBroadcastExchange (204)
+- ^ ProjectExecTransformer (202)
   +- ^ FilterExecTransformer (201)
      +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (200)


(200) FileSourceScanExecTransformer parquet spark_catalog.default.date_dim
Output [2]: [d_date_sk#66, d_week_seq#116]
Batched: true
Location: InMemoryFileIndex [{warehouse_dir}/date_dim]
PushedFilters: [IsNotNull(d_week_seq), EqualTo(d_week_seq,ScalarSubquery#117), IsNotNull(d_date_sk)]
ReadSchema: struct<d_date_sk:int,d_week_seq:int>

(201) FilterExecTransformer
Input [2]: [d_date_sk#66, d_week_seq#116]
Arguments: ((isnotnull(d_week_seq#116) AND (d_week_seq#116 = ReusedSubquery Subquery scalar-subquery#117, [id=#19])) AND isnotnull(d_date_sk#66))

(202) ProjectExecTransformer
Output [1]: [d_date_sk#66]
Input [2]: [d_date_sk#66, d_week_seq#116]

(203) WholeStageCodegenTransformer (65)
Input [1]: [d_date_sk#66]
Arguments: false

(204) ColumnarBroadcastExchange
Input [1]: [d_date_sk#66]
Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=20]

Subquery:14 Hosting operator id = 201 Hosting Expression = ReusedSubquery Subquery scalar-subquery#117, [id=#19]

Subquery:15 Hosting operator id = 200 Hosting Expression = Subquery scalar-subquery#117, [id=#19]
VeloxColumnarToRow (209)
+- ^ ProjectExecTransformer (207)
   +- ^ FilterExecTransformer (206)
      +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (205)


(205) FileSourceScanExecTransformer parquet spark_catalog.default.date_dim
Output [4]: [d_week_seq#118, d_year#119, d_moy#120, d_dom#121]
Batched: true
Location: InMemoryFileIndex [{warehouse_dir}/date_dim]
PushedFilters: [IsNotNull(d_year), IsNotNull(d_moy), IsNotNull(d_dom), EqualTo(d_year,1998), EqualTo(d_moy,12), EqualTo(d_dom,16)]
ReadSchema: struct<d_week_seq:int,d_year:int,d_moy:int,d_dom:int>

(206) FilterExecTransformer
Input [4]: [d_week_seq#118, d_year#119, d_moy#120, d_dom#121]
Arguments: (((((isnotnull(d_year#119) AND isnotnull(d_moy#120)) AND isnotnull(d_dom#121)) AND (d_year#119 = 1998)) AND (d_moy#120 = 12)) AND (d_dom#121 = 16))

(207) ProjectExecTransformer
Output [1]: [d_week_seq#118]
Input [4]: [d_week_seq#118, d_year#119, d_moy#120, d_dom#121]

(208) WholeStageCodegenTransformer (64)
Input [1]: [d_week_seq#118]
Arguments: false

(209) VeloxColumnarToRow
Input [1]: [d_week_seq#118]

Subquery:16 Hosting operator id = 200 Hosting Expression = ReusedSubquery Subquery scalar-subquery#117, [id=#19]


