== Physical Plan ==
VeloxColumnarToRow (187)
+- TakeOrderedAndProjectExecTransformer (186)
   +- ^ ProjectExecTransformer (184)
      +- ^ RegularHashAggregateExecTransformer (183)
         +- ^ InputIteratorTransformer (182)
            +- ColumnarExchange (180)
               +- VeloxResizeBatches (179)
                  +- ^ ProjectExecTransformer (177)
                     +- ^ FlushableHashAggregateExecTransformer (176)
                        +- ^ ExpandExecTransformer (175)
                           +- ^ InputIteratorTransformer (174)
                              +- ColumnarUnion (172)
                                 :- ^ ProjectExecTransformer (116)
                                 :  +- ^ FilterExecTransformer (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)
                                 :- ^ ProjectExecTransformer (143)
                                 :  +- ^ FilterExecTransformer (142)
                                 :     +- ^ RegularHashAggregateExecTransformer (141)
                                 :        +- ^ InputIteratorTransformer (140)
                                 :           +- ColumnarExchange (138)
                                 :              +- VeloxResizeBatches (137)
                                 :                 +- ^ ProjectExecTransformer (135)
                                 :                    +- ^ FlushableHashAggregateExecTransformer (134)
                                 :                       +- ^ ProjectExecTransformer (133)
                                 :                          +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (132)
                                 :                             :- ^ ProjectExecTransformer (128)
                                 :                             :  +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (127)
                                 :                             :     :- ^ BroadcastHashJoinExecTransformer LeftSemi BuildRight (123)
                                 :                             :     :  :- ^ FilterExecTransformer (119)
                                 :                             :     :  :  +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.catalog_sales (118)
                                 :                             :     :  +- ^ InputIteratorTransformer (122)
                                 :                             :     :     +- ReusedExchange (120)
                                 :                             :     +- ^ InputIteratorTransformer (126)
                                 :                             :        +- ReusedExchange (124)
                                 :                             +- ^ InputIteratorTransformer (131)
                                 :                                +- ReusedExchange (129)
                                 +- ^ ProjectExecTransformer (170)
                                    +- ^ FilterExecTransformer (169)
                                       +- ^ RegularHashAggregateExecTransformer (168)
                                          +- ^ InputIteratorTransformer (167)
                                             +- ColumnarExchange (165)
                                                +- VeloxResizeBatches (164)
                                                   +- ^ ProjectExecTransformer (162)
                                                      +- ^ FlushableHashAggregateExecTransformer (161)
                                                         +- ^ ProjectExecTransformer (160)
                                                            +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (159)
                                                               :- ^ ProjectExecTransformer (155)
                                                               :  +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (154)
                                                               :     :- ^ BroadcastHashJoinExecTransformer LeftSemi BuildRight (150)
                                                               :     :  :- ^ FilterExecTransformer (146)
                                                               :     :  :  +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.web_sales (145)
                                                               :     :  +- ^ InputIteratorTransformer (149)
                                                               :     :     +- ReusedExchange (147)
                                                               :     +- ^ InputIteratorTransformer (153)
                                                               :        +- ReusedExchange (151)
                                                               +- ^ InputIteratorTransformer (158)
                                                                  +- ReusedExchange (156)


(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: 231]
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 (15)
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: 231]
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 (18)
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 (19)
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 (20)
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 (21)
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 (22)
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: 231]
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 (26)
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 (27)
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 (28)
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: 226]
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)]
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)

(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 (46)
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 (47)
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 AS sales#56, count(1)#55 AS number_sales#57]

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

(116) ProjectExecTransformer
Output [6]: [sales#56, number_sales#57, store AS channel#59, i_brand_id#43 AS i_brand_id#60, i_class_id#44 AS i_class_id#61, i_category_id#45 AS i_category_id#62]
Input [5]: [i_brand_id#43, i_class_id#44, i_category_id#45, sales#56, number_sales#57]

(117) WholeStageCodegenTransformer (48)
Input [6]: [sales#56, number_sales#57, channel#59, i_brand_id#60, i_class_id#61, i_category_id#62]
Arguments: false

(118) FileSourceScanExecTransformer parquet spark_catalog.default.catalog_sales
Output [4]: [cs_item_sk#63, cs_quantity#64, cs_list_price#65, cs_sold_date_sk#66]
Batched: true
Location: InMemoryFileIndex []
PartitionFilters: [isnotnull(cs_sold_date_sk#66), dynamicpruningexpression(cs_sold_date_sk#66 IN dynamicpruning#5)]
PushedFilters: [IsNotNull(cs_item_sk)]
ReadSchema: struct<cs_item_sk:int,cs_quantity:int,cs_list_price:decimal(7,2)>

(119) FilterExecTransformer
Input [4]: [cs_item_sk#63, cs_quantity#64, cs_list_price#65, cs_sold_date_sk#66]
Arguments: isnotnull(cs_item_sk#63)

(120) ReusedExchange [Reuses operator id: 86]
Output [1]: [ss_item_sk#67]

(121) InputAdapter
Input [1]: [ss_item_sk#67]

(122) InputIteratorTransformer
Input [1]: [ss_item_sk#67]

(123) BroadcastHashJoinExecTransformer
Left keys [1]: [cs_item_sk#63]
Right keys [1]: [ss_item_sk#67]
Join type: LeftSemi
Join condition: None

(124) ReusedExchange [Reuses operator id: 226]
Output [1]: [d_date_sk#68]

(125) InputAdapter
Input [1]: [d_date_sk#68]

(126) InputIteratorTransformer
Input [1]: [d_date_sk#68]

(127) BroadcastHashJoinExecTransformer
Left keys [1]: [cs_sold_date_sk#66]
Right keys [1]: [d_date_sk#68]
Join type: Inner
Join condition: None

(128) ProjectExecTransformer
Output [3]: [cs_item_sk#63, cs_quantity#64, cs_list_price#65]
Input [5]: [cs_item_sk#63, cs_quantity#64, cs_list_price#65, cs_sold_date_sk#66, d_date_sk#68]

(129) ReusedExchange [Reuses operator id: 102]
Output [4]: [i_item_sk#69, i_brand_id#70, i_class_id#71, i_category_id#72]

(130) InputAdapter
Input [4]: [i_item_sk#69, i_brand_id#70, i_class_id#71, i_category_id#72]

(131) InputIteratorTransformer
Input [4]: [i_item_sk#69, i_brand_id#70, i_class_id#71, i_category_id#72]

(132) BroadcastHashJoinExecTransformer
Left keys [1]: [cs_item_sk#63]
Right keys [1]: [i_item_sk#69]
Join type: Inner
Join condition: None

(133) ProjectExecTransformer
Output [4]: [i_brand_id#70, i_class_id#71, i_category_id#72, (cast(cs_quantity#64 as decimal(10,0)) * cs_list_price#65) AS _pre_2#73]
Input [7]: [cs_item_sk#63, cs_quantity#64, cs_list_price#65, i_item_sk#69, i_brand_id#70, i_class_id#71, i_category_id#72]

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

(135) ProjectExecTransformer
Output [7]: [hash(i_brand_id#70, i_class_id#71, i_category_id#72, 42) AS hash_partition_key#80, i_brand_id#70, i_class_id#71, i_category_id#72, sum#77, isEmpty#78, count#79]
Input [6]: [i_brand_id#70, i_class_id#71, i_category_id#72, sum#77, isEmpty#78, count#79]

(136) WholeStageCodegenTransformer (95)
Input [7]: [hash_partition_key#80, i_brand_id#70, i_class_id#71, i_category_id#72, sum#77, isEmpty#78, count#79]
Arguments: false

(137) VeloxResizeBatches
Input [7]: [hash_partition_key#80, i_brand_id#70, i_class_id#71, i_category_id#72, sum#77, isEmpty#78, count#79]
Arguments: 1024, 2147483647, 10485760

(138) ColumnarExchange
Input [7]: [hash_partition_key#80, i_brand_id#70, i_class_id#71, i_category_id#72, sum#77, isEmpty#78, count#79]
Arguments: hashpartitioning(i_brand_id#70, i_class_id#71, i_category_id#72, 1), ENSURE_REQUIREMENTS, [i_brand_id#70, i_class_id#71, i_category_id#72, sum#77, isEmpty#78, count#79], [plan_id=13], [shuffle_writer_type=hash]

(139) InputAdapter
Input [6]: [i_brand_id#70, i_class_id#71, i_category_id#72, sum#77, isEmpty#78, count#79]

(140) InputIteratorTransformer
Input [6]: [i_brand_id#70, i_class_id#71, i_category_id#72, sum#77, isEmpty#78, count#79]

(141) RegularHashAggregateExecTransformer
Input [6]: [i_brand_id#70, i_class_id#71, i_category_id#72, sum#77, isEmpty#78, count#79]
Keys [3]: [i_brand_id#70, i_class_id#71, i_category_id#72]
Functions [2]: [sum((cast(cs_quantity#64 as decimal(10,0)) * cs_list_price#65)), count(1)]
Aggregate Attributes [2]: [sum((cast(cs_quantity#64 as decimal(10,0)) * cs_list_price#65))#81, count(1)#82]
Results [5]: [i_brand_id#70, i_class_id#71, i_category_id#72, sum((cast(cs_quantity#64 as decimal(10,0)) * cs_list_price#65))#81 AS sales#83, count(1)#82 AS number_sales#84]

(142) FilterExecTransformer
Input [5]: [i_brand_id#70, i_class_id#71, i_category_id#72, sales#83, number_sales#84]
Arguments: (isnotnull(sales#83) AND (cast(sales#83 as decimal(32,6)) > cast(ReusedSubquery Subquery scalar-subquery#58, [id=#12] as decimal(32,6))))

(143) ProjectExecTransformer
Output [6]: [sales#83, number_sales#84, catalog AS channel#85, i_brand_id#70, i_class_id#71, i_category_id#72]
Input [5]: [i_brand_id#70, i_class_id#71, i_category_id#72, sales#83, number_sales#84]

(144) WholeStageCodegenTransformer (96)
Input [6]: [sales#83, number_sales#84, channel#85, i_brand_id#70, i_class_id#71, i_category_id#72]
Arguments: false

(145) FileSourceScanExecTransformer parquet spark_catalog.default.web_sales
Output [4]: [ws_item_sk#86, ws_quantity#87, ws_list_price#88, ws_sold_date_sk#89]
Batched: true
Location: InMemoryFileIndex []
PartitionFilters: [isnotnull(ws_sold_date_sk#89), dynamicpruningexpression(ws_sold_date_sk#89 IN dynamicpruning#5)]
PushedFilters: [IsNotNull(ws_item_sk)]
ReadSchema: struct<ws_item_sk:int,ws_quantity:int,ws_list_price:decimal(7,2)>

(146) FilterExecTransformer
Input [4]: [ws_item_sk#86, ws_quantity#87, ws_list_price#88, ws_sold_date_sk#89]
Arguments: isnotnull(ws_item_sk#86)

(147) ReusedExchange [Reuses operator id: 86]
Output [1]: [ss_item_sk#90]

(148) InputAdapter
Input [1]: [ss_item_sk#90]

(149) InputIteratorTransformer
Input [1]: [ss_item_sk#90]

(150) BroadcastHashJoinExecTransformer
Left keys [1]: [ws_item_sk#86]
Right keys [1]: [ss_item_sk#90]
Join type: LeftSemi
Join condition: None

(151) ReusedExchange [Reuses operator id: 226]
Output [1]: [d_date_sk#91]

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

(153) InputIteratorTransformer
Input [1]: [d_date_sk#91]

(154) BroadcastHashJoinExecTransformer
Left keys [1]: [ws_sold_date_sk#89]
Right keys [1]: [d_date_sk#91]
Join type: Inner
Join condition: None

(155) ProjectExecTransformer
Output [3]: [ws_item_sk#86, ws_quantity#87, ws_list_price#88]
Input [5]: [ws_item_sk#86, ws_quantity#87, ws_list_price#88, ws_sold_date_sk#89, d_date_sk#91]

(156) ReusedExchange [Reuses operator id: 102]
Output [4]: [i_item_sk#92, i_brand_id#93, i_class_id#94, i_category_id#95]

(157) InputAdapter
Input [4]: [i_item_sk#92, i_brand_id#93, i_class_id#94, i_category_id#95]

(158) InputIteratorTransformer
Input [4]: [i_item_sk#92, i_brand_id#93, i_class_id#94, i_category_id#95]

(159) BroadcastHashJoinExecTransformer
Left keys [1]: [ws_item_sk#86]
Right keys [1]: [i_item_sk#92]
Join type: Inner
Join condition: None

(160) ProjectExecTransformer
Output [4]: [i_brand_id#93, i_class_id#94, i_category_id#95, (cast(ws_quantity#87 as decimal(10,0)) * ws_list_price#88) AS _pre_3#96]
Input [7]: [ws_item_sk#86, ws_quantity#87, ws_list_price#88, i_item_sk#92, i_brand_id#93, i_class_id#94, i_category_id#95]

(161) FlushableHashAggregateExecTransformer
Input [4]: [i_brand_id#93, i_class_id#94, i_category_id#95, _pre_3#96]
Keys [3]: [i_brand_id#93, i_class_id#94, i_category_id#95]
Functions [2]: [partial_sum(_pre_3#96), partial_count(1)]
Aggregate Attributes [3]: [sum#97, isEmpty#98, count#99]
Results [6]: [i_brand_id#93, i_class_id#94, i_category_id#95, sum#100, isEmpty#101, count#102]

(162) ProjectExecTransformer
Output [7]: [hash(i_brand_id#93, i_class_id#94, i_category_id#95, 42) AS hash_partition_key#103, i_brand_id#93, i_class_id#94, i_category_id#95, sum#100, isEmpty#101, count#102]
Input [6]: [i_brand_id#93, i_class_id#94, i_category_id#95, sum#100, isEmpty#101, count#102]

(163) WholeStageCodegenTransformer (143)
Input [7]: [hash_partition_key#103, i_brand_id#93, i_class_id#94, i_category_id#95, sum#100, isEmpty#101, count#102]
Arguments: false

(164) VeloxResizeBatches
Input [7]: [hash_partition_key#103, i_brand_id#93, i_class_id#94, i_category_id#95, sum#100, isEmpty#101, count#102]
Arguments: 1024, 2147483647, 10485760

(165) ColumnarExchange
Input [7]: [hash_partition_key#103, i_brand_id#93, i_class_id#94, i_category_id#95, sum#100, isEmpty#101, count#102]
Arguments: hashpartitioning(i_brand_id#93, i_class_id#94, i_category_id#95, 1), ENSURE_REQUIREMENTS, [i_brand_id#93, i_class_id#94, i_category_id#95, sum#100, isEmpty#101, count#102], [plan_id=14], [shuffle_writer_type=hash]

(166) InputAdapter
Input [6]: [i_brand_id#93, i_class_id#94, i_category_id#95, sum#100, isEmpty#101, count#102]

(167) InputIteratorTransformer
Input [6]: [i_brand_id#93, i_class_id#94, i_category_id#95, sum#100, isEmpty#101, count#102]

(168) RegularHashAggregateExecTransformer
Input [6]: [i_brand_id#93, i_class_id#94, i_category_id#95, sum#100, isEmpty#101, count#102]
Keys [3]: [i_brand_id#93, i_class_id#94, i_category_id#95]
Functions [2]: [sum((cast(ws_quantity#87 as decimal(10,0)) * ws_list_price#88)), count(1)]
Aggregate Attributes [2]: [sum((cast(ws_quantity#87 as decimal(10,0)) * ws_list_price#88))#104, count(1)#105]
Results [5]: [i_brand_id#93, i_class_id#94, i_category_id#95, sum((cast(ws_quantity#87 as decimal(10,0)) * ws_list_price#88))#104 AS sales#106, count(1)#105 AS number_sales#107]

(169) FilterExecTransformer
Input [5]: [i_brand_id#93, i_class_id#94, i_category_id#95, sales#106, number_sales#107]
Arguments: (isnotnull(sales#106) AND (cast(sales#106 as decimal(32,6)) > cast(ReusedSubquery Subquery scalar-subquery#58, [id=#12] as decimal(32,6))))

(170) ProjectExecTransformer
Output [6]: [sales#106, number_sales#107, web AS channel#108, i_brand_id#93, i_class_id#94, i_category_id#95]
Input [5]: [i_brand_id#93, i_class_id#94, i_category_id#95, sales#106, number_sales#107]

(171) WholeStageCodegenTransformer (144)
Input [6]: [sales#106, number_sales#107, channel#108, i_brand_id#93, i_class_id#94, i_category_id#95]
Arguments: false

(172) ColumnarUnion
Arguments: UnknownPartitioning(0)

(173) InputAdapter
Input [6]: [sales#56, number_sales#57, channel#59, i_brand_id#60, i_class_id#61, i_category_id#62]

(174) InputIteratorTransformer
Input [6]: [sales#56, number_sales#57, channel#59, i_brand_id#60, i_class_id#61, i_category_id#62]

(175) ExpandExecTransformer
Input [6]: [sales#56, number_sales#57, channel#59, i_brand_id#60, i_class_id#61, i_category_id#62]
Arguments: [[sales#56, number_sales#57, channel#59, i_brand_id#60, i_class_id#61, i_category_id#62, 0], [sales#56, number_sales#57, channel#59, i_brand_id#60, i_class_id#61, null, 1], [sales#56, number_sales#57, channel#59, i_brand_id#60, null, null, 3], [sales#56, number_sales#57, channel#59, null, null, null, 7], [sales#56, number_sales#57, null, null, null, null, 15]], [sales#56, number_sales#57, channel#109, i_brand_id#110, i_class_id#111, i_category_id#112, spark_grouping_id#113]

(176) FlushableHashAggregateExecTransformer
Input [7]: [sales#56, number_sales#57, channel#109, i_brand_id#110, i_class_id#111, i_category_id#112, spark_grouping_id#113]
Keys [5]: [channel#109, i_brand_id#110, i_class_id#111, i_category_id#112, spark_grouping_id#113]
Functions [2]: [partial_sum(sales#56), partial_sum(number_sales#57)]
Aggregate Attributes [3]: [sum#114, isEmpty#115, sum#116]
Results [8]: [channel#109, i_brand_id#110, i_class_id#111, i_category_id#112, spark_grouping_id#113, sum#117, isEmpty#118, sum#119]

(177) ProjectExecTransformer
Output [9]: [hash(channel#109, i_brand_id#110, i_class_id#111, i_category_id#112, spark_grouping_id#113, 42) AS hash_partition_key#120, channel#109, i_brand_id#110, i_class_id#111, i_category_id#112, spark_grouping_id#113, sum#117, isEmpty#118, sum#119]
Input [8]: [channel#109, i_brand_id#110, i_class_id#111, i_category_id#112, spark_grouping_id#113, sum#117, isEmpty#118, sum#119]

(178) WholeStageCodegenTransformer (145)
Input [9]: [hash_partition_key#120, channel#109, i_brand_id#110, i_class_id#111, i_category_id#112, spark_grouping_id#113, sum#117, isEmpty#118, sum#119]
Arguments: false

(179) VeloxResizeBatches
Input [9]: [hash_partition_key#120, channel#109, i_brand_id#110, i_class_id#111, i_category_id#112, spark_grouping_id#113, sum#117, isEmpty#118, sum#119]
Arguments: 1024, 2147483647, 10485760

(180) ColumnarExchange
Input [9]: [hash_partition_key#120, channel#109, i_brand_id#110, i_class_id#111, i_category_id#112, spark_grouping_id#113, sum#117, isEmpty#118, sum#119]
Arguments: hashpartitioning(channel#109, i_brand_id#110, i_class_id#111, i_category_id#112, spark_grouping_id#113, 1), ENSURE_REQUIREMENTS, [channel#109, i_brand_id#110, i_class_id#111, i_category_id#112, spark_grouping_id#113, sum#117, isEmpty#118, sum#119], [plan_id=15], [shuffle_writer_type=hash]

(181) InputAdapter
Input [8]: [channel#109, i_brand_id#110, i_class_id#111, i_category_id#112, spark_grouping_id#113, sum#117, isEmpty#118, sum#119]

(182) InputIteratorTransformer
Input [8]: [channel#109, i_brand_id#110, i_class_id#111, i_category_id#112, spark_grouping_id#113, sum#117, isEmpty#118, sum#119]

(183) RegularHashAggregateExecTransformer
Input [8]: [channel#109, i_brand_id#110, i_class_id#111, i_category_id#112, spark_grouping_id#113, sum#117, isEmpty#118, sum#119]
Keys [5]: [channel#109, i_brand_id#110, i_class_id#111, i_category_id#112, spark_grouping_id#113]
Functions [2]: [sum(sales#56), sum(number_sales#57)]
Aggregate Attributes [2]: [sum(sales#56)#121, sum(number_sales#57)#122]
Results [7]: [channel#109, i_brand_id#110, i_class_id#111, i_category_id#112, spark_grouping_id#113, sum(sales#56)#121, sum(number_sales#57)#122]

(184) ProjectExecTransformer
Output [6]: [channel#109, i_brand_id#110, i_class_id#111, i_category_id#112, sum(sales#56)#121 AS sum(sales)#123, sum(number_sales#57)#122 AS sum(number_sales)#124]
Input [7]: [channel#109, i_brand_id#110, i_class_id#111, i_category_id#112, spark_grouping_id#113, sum(sales#56)#121, sum(number_sales#57)#122]

(185) WholeStageCodegenTransformer (146)
Input [6]: [channel#109, i_brand_id#110, i_class_id#111, i_category_id#112, sum(sales)#123, sum(number_sales)#124]
Arguments: false

(186) TakeOrderedAndProjectExecTransformer
Input [6]: [channel#109, i_brand_id#110, i_class_id#111, i_category_id#112, sum(sales)#123, sum(number_sales)#124]
Arguments: 100, [channel#109 ASC NULLS FIRST, i_brand_id#110 ASC NULLS FIRST, i_class_id#111 ASC NULLS FIRST, i_category_id#112 ASC NULLS FIRST], [channel#109, i_brand_id#110, i_class_id#111, i_category_id#112, sum(sales)#123, sum(number_sales)#124], 0

(187) VeloxColumnarToRow
Input [6]: [channel#109, i_brand_id#110, i_class_id#111, i_category_id#112, sum(sales)#123, sum(number_sales)#124]

===== Subqueries =====

Subquery:1 Hosting operator id = 115 Hosting Expression = Subquery scalar-subquery#58, [id=#12]
VeloxColumnarToRow (221)
+- ^ RegularHashAggregateExecTransformer (219)
   +- ^ InputIteratorTransformer (218)
      +- ColumnarExchange (216)
         +- VeloxResizeBatches (215)
            +- ^ FlushableHashAggregateExecTransformer (213)
               +- ^ ProjectExecTransformer (212)
                  +- ^ InputIteratorTransformer (211)
                     +- ColumnarUnion (209)
                        :- ^ ProjectExecTransformer (193)
                        :  +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (192)
                        :     :- ^ FileSourceScanExecTransformer parquet spark_catalog.default.store_sales (188)
                        :     +- ^ InputIteratorTransformer (191)
                        :        +- ReusedExchange (189)
                        :- ^ ProjectExecTransformer (200)
                        :  +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (199)
                        :     :- ^ FileSourceScanExecTransformer parquet spark_catalog.default.catalog_sales (195)
                        :     +- ^ InputIteratorTransformer (198)
                        :        +- ReusedExchange (196)
                        +- ^ ProjectExecTransformer (207)
                           +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (206)
                              :- ^ FileSourceScanExecTransformer parquet spark_catalog.default.web_sales (202)
                              +- ^ InputIteratorTransformer (205)
                                 +- ReusedExchange (203)


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

(189) ReusedExchange [Reuses operator id: 231]
Output [1]: [d_date_sk#128]

(190) InputAdapter
Input [1]: [d_date_sk#128]

(191) InputIteratorTransformer
Input [1]: [d_date_sk#128]

(192) BroadcastHashJoinExecTransformer
Left keys [1]: [ss_sold_date_sk#127]
Right keys [1]: [d_date_sk#128]
Join type: Inner
Join condition: None

(193) ProjectExecTransformer
Output [2]: [ss_quantity#125 AS quantity#129, ss_list_price#126 AS list_price#130]
Input [4]: [ss_quantity#125, ss_list_price#126, ss_sold_date_sk#127, d_date_sk#128]

(194) WholeStageCodegenTransformer (3)
Input [2]: [quantity#129, list_price#130]
Arguments: false

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

(196) ReusedExchange [Reuses operator id: 231]
Output [1]: [d_date_sk#134]

(197) InputAdapter
Input [1]: [d_date_sk#134]

(198) InputIteratorTransformer
Input [1]: [d_date_sk#134]

(199) BroadcastHashJoinExecTransformer
Left keys [1]: [cs_sold_date_sk#133]
Right keys [1]: [d_date_sk#134]
Join type: Inner
Join condition: None

(200) ProjectExecTransformer
Output [2]: [cs_quantity#131 AS quantity#135, cs_list_price#132 AS list_price#136]
Input [4]: [cs_quantity#131, cs_list_price#132, cs_sold_date_sk#133, d_date_sk#134]

(201) WholeStageCodegenTransformer (6)
Input [2]: [quantity#135, list_price#136]
Arguments: false

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

(203) ReusedExchange [Reuses operator id: 231]
Output [1]: [d_date_sk#140]

(204) InputAdapter
Input [1]: [d_date_sk#140]

(205) InputIteratorTransformer
Input [1]: [d_date_sk#140]

(206) BroadcastHashJoinExecTransformer
Left keys [1]: [ws_sold_date_sk#139]
Right keys [1]: [d_date_sk#140]
Join type: Inner
Join condition: None

(207) ProjectExecTransformer
Output [2]: [ws_quantity#137 AS quantity#141, ws_list_price#138 AS list_price#142]
Input [4]: [ws_quantity#137, ws_list_price#138, ws_sold_date_sk#139, d_date_sk#140]

(208) WholeStageCodegenTransformer (9)
Input [2]: [quantity#141, list_price#142]
Arguments: false

(209) ColumnarUnion
Arguments: UnknownPartitioning(0)

(210) InputAdapter
Input [2]: [quantity#129, list_price#130]

(211) InputIteratorTransformer
Input [2]: [quantity#129, list_price#130]

(212) ProjectExecTransformer
Output [1]: [(cast(quantity#129 as decimal(10,0)) * list_price#130) AS _pre_4#143]
Input [2]: [quantity#129, list_price#130]

(213) FlushableHashAggregateExecTransformer
Input [1]: [_pre_4#143]
Keys: []
Functions [1]: [partial_avg(_pre_4#143)]
Aggregate Attributes [2]: [sum#144, count#145]
Results [2]: [sum#146, count#147]

(214) WholeStageCodegenTransformer (10)
Input [2]: [sum#146, count#147]
Arguments: false

(215) VeloxResizeBatches
Input [2]: [sum#146, count#147]
Arguments: 1024, 2147483647, 10485760

(216) ColumnarExchange
Input [2]: [sum#146, count#147]
Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=16], [shuffle_writer_type=hash]

(217) InputAdapter
Input [2]: [sum#146, count#147]

(218) InputIteratorTransformer
Input [2]: [sum#146, count#147]

(219) RegularHashAggregateExecTransformer
Input [2]: [sum#146, count#147]
Keys: []
Functions [1]: [avg((cast(quantity#129 as decimal(10,0)) * list_price#130))]
Aggregate Attributes [1]: [avg((cast(quantity#129 as decimal(10,0)) * list_price#130))#148]
Results [1]: [avg((cast(quantity#129 as decimal(10,0)) * list_price#130))#148 AS average_sales#149]

(220) WholeStageCodegenTransformer (11)
Input [1]: [average_sales#149]
Arguments: false

(221) VeloxColumnarToRow
Input [1]: [average_sales#149]

Subquery:2 Hosting operator id = 188 Hosting Expression = ss_sold_date_sk#127 IN dynamicpruning#12

Subquery:3 Hosting operator id = 195 Hosting Expression = cs_sold_date_sk#133 IN dynamicpruning#12

Subquery:4 Hosting operator id = 202 Hosting Expression = ws_sold_date_sk#139 IN dynamicpruning#12

Subquery:5 Hosting operator id = 1 Hosting Expression = ss_sold_date_sk#4 IN dynamicpruning#5
ColumnarBroadcastExchange (226)
+- ^ ProjectExecTransformer (224)
   +- ^ FilterExecTransformer (223)
      +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (222)


(222) FileSourceScanExecTransformer parquet spark_catalog.default.date_dim
Output [3]: [d_date_sk#41, d_year#150, d_moy#151]
Batched: true
Location: InMemoryFileIndex [{warehouse_dir}/date_dim]
PushedFilters: [IsNotNull(d_year), IsNotNull(d_moy), EqualTo(d_year,2001), EqualTo(d_moy,11), IsNotNull(d_date_sk)]
ReadSchema: struct<d_date_sk:int,d_year:int,d_moy:int>

(223) FilterExecTransformer
Input [3]: [d_date_sk#41, d_year#150, d_moy#151]
Arguments: ((((isnotnull(d_year#150) AND isnotnull(d_moy#151)) AND (d_year#150 = 2001)) AND (d_moy#151 = 11)) AND isnotnull(d_date_sk#41))

(224) ProjectExecTransformer
Output [1]: [d_date_sk#41]
Input [3]: [d_date_sk#41, d_year#150, d_moy#151]

(225) WholeStageCodegenTransformer (12)
Input [1]: [d_date_sk#41]
Arguments: false

(226) 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 = 5 Hosting Expression = ss_sold_date_sk#11 IN dynamicpruning#12
ColumnarBroadcastExchange (231)
+- ^ ProjectExecTransformer (229)
   +- ^ FilterExecTransformer (228)
      +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (227)


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

(228) FilterExecTransformer
Input [2]: [d_date_sk#13, d_year#152]
Arguments: (((isnotnull(d_year#152) AND (d_year#152 >= 1999)) AND (d_year#152 <= 2001)) AND isnotnull(d_date_sk#13))

(229) ProjectExecTransformer
Output [1]: [d_date_sk#13]
Input [2]: [d_date_sk#13, d_year#152]

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

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

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

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

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

Subquery:10 Hosting operator id = 118 Hosting Expression = cs_sold_date_sk#66 IN dynamicpruning#5

Subquery:11 Hosting operator id = 169 Hosting Expression = ReusedSubquery Subquery scalar-subquery#58, [id=#12]

Subquery:12 Hosting operator id = 145 Hosting Expression = ws_sold_date_sk#89 IN dynamicpruning#5


