== Physical Plan ==
VeloxColumnarToRow (173)
+- TakeOrderedAndProjectExecTransformer (172)
   +- ^ ProjectExecTransformer (170)
      +- ^ RegularHashAggregateExecTransformer (169)
         +- ^ InputIteratorTransformer (168)
            +- ColumnarExchange (166)
               +- VeloxResizeBatches (165)
                  +- ^ ProjectExecTransformer (163)
                     +- ^ FlushableHashAggregateExecTransformer (162)
                        +- ^ ExpandExecTransformer (161)
                           +- ^ InputIteratorTransformer (160)
                              +- ColumnarUnion (158)
                                 :- ^ ProjectExecTransformer (102)
                                 :  +- ^ FilterExecTransformer (101)
                                 :     +- ^ RegularHashAggregateExecTransformer (100)
                                 :        +- ^ InputIteratorTransformer (99)
                                 :           +- ColumnarExchange (97)
                                 :              +- VeloxResizeBatches (96)
                                 :                 +- ^ ProjectExecTransformer (94)
                                 :                    +- ^ FlushableHashAggregateExecTransformer (93)
                                 :                       +- ^ ProjectExecTransformer (92)
                                 :                          +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (91)
                                 :                             :- ^ ProjectExecTransformer (87)
                                 :                             :  +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (86)
                                 :                             :     :- ^ BroadcastHashJoinExecTransformer LeftSemi BuildRight (75)
                                 :                             :     :  :- ^ FilterExecTransformer (2)
                                 :                             :     :  :  +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.store_sales (1)
                                 :                             :     :  +- ^ InputIteratorTransformer (74)
                                 :                             :     :     +- ColumnarBroadcastExchange (72)
                                 :                             :     :        +- ^ ProjectExecTransformer (70)
                                 :                             :     :           +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (69)
                                 :                             :     :              :- ^ FilterExecTransformer (4)
                                 :                             :     :              :  +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.item (3)
                                 :                             :     :              +- ^ InputIteratorTransformer (68)
                                 :                             :     :                 +- ColumnarBroadcastExchange (66)
                                 :                             :     :                    +- ^ BroadcastHashJoinExecTransformer LeftSemi BuildRight (64)
                                 :                             :     :                       :- ^ RegularHashAggregateExecTransformer (47)
                                 :                             :     :                       :  +- ^ InputIteratorTransformer (46)
                                 :                             :     :                       :     +- ColumnarExchange (44)
                                 :                             :     :                       :        +- VeloxResizeBatches (43)
                                 :                             :     :                       :           +- ^ ProjectExecTransformer (41)
                                 :                             :     :                       :              +- ^ FlushableHashAggregateExecTransformer (40)
                                 :                             :     :                       :                 +- ^ ProjectExecTransformer (39)
                                 :                             :     :                       :                    +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (38)
                                 :                             :     :                       :                       :- ^ ProjectExecTransformer (34)
                                 :                             :     :                       :                       :  +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (33)
                                 :                             :     :                       :                       :     :- ^ FilterExecTransformer (6)
                                 :                             :     :                       :                       :     :  +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.store_sales (5)
                                 :                             :     :                       :                       :     +- ^ InputIteratorTransformer (32)
                                 :                             :     :                       :                       :        +- ColumnarBroadcastExchange (30)
                                 :                             :     :                       :                       :           +- ^ BroadcastHashJoinExecTransformer LeftSemi BuildRight (28)
                                 :                             :     :                       :                       :              :- ^ FilterExecTransformer (8)
                                 :                             :     :                       :                       :              :  +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.item (7)
                                 :                             :     :                       :                       :              +- ^ InputIteratorTransformer (27)
                                 :                             :     :                       :                       :                 +- ColumnarBroadcastExchange (25)
                                 :                             :     :                       :                       :                    +- ^ ProjectExecTransformer (23)
                                 :                             :     :                       :                       :                       +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (22)
                                 :                             :     :                       :                       :                          :- ^ ProjectExecTransformer (18)
                                 :                             :     :                       :                       :                          :  +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (17)
                                 :                             :     :                       :                       :                          :     :- ^ FilterExecTransformer (10)
                                 :                             :     :                       :                       :                          :     :  +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.catalog_sales (9)
                                 :                             :     :                       :                       :                          :     +- ^ InputIteratorTransformer (16)
                                 :                             :     :                       :                       :                          :        +- ColumnarBroadcastExchange (14)
                                 :                             :     :                       :                       :                          :           +- ^ FilterExecTransformer (12)
                                 :                             :     :                       :                       :                          :              +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.item (11)
                                 :                             :     :                       :                       :                          +- ^ InputIteratorTransformer (21)
                                 :                             :     :                       :                       :                             +- ReusedExchange (19)
                                 :                             :     :                       :                       +- ^ InputIteratorTransformer (37)
                                 :                             :     :                       :                          +- ReusedExchange (35)
                                 :                             :     :                       +- ^ InputIteratorTransformer (63)
                                 :                             :     :                          +- ColumnarBroadcastExchange (61)
                                 :                             :     :                             +- ^ ProjectExecTransformer (59)
                                 :                             :     :                                +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (58)
                                 :                             :     :                                   :- ^ ProjectExecTransformer (54)
                                 :                             :     :                                   :  +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (53)
                                 :                             :     :                                   :     :- ^ FilterExecTransformer (49)
                                 :                             :     :                                   :     :  +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.web_sales (48)
                                 :                             :     :                                   :     +- ^ InputIteratorTransformer (52)
                                 :                             :     :                                   :        +- ReusedExchange (50)
                                 :                             :     :                                   +- ^ InputIteratorTransformer (57)
                                 :                             :     :                                      +- ReusedExchange (55)
                                 :                             :     +- ^ InputIteratorTransformer (85)
                                 :                             :        +- ColumnarBroadcastExchange (83)
                                 :                             :           +- ^ BroadcastHashJoinExecTransformer LeftSemi BuildRight (81)
                                 :                             :              :- ^ FilterExecTransformer (77)
                                 :                             :              :  +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.item (76)
                                 :                             :              +- ^ InputIteratorTransformer (80)
                                 :                             :                 +- ReusedExchange (78)
                                 :                             +- ^ InputIteratorTransformer (90)
                                 :                                +- ReusedExchange (88)
                                 :- ^ ProjectExecTransformer (129)
                                 :  +- ^ FilterExecTransformer (128)
                                 :     +- ^ RegularHashAggregateExecTransformer (127)
                                 :        +- ^ InputIteratorTransformer (126)
                                 :           +- ColumnarExchange (124)
                                 :              +- VeloxResizeBatches (123)
                                 :                 +- ^ ProjectExecTransformer (121)
                                 :                    +- ^ FlushableHashAggregateExecTransformer (120)
                                 :                       +- ^ ProjectExecTransformer (119)
                                 :                          +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (118)
                                 :                             :- ^ ProjectExecTransformer (114)
                                 :                             :  +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (113)
                                 :                             :     :- ^ BroadcastHashJoinExecTransformer LeftSemi BuildRight (109)
                                 :                             :     :  :- ^ FilterExecTransformer (105)
                                 :                             :     :  :  +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.catalog_sales (104)
                                 :                             :     :  +- ^ InputIteratorTransformer (108)
                                 :                             :     :     +- ReusedExchange (106)
                                 :                             :     +- ^ InputIteratorTransformer (112)
                                 :                             :        +- ReusedExchange (110)
                                 :                             +- ^ InputIteratorTransformer (117)
                                 :                                +- ReusedExchange (115)
                                 +- ^ ProjectExecTransformer (156)
                                    +- ^ FilterExecTransformer (155)
                                       +- ^ RegularHashAggregateExecTransformer (154)
                                          +- ^ InputIteratorTransformer (153)
                                             +- ColumnarExchange (151)
                                                +- VeloxResizeBatches (150)
                                                   +- ^ ProjectExecTransformer (148)
                                                      +- ^ FlushableHashAggregateExecTransformer (147)
                                                         +- ^ ProjectExecTransformer (146)
                                                            +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (145)
                                                               :- ^ ProjectExecTransformer (141)
                                                               :  +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (140)
                                                               :     :- ^ BroadcastHashJoinExecTransformer LeftSemi BuildRight (136)
                                                               :     :  :- ^ FilterExecTransformer (132)
                                                               :     :  :  +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.web_sales (131)
                                                               :     :  +- ^ InputIteratorTransformer (135)
                                                               :     :     +- ReusedExchange (133)
                                                               :     +- ^ InputIteratorTransformer (139)
                                                               :        +- ReusedExchange (137)
                                                               +- ^ InputIteratorTransformer (144)
                                                                  +- ReusedExchange (142)


(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) FileSourceScanExecTransformer parquet spark_catalog.default.item
Output [4]: [i_item_sk#13, i_brand_id#14, i_class_id#15, i_category_id#16]
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>

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

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

(10) FilterExecTransformer
Input [2]: [cs_item_sk#17, cs_sold_date_sk#18]
Arguments: isnotnull(cs_item_sk#17)

(11) FileSourceScanExecTransformer parquet spark_catalog.default.item
Output [4]: [i_item_sk#19, i_brand_id#20, i_class_id#21, i_category_id#22]
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>

(12) FilterExecTransformer
Input [4]: [i_item_sk#19, i_brand_id#20, i_class_id#21, i_category_id#22]
Arguments: isnotnull(i_item_sk#19)

(13) WholeStageCodegenTransformer (15)
Input [4]: [i_item_sk#19, i_brand_id#20, i_class_id#21, i_category_id#22]
Arguments: false

(14) ColumnarBroadcastExchange
Input [4]: [i_item_sk#19, i_brand_id#20, i_class_id#21, i_category_id#22]
Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=1]

(15) InputAdapter
Input [4]: [i_item_sk#19, i_brand_id#20, i_class_id#21, i_category_id#22]

(16) InputIteratorTransformer
Input [4]: [i_item_sk#19, i_brand_id#20, i_class_id#21, i_category_id#22]

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

(18) ProjectExecTransformer
Output [4]: [cs_sold_date_sk#18, i_brand_id#20, i_class_id#21, i_category_id#22]
Input [6]: [cs_item_sk#17, cs_sold_date_sk#18, i_item_sk#19, i_brand_id#20, i_class_id#21, i_category_id#22]

(19) ReusedExchange [Reuses operator id: 217]
Output [1]: [d_date_sk#23]

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

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

(22) BroadcastHashJoinExecTransformer
Left keys [1]: [cs_sold_date_sk#18]
Right keys [1]: [d_date_sk#23]
Join type: Inner
Join condition: None

(23) ProjectExecTransformer
Output [3]: [i_brand_id#20, i_class_id#21, i_category_id#22]
Input [5]: [cs_sold_date_sk#18, i_brand_id#20, i_class_id#21, i_category_id#22, d_date_sk#23]

(24) WholeStageCodegenTransformer (17)
Input [3]: [i_brand_id#20, i_class_id#21, i_category_id#22]
Arguments: false

(25) ColumnarBroadcastExchange
Input [3]: [i_brand_id#20, i_class_id#21, i_category_id#22]
Arguments: HashedRelationBroadcastMode(List(coalesce(input[0, int, true], 0), isnull(input[0, int, true]), coalesce(input[1, int, true], 0), isnull(input[1, int, true]), coalesce(input[2, int, true], 0), isnull(input[2, int, true])),false), [plan_id=2]

(26) InputAdapter
Input [3]: [i_brand_id#20, i_class_id#21, i_category_id#22]

(27) InputIteratorTransformer
Input [3]: [i_brand_id#20, i_class_id#21, i_category_id#22]

(28) BroadcastHashJoinExecTransformer
Left keys [6]: [coalesce(i_brand_id#14, 0), isnull(i_brand_id#14), coalesce(i_class_id#15, 0), isnull(i_class_id#15), coalesce(i_category_id#16, 0), isnull(i_category_id#16)]
Right keys [6]: [coalesce(i_brand_id#20, 0), isnull(i_brand_id#20), coalesce(i_class_id#21, 0), isnull(i_class_id#21), coalesce(i_category_id#22, 0), isnull(i_category_id#22)]
Join type: LeftSemi
Join condition: None

(29) WholeStageCodegenTransformer (18)
Input [4]: [i_item_sk#13, i_brand_id#14, i_class_id#15, i_category_id#16]
Arguments: false

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

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

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

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

(34) ProjectExecTransformer
Output [4]: [ss_sold_date_sk#11, i_brand_id#14, i_class_id#15, i_category_id#16]
Input [6]: [ss_item_sk#10, ss_sold_date_sk#11, i_item_sk#13, i_brand_id#14, i_class_id#15, i_category_id#16]

(35) ReusedExchange [Reuses operator id: 217]
Output [1]: [d_date_sk#24]

(36) InputAdapter
Input [1]: [d_date_sk#24]

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

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

(39) ProjectExecTransformer
Output [3]: [i_brand_id#14 AS brand_id#25, i_class_id#15 AS class_id#26, i_category_id#16 AS category_id#27]
Input [5]: [ss_sold_date_sk#11, i_brand_id#14, i_class_id#15, i_category_id#16, d_date_sk#24]

(40) FlushableHashAggregateExecTransformer
Input [3]: [brand_id#25, class_id#26, category_id#27]
Keys [3]: [brand_id#25, class_id#26, category_id#27]
Functions: []
Aggregate Attributes: []
Results [3]: [brand_id#25, class_id#26, category_id#27]

(41) ProjectExecTransformer
Output [4]: [hash(brand_id#25, class_id#26, category_id#27, 42) AS hash_partition_key#28, brand_id#25, class_id#26, category_id#27]
Input [3]: [brand_id#25, class_id#26, category_id#27]

(42) WholeStageCodegenTransformer (20)
Input [4]: [hash_partition_key#28, brand_id#25, class_id#26, category_id#27]
Arguments: false

(43) VeloxResizeBatches
Input [4]: [hash_partition_key#28, brand_id#25, class_id#26, category_id#27]
Arguments: 1024, 2147483647, 10485760

(44) ColumnarExchange
Input [4]: [hash_partition_key#28, brand_id#25, class_id#26, category_id#27]
Arguments: hashpartitioning(brand_id#25, class_id#26, category_id#27, 1), ENSURE_REQUIREMENTS, [brand_id#25, class_id#26, category_id#27], [plan_id=4], [shuffle_writer_type=hash]

(45) InputAdapter
Input [3]: [brand_id#25, class_id#26, category_id#27]

(46) InputIteratorTransformer
Input [3]: [brand_id#25, class_id#26, category_id#27]

(47) RegularHashAggregateExecTransformer
Input [3]: [brand_id#25, class_id#26, category_id#27]
Keys [3]: [brand_id#25, class_id#26, category_id#27]
Functions: []
Aggregate Attributes: []
Results [3]: [brand_id#25, class_id#26, category_id#27]

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

(49) FilterExecTransformer
Input [2]: [ws_item_sk#29, ws_sold_date_sk#30]
Arguments: isnotnull(ws_item_sk#29)

(50) ReusedExchange [Reuses operator id: 14]
Output [4]: [i_item_sk#31, i_brand_id#32, i_class_id#33, i_category_id#34]

(51) InputAdapter
Input [4]: [i_item_sk#31, i_brand_id#32, i_class_id#33, i_category_id#34]

(52) InputIteratorTransformer
Input [4]: [i_item_sk#31, i_brand_id#32, i_class_id#33, i_category_id#34]

(53) BroadcastHashJoinExecTransformer
Left keys [1]: [ws_item_sk#29]
Right keys [1]: [i_item_sk#31]
Join type: Inner
Join condition: None

(54) ProjectExecTransformer
Output [4]: [ws_sold_date_sk#30, i_brand_id#32, i_class_id#33, i_category_id#34]
Input [6]: [ws_item_sk#29, ws_sold_date_sk#30, i_item_sk#31, i_brand_id#32, i_class_id#33, i_category_id#34]

(55) ReusedExchange [Reuses operator id: 217]
Output [1]: [d_date_sk#35]

(56) InputAdapter
Input [1]: [d_date_sk#35]

(57) InputIteratorTransformer
Input [1]: [d_date_sk#35]

(58) BroadcastHashJoinExecTransformer
Left keys [1]: [ws_sold_date_sk#30]
Right keys [1]: [d_date_sk#35]
Join type: Inner
Join condition: None

(59) ProjectExecTransformer
Output [3]: [i_brand_id#32, i_class_id#33, i_category_id#34]
Input [5]: [ws_sold_date_sk#30, i_brand_id#32, i_class_id#33, i_category_id#34, d_date_sk#35]

(60) WholeStageCodegenTransformer (24)
Input [3]: [i_brand_id#32, i_class_id#33, i_category_id#34]
Arguments: false

(61) ColumnarBroadcastExchange
Input [3]: [i_brand_id#32, i_class_id#33, i_category_id#34]
Arguments: HashedRelationBroadcastMode(List(coalesce(input[0, int, true], 0), isnull(input[0, int, true]), coalesce(input[1, int, true], 0), isnull(input[1, int, true]), coalesce(input[2, int, true], 0), isnull(input[2, int, true])),false), [plan_id=5]

(62) InputAdapter
Input [3]: [i_brand_id#32, i_class_id#33, i_category_id#34]

(63) InputIteratorTransformer
Input [3]: [i_brand_id#32, i_class_id#33, i_category_id#34]

(64) BroadcastHashJoinExecTransformer
Left keys [6]: [coalesce(brand_id#25, 0), isnull(brand_id#25), coalesce(class_id#26, 0), isnull(class_id#26), coalesce(category_id#27, 0), isnull(category_id#27)]
Right keys [6]: [coalesce(i_brand_id#32, 0), isnull(i_brand_id#32), coalesce(i_class_id#33, 0), isnull(i_class_id#33), coalesce(i_category_id#34, 0), isnull(i_category_id#34)]
Join type: LeftSemi
Join condition: None

(65) WholeStageCodegenTransformer (25)
Input [3]: [brand_id#25, class_id#26, category_id#27]
Arguments: false

(66) ColumnarBroadcastExchange
Input [3]: [brand_id#25, class_id#26, category_id#27]
Arguments: HashedRelationBroadcastMode(List(input[0, int, true], input[1, int, true], input[2, int, true]),false), [plan_id=6]

(67) InputAdapter
Input [3]: [brand_id#25, class_id#26, category_id#27]

(68) InputIteratorTransformer
Input [3]: [brand_id#25, class_id#26, category_id#27]

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

(70) ProjectExecTransformer
Output [1]: [i_item_sk#6 AS ss_item_sk#36]
Input [7]: [i_item_sk#6, i_brand_id#7, i_class_id#8, i_category_id#9, brand_id#25, class_id#26, category_id#27]

(71) WholeStageCodegenTransformer (26)
Input [1]: [ss_item_sk#36]
Arguments: false

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

(73) InputAdapter
Input [1]: [ss_item_sk#36]

(74) InputIteratorTransformer
Input [1]: [ss_item_sk#36]

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

(76) FileSourceScanExecTransformer parquet spark_catalog.default.item
Output [4]: [i_item_sk#37, i_brand_id#38, i_class_id#39, i_category_id#40]
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>

(77) FilterExecTransformer
Input [4]: [i_item_sk#37, i_brand_id#38, i_class_id#39, i_category_id#40]
Arguments: isnotnull(i_item_sk#37)

(78) ReusedExchange [Reuses operator id: 72]
Output [1]: [ss_item_sk#36]

(79) InputAdapter
Input [1]: [ss_item_sk#36]

(80) InputIteratorTransformer
Input [1]: [ss_item_sk#36]

(81) BroadcastHashJoinExecTransformer
Left keys [1]: [i_item_sk#37]
Right keys [1]: [ss_item_sk#36]
Join type: LeftSemi
Join condition: None

(82) WholeStageCodegenTransformer (41)
Input [4]: [i_item_sk#37, i_brand_id#38, i_class_id#39, i_category_id#40]
Arguments: false

(83) ColumnarBroadcastExchange
Input [4]: [i_item_sk#37, i_brand_id#38, i_class_id#39, i_category_id#40]
Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=8]

(84) InputAdapter
Input [4]: [i_item_sk#37, i_brand_id#38, i_class_id#39, i_category_id#40]

(85) InputIteratorTransformer
Input [4]: [i_item_sk#37, i_brand_id#38, i_class_id#39, i_category_id#40]

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

(87) ProjectExecTransformer
Output [6]: [ss_quantity#2, ss_list_price#3, ss_sold_date_sk#4, i_brand_id#38, i_class_id#39, i_category_id#40]
Input [8]: [ss_item_sk#1, ss_quantity#2, ss_list_price#3, ss_sold_date_sk#4, i_item_sk#37, i_brand_id#38, i_class_id#39, i_category_id#40]

(88) ReusedExchange [Reuses operator id: 212]
Output [1]: [d_date_sk#41]

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

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

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

(92) ProjectExecTransformer
Output [4]: [i_brand_id#38, i_class_id#39, i_category_id#40, (cast(ss_quantity#2 as decimal(10,0)) * ss_list_price#3) AS _pre_1#42]
Input [7]: [ss_quantity#2, ss_list_price#3, ss_sold_date_sk#4, i_brand_id#38, i_class_id#39, i_category_id#40, d_date_sk#41]

(93) FlushableHashAggregateExecTransformer
Input [4]: [i_brand_id#38, i_class_id#39, i_category_id#40, _pre_1#42]
Keys [3]: [i_brand_id#38, i_class_id#39, i_category_id#40]
Functions [2]: [partial_sum(_pre_1#42), partial_count(1)]
Aggregate Attributes [3]: [sum#43, isEmpty#44, count#45]
Results [6]: [i_brand_id#38, i_class_id#39, i_category_id#40, sum#46, isEmpty#47, count#48]

(94) ProjectExecTransformer
Output [7]: [hash(i_brand_id#38, i_class_id#39, i_category_id#40, 42) AS hash_partition_key#49, i_brand_id#38, i_class_id#39, i_category_id#40, sum#46, isEmpty#47, count#48]
Input [6]: [i_brand_id#38, i_class_id#39, i_category_id#40, sum#46, isEmpty#47, count#48]

(95) WholeStageCodegenTransformer (43)
Input [7]: [hash_partition_key#49, i_brand_id#38, i_class_id#39, i_category_id#40, sum#46, isEmpty#47, count#48]
Arguments: false

(96) VeloxResizeBatches
Input [7]: [hash_partition_key#49, i_brand_id#38, i_class_id#39, i_category_id#40, sum#46, isEmpty#47, count#48]
Arguments: 1024, 2147483647, 10485760

(97) ColumnarExchange
Input [7]: [hash_partition_key#49, i_brand_id#38, i_class_id#39, i_category_id#40, sum#46, isEmpty#47, count#48]
Arguments: hashpartitioning(i_brand_id#38, i_class_id#39, i_category_id#40, 1), ENSURE_REQUIREMENTS, [i_brand_id#38, i_class_id#39, i_category_id#40, sum#46, isEmpty#47, count#48], [plan_id=9], [shuffle_writer_type=hash]

(98) InputAdapter
Input [6]: [i_brand_id#38, i_class_id#39, i_category_id#40, sum#46, isEmpty#47, count#48]

(99) InputIteratorTransformer
Input [6]: [i_brand_id#38, i_class_id#39, i_category_id#40, sum#46, isEmpty#47, count#48]

(100) RegularHashAggregateExecTransformer
Input [6]: [i_brand_id#38, i_class_id#39, i_category_id#40, sum#46, isEmpty#47, count#48]
Keys [3]: [i_brand_id#38, i_class_id#39, i_category_id#40]
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))#50, count(1)#51]
Results [5]: [i_brand_id#38, i_class_id#39, i_category_id#40, sum((cast(ss_quantity#2 as decimal(10,0)) * ss_list_price#3))#50 AS sales#52, count(1)#51 AS number_sales#53]

(101) FilterExecTransformer
Input [5]: [i_brand_id#38, i_class_id#39, i_category_id#40, sales#52, number_sales#53]
Arguments: (isnotnull(sales#52) AND (cast(sales#52 as decimal(32,6)) > cast(Subquery scalar-subquery#54, [id=#10] as decimal(32,6))))

(102) ProjectExecTransformer
Output [6]: [sales#52, number_sales#53, store AS channel#55, i_brand_id#38 AS i_brand_id#56, i_class_id#39 AS i_class_id#57, i_category_id#40 AS i_category_id#58]
Input [5]: [i_brand_id#38, i_class_id#39, i_category_id#40, sales#52, number_sales#53]

(103) WholeStageCodegenTransformer (44)
Input [6]: [sales#52, number_sales#53, channel#55, i_brand_id#56, i_class_id#57, i_category_id#58]
Arguments: false

(104) FileSourceScanExecTransformer parquet spark_catalog.default.catalog_sales
Output [4]: [cs_item_sk#59, cs_quantity#60, cs_list_price#61, cs_sold_date_sk#62]
Batched: true
Location: InMemoryFileIndex []
PartitionFilters: [isnotnull(cs_sold_date_sk#62), dynamicpruningexpression(cs_sold_date_sk#62 IN dynamicpruning#5)]
PushedFilters: [IsNotNull(cs_item_sk)]
ReadSchema: struct<cs_item_sk:int,cs_quantity:int,cs_list_price:decimal(7,2)>

(105) FilterExecTransformer
Input [4]: [cs_item_sk#59, cs_quantity#60, cs_list_price#61, cs_sold_date_sk#62]
Arguments: isnotnull(cs_item_sk#59)

(106) ReusedExchange [Reuses operator id: 72]
Output [1]: [ss_item_sk#63]

(107) InputAdapter
Input [1]: [ss_item_sk#63]

(108) InputIteratorTransformer
Input [1]: [ss_item_sk#63]

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

(110) ReusedExchange [Reuses operator id: 83]
Output [4]: [i_item_sk#64, i_brand_id#65, i_class_id#66, i_category_id#67]

(111) InputAdapter
Input [4]: [i_item_sk#64, i_brand_id#65, i_class_id#66, i_category_id#67]

(112) InputIteratorTransformer
Input [4]: [i_item_sk#64, i_brand_id#65, i_class_id#66, i_category_id#67]

(113) BroadcastHashJoinExecTransformer
Left keys [1]: [cs_item_sk#59]
Right keys [1]: [i_item_sk#64]
Join type: Inner
Join condition: None

(114) ProjectExecTransformer
Output [6]: [cs_quantity#60, cs_list_price#61, cs_sold_date_sk#62, i_brand_id#65, i_class_id#66, i_category_id#67]
Input [8]: [cs_item_sk#59, cs_quantity#60, cs_list_price#61, cs_sold_date_sk#62, i_item_sk#64, i_brand_id#65, i_class_id#66, i_category_id#67]

(115) ReusedExchange [Reuses operator id: 212]
Output [1]: [d_date_sk#68]

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

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

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

(119) ProjectExecTransformer
Output [4]: [i_brand_id#65, i_class_id#66, i_category_id#67, (cast(cs_quantity#60 as decimal(10,0)) * cs_list_price#61) AS _pre_2#69]
Input [7]: [cs_quantity#60, cs_list_price#61, cs_sold_date_sk#62, i_brand_id#65, i_class_id#66, i_category_id#67, d_date_sk#68]

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

(121) ProjectExecTransformer
Output [7]: [hash(i_brand_id#65, i_class_id#66, i_category_id#67, 42) AS hash_partition_key#76, i_brand_id#65, i_class_id#66, i_category_id#67, sum#73, isEmpty#74, count#75]
Input [6]: [i_brand_id#65, i_class_id#66, i_category_id#67, sum#73, isEmpty#74, count#75]

(122) WholeStageCodegenTransformer (87)
Input [7]: [hash_partition_key#76, i_brand_id#65, i_class_id#66, i_category_id#67, sum#73, isEmpty#74, count#75]
Arguments: false

(123) VeloxResizeBatches
Input [7]: [hash_partition_key#76, i_brand_id#65, i_class_id#66, i_category_id#67, sum#73, isEmpty#74, count#75]
Arguments: 1024, 2147483647, 10485760

(124) ColumnarExchange
Input [7]: [hash_partition_key#76, i_brand_id#65, i_class_id#66, i_category_id#67, sum#73, isEmpty#74, count#75]
Arguments: hashpartitioning(i_brand_id#65, i_class_id#66, i_category_id#67, 1), ENSURE_REQUIREMENTS, [i_brand_id#65, i_class_id#66, i_category_id#67, sum#73, isEmpty#74, count#75], [plan_id=11], [shuffle_writer_type=hash]

(125) InputAdapter
Input [6]: [i_brand_id#65, i_class_id#66, i_category_id#67, sum#73, isEmpty#74, count#75]

(126) InputIteratorTransformer
Input [6]: [i_brand_id#65, i_class_id#66, i_category_id#67, sum#73, isEmpty#74, count#75]

(127) RegularHashAggregateExecTransformer
Input [6]: [i_brand_id#65, i_class_id#66, i_category_id#67, sum#73, isEmpty#74, count#75]
Keys [3]: [i_brand_id#65, i_class_id#66, i_category_id#67]
Functions [2]: [sum((cast(cs_quantity#60 as decimal(10,0)) * cs_list_price#61)), count(1)]
Aggregate Attributes [2]: [sum((cast(cs_quantity#60 as decimal(10,0)) * cs_list_price#61))#77, count(1)#78]
Results [5]: [i_brand_id#65, i_class_id#66, i_category_id#67, sum((cast(cs_quantity#60 as decimal(10,0)) * cs_list_price#61))#77 AS sales#79, count(1)#78 AS number_sales#80]

(128) FilterExecTransformer
Input [5]: [i_brand_id#65, i_class_id#66, i_category_id#67, sales#79, number_sales#80]
Arguments: (isnotnull(sales#79) AND (cast(sales#79 as decimal(32,6)) > cast(ReusedSubquery Subquery scalar-subquery#54, [id=#10] as decimal(32,6))))

(129) ProjectExecTransformer
Output [6]: [sales#79, number_sales#80, catalog AS channel#81, i_brand_id#65, i_class_id#66, i_category_id#67]
Input [5]: [i_brand_id#65, i_class_id#66, i_category_id#67, sales#79, number_sales#80]

(130) WholeStageCodegenTransformer (88)
Input [6]: [sales#79, number_sales#80, channel#81, i_brand_id#65, i_class_id#66, i_category_id#67]
Arguments: false

(131) FileSourceScanExecTransformer parquet spark_catalog.default.web_sales
Output [4]: [ws_item_sk#82, ws_quantity#83, ws_list_price#84, ws_sold_date_sk#85]
Batched: true
Location: InMemoryFileIndex []
PartitionFilters: [isnotnull(ws_sold_date_sk#85), dynamicpruningexpression(ws_sold_date_sk#85 IN dynamicpruning#5)]
PushedFilters: [IsNotNull(ws_item_sk)]
ReadSchema: struct<ws_item_sk:int,ws_quantity:int,ws_list_price:decimal(7,2)>

(132) FilterExecTransformer
Input [4]: [ws_item_sk#82, ws_quantity#83, ws_list_price#84, ws_sold_date_sk#85]
Arguments: isnotnull(ws_item_sk#82)

(133) ReusedExchange [Reuses operator id: 72]
Output [1]: [ss_item_sk#86]

(134) InputAdapter
Input [1]: [ss_item_sk#86]

(135) InputIteratorTransformer
Input [1]: [ss_item_sk#86]

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

(137) ReusedExchange [Reuses operator id: 83]
Output [4]: [i_item_sk#87, i_brand_id#88, i_class_id#89, i_category_id#90]

(138) InputAdapter
Input [4]: [i_item_sk#87, i_brand_id#88, i_class_id#89, i_category_id#90]

(139) InputIteratorTransformer
Input [4]: [i_item_sk#87, i_brand_id#88, i_class_id#89, i_category_id#90]

(140) BroadcastHashJoinExecTransformer
Left keys [1]: [ws_item_sk#82]
Right keys [1]: [i_item_sk#87]
Join type: Inner
Join condition: None

(141) ProjectExecTransformer
Output [6]: [ws_quantity#83, ws_list_price#84, ws_sold_date_sk#85, i_brand_id#88, i_class_id#89, i_category_id#90]
Input [8]: [ws_item_sk#82, ws_quantity#83, ws_list_price#84, ws_sold_date_sk#85, i_item_sk#87, i_brand_id#88, i_class_id#89, i_category_id#90]

(142) ReusedExchange [Reuses operator id: 212]
Output [1]: [d_date_sk#91]

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

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

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

(146) ProjectExecTransformer
Output [4]: [i_brand_id#88, i_class_id#89, i_category_id#90, (cast(ws_quantity#83 as decimal(10,0)) * ws_list_price#84) AS _pre_3#92]
Input [7]: [ws_quantity#83, ws_list_price#84, ws_sold_date_sk#85, i_brand_id#88, i_class_id#89, i_category_id#90, d_date_sk#91]

(147) FlushableHashAggregateExecTransformer
Input [4]: [i_brand_id#88, i_class_id#89, i_category_id#90, _pre_3#92]
Keys [3]: [i_brand_id#88, i_class_id#89, i_category_id#90]
Functions [2]: [partial_sum(_pre_3#92), partial_count(1)]
Aggregate Attributes [3]: [sum#93, isEmpty#94, count#95]
Results [6]: [i_brand_id#88, i_class_id#89, i_category_id#90, sum#96, isEmpty#97, count#98]

(148) ProjectExecTransformer
Output [7]: [hash(i_brand_id#88, i_class_id#89, i_category_id#90, 42) AS hash_partition_key#99, i_brand_id#88, i_class_id#89, i_category_id#90, sum#96, isEmpty#97, count#98]
Input [6]: [i_brand_id#88, i_class_id#89, i_category_id#90, sum#96, isEmpty#97, count#98]

(149) WholeStageCodegenTransformer (131)
Input [7]: [hash_partition_key#99, i_brand_id#88, i_class_id#89, i_category_id#90, sum#96, isEmpty#97, count#98]
Arguments: false

(150) VeloxResizeBatches
Input [7]: [hash_partition_key#99, i_brand_id#88, i_class_id#89, i_category_id#90, sum#96, isEmpty#97, count#98]
Arguments: 1024, 2147483647, 10485760

(151) ColumnarExchange
Input [7]: [hash_partition_key#99, i_brand_id#88, i_class_id#89, i_category_id#90, sum#96, isEmpty#97, count#98]
Arguments: hashpartitioning(i_brand_id#88, i_class_id#89, i_category_id#90, 1), ENSURE_REQUIREMENTS, [i_brand_id#88, i_class_id#89, i_category_id#90, sum#96, isEmpty#97, count#98], [plan_id=12], [shuffle_writer_type=hash]

(152) InputAdapter
Input [6]: [i_brand_id#88, i_class_id#89, i_category_id#90, sum#96, isEmpty#97, count#98]

(153) InputIteratorTransformer
Input [6]: [i_brand_id#88, i_class_id#89, i_category_id#90, sum#96, isEmpty#97, count#98]

(154) RegularHashAggregateExecTransformer
Input [6]: [i_brand_id#88, i_class_id#89, i_category_id#90, sum#96, isEmpty#97, count#98]
Keys [3]: [i_brand_id#88, i_class_id#89, i_category_id#90]
Functions [2]: [sum((cast(ws_quantity#83 as decimal(10,0)) * ws_list_price#84)), count(1)]
Aggregate Attributes [2]: [sum((cast(ws_quantity#83 as decimal(10,0)) * ws_list_price#84))#100, count(1)#101]
Results [5]: [i_brand_id#88, i_class_id#89, i_category_id#90, sum((cast(ws_quantity#83 as decimal(10,0)) * ws_list_price#84))#100 AS sales#102, count(1)#101 AS number_sales#103]

(155) FilterExecTransformer
Input [5]: [i_brand_id#88, i_class_id#89, i_category_id#90, sales#102, number_sales#103]
Arguments: (isnotnull(sales#102) AND (cast(sales#102 as decimal(32,6)) > cast(ReusedSubquery Subquery scalar-subquery#54, [id=#10] as decimal(32,6))))

(156) ProjectExecTransformer
Output [6]: [sales#102, number_sales#103, web AS channel#104, i_brand_id#88, i_class_id#89, i_category_id#90]
Input [5]: [i_brand_id#88, i_class_id#89, i_category_id#90, sales#102, number_sales#103]

(157) WholeStageCodegenTransformer (132)
Input [6]: [sales#102, number_sales#103, channel#104, i_brand_id#88, i_class_id#89, i_category_id#90]
Arguments: false

(158) ColumnarUnion
Arguments: hashpartitioning(i_brand_id#56, i_class_id#57, i_category_id#58, 1)

(159) InputAdapter
Input [6]: [sales#52, number_sales#53, channel#55, i_brand_id#56, i_class_id#57, i_category_id#58]

(160) InputIteratorTransformer
Input [6]: [sales#52, number_sales#53, channel#55, i_brand_id#56, i_class_id#57, i_category_id#58]

(161) ExpandExecTransformer
Input [6]: [sales#52, number_sales#53, channel#55, i_brand_id#56, i_class_id#57, i_category_id#58]
Arguments: [[sales#52, number_sales#53, channel#55, i_brand_id#56, i_class_id#57, i_category_id#58, 0], [sales#52, number_sales#53, channel#55, i_brand_id#56, i_class_id#57, null, 1], [sales#52, number_sales#53, channel#55, i_brand_id#56, null, null, 3], [sales#52, number_sales#53, channel#55, null, null, null, 7], [sales#52, number_sales#53, null, null, null, null, 15]], [sales#52, number_sales#53, channel#105, i_brand_id#106, i_class_id#107, i_category_id#108, spark_grouping_id#109]

(162) FlushableHashAggregateExecTransformer
Input [7]: [sales#52, number_sales#53, channel#105, i_brand_id#106, i_class_id#107, i_category_id#108, spark_grouping_id#109]
Keys [5]: [channel#105, i_brand_id#106, i_class_id#107, i_category_id#108, spark_grouping_id#109]
Functions [2]: [partial_sum(sales#52), partial_sum(number_sales#53)]
Aggregate Attributes [3]: [sum#110, isEmpty#111, sum#112]
Results [8]: [channel#105, i_brand_id#106, i_class_id#107, i_category_id#108, spark_grouping_id#109, sum#113, isEmpty#114, sum#115]

(163) ProjectExecTransformer
Output [9]: [hash(channel#105, i_brand_id#106, i_class_id#107, i_category_id#108, spark_grouping_id#109, 42) AS hash_partition_key#116, channel#105, i_brand_id#106, i_class_id#107, i_category_id#108, spark_grouping_id#109, sum#113, isEmpty#114, sum#115]
Input [8]: [channel#105, i_brand_id#106, i_class_id#107, i_category_id#108, spark_grouping_id#109, sum#113, isEmpty#114, sum#115]

(164) WholeStageCodegenTransformer (133)
Input [9]: [hash_partition_key#116, channel#105, i_brand_id#106, i_class_id#107, i_category_id#108, spark_grouping_id#109, sum#113, isEmpty#114, sum#115]
Arguments: false

(165) VeloxResizeBatches
Input [9]: [hash_partition_key#116, channel#105, i_brand_id#106, i_class_id#107, i_category_id#108, spark_grouping_id#109, sum#113, isEmpty#114, sum#115]
Arguments: 1024, 2147483647, 10485760

(166) ColumnarExchange
Input [9]: [hash_partition_key#116, channel#105, i_brand_id#106, i_class_id#107, i_category_id#108, spark_grouping_id#109, sum#113, isEmpty#114, sum#115]
Arguments: hashpartitioning(channel#105, i_brand_id#106, i_class_id#107, i_category_id#108, spark_grouping_id#109, 1), ENSURE_REQUIREMENTS, [channel#105, i_brand_id#106, i_class_id#107, i_category_id#108, spark_grouping_id#109, sum#113, isEmpty#114, sum#115], [plan_id=13], [shuffle_writer_type=hash]

(167) InputAdapter
Input [8]: [channel#105, i_brand_id#106, i_class_id#107, i_category_id#108, spark_grouping_id#109, sum#113, isEmpty#114, sum#115]

(168) InputIteratorTransformer
Input [8]: [channel#105, i_brand_id#106, i_class_id#107, i_category_id#108, spark_grouping_id#109, sum#113, isEmpty#114, sum#115]

(169) RegularHashAggregateExecTransformer
Input [8]: [channel#105, i_brand_id#106, i_class_id#107, i_category_id#108, spark_grouping_id#109, sum#113, isEmpty#114, sum#115]
Keys [5]: [channel#105, i_brand_id#106, i_class_id#107, i_category_id#108, spark_grouping_id#109]
Functions [2]: [sum(sales#52), sum(number_sales#53)]
Aggregate Attributes [2]: [sum(sales#52)#117, sum(number_sales#53)#118]
Results [7]: [channel#105, i_brand_id#106, i_class_id#107, i_category_id#108, spark_grouping_id#109, sum(sales#52)#117, sum(number_sales#53)#118]

(170) ProjectExecTransformer
Output [6]: [channel#105, i_brand_id#106, i_class_id#107, i_category_id#108, sum(sales#52)#117 AS sum(sales)#119, sum(number_sales#53)#118 AS sum(number_sales)#120]
Input [7]: [channel#105, i_brand_id#106, i_class_id#107, i_category_id#108, spark_grouping_id#109, sum(sales#52)#117, sum(number_sales#53)#118]

(171) WholeStageCodegenTransformer (134)
Input [6]: [channel#105, i_brand_id#106, i_class_id#107, i_category_id#108, sum(sales)#119, sum(number_sales)#120]
Arguments: false

(172) TakeOrderedAndProjectExecTransformer
Input [6]: [channel#105, i_brand_id#106, i_class_id#107, i_category_id#108, sum(sales)#119, sum(number_sales)#120]
Arguments: 100, [channel#105 ASC NULLS FIRST, i_brand_id#106 ASC NULLS FIRST, i_class_id#107 ASC NULLS FIRST, i_category_id#108 ASC NULLS FIRST], [channel#105, i_brand_id#106, i_class_id#107, i_category_id#108, sum(sales)#119, sum(number_sales)#120], 0

(173) VeloxColumnarToRow
Input [6]: [channel#105, i_brand_id#106, i_class_id#107, i_category_id#108, sum(sales)#119, sum(number_sales)#120]

===== Subqueries =====

Subquery:1 Hosting operator id = 101 Hosting Expression = Subquery scalar-subquery#54, [id=#10]
VeloxColumnarToRow (207)
+- ^ RegularHashAggregateExecTransformer (205)
   +- ^ InputIteratorTransformer (204)
      +- ColumnarExchange (202)
         +- VeloxResizeBatches (201)
            +- ^ FlushableHashAggregateExecTransformer (199)
               +- ^ ProjectExecTransformer (198)
                  +- ^ InputIteratorTransformer (197)
                     +- ColumnarUnion (195)
                        :- ^ ProjectExecTransformer (179)
                        :  +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (178)
                        :     :- ^ FileSourceScanExecTransformer parquet spark_catalog.default.store_sales (174)
                        :     +- ^ InputIteratorTransformer (177)
                        :        +- ReusedExchange (175)
                        :- ^ ProjectExecTransformer (186)
                        :  +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (185)
                        :     :- ^ FileSourceScanExecTransformer parquet spark_catalog.default.catalog_sales (181)
                        :     +- ^ InputIteratorTransformer (184)
                        :        +- ReusedExchange (182)
                        +- ^ ProjectExecTransformer (193)
                           +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (192)
                              :- ^ FileSourceScanExecTransformer parquet spark_catalog.default.web_sales (188)
                              +- ^ InputIteratorTransformer (191)
                                 +- ReusedExchange (189)


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

(175) ReusedExchange [Reuses operator id: 217]
Output [1]: [d_date_sk#124]

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

(177) InputIteratorTransformer
Input [1]: [d_date_sk#124]

(178) BroadcastHashJoinExecTransformer
Left keys [1]: [ss_sold_date_sk#123]
Right keys [1]: [d_date_sk#124]
Join type: Inner
Join condition: None

(179) ProjectExecTransformer
Output [2]: [ss_quantity#121 AS quantity#125, ss_list_price#122 AS list_price#126]
Input [4]: [ss_quantity#121, ss_list_price#122, ss_sold_date_sk#123, d_date_sk#124]

(180) WholeStageCodegenTransformer (3)
Input [2]: [quantity#125, list_price#126]
Arguments: false

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

(182) ReusedExchange [Reuses operator id: 217]
Output [1]: [d_date_sk#130]

(183) InputAdapter
Input [1]: [d_date_sk#130]

(184) InputIteratorTransformer
Input [1]: [d_date_sk#130]

(185) BroadcastHashJoinExecTransformer
Left keys [1]: [cs_sold_date_sk#129]
Right keys [1]: [d_date_sk#130]
Join type: Inner
Join condition: None

(186) ProjectExecTransformer
Output [2]: [cs_quantity#127 AS quantity#131, cs_list_price#128 AS list_price#132]
Input [4]: [cs_quantity#127, cs_list_price#128, cs_sold_date_sk#129, d_date_sk#130]

(187) WholeStageCodegenTransformer (6)
Input [2]: [quantity#131, list_price#132]
Arguments: false

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

(189) ReusedExchange [Reuses operator id: 217]
Output [1]: [d_date_sk#136]

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

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

(192) BroadcastHashJoinExecTransformer
Left keys [1]: [ws_sold_date_sk#135]
Right keys [1]: [d_date_sk#136]
Join type: Inner
Join condition: None

(193) ProjectExecTransformer
Output [2]: [ws_quantity#133 AS quantity#137, ws_list_price#134 AS list_price#138]
Input [4]: [ws_quantity#133, ws_list_price#134, ws_sold_date_sk#135, d_date_sk#136]

(194) WholeStageCodegenTransformer (9)
Input [2]: [quantity#137, list_price#138]
Arguments: false

(195) ColumnarUnion
Arguments: UnknownPartitioning(0)

(196) InputAdapter
Input [2]: [quantity#125, list_price#126]

(197) InputIteratorTransformer
Input [2]: [quantity#125, list_price#126]

(198) ProjectExecTransformer
Output [1]: [(cast(quantity#125 as decimal(10,0)) * list_price#126) AS _pre_4#139]
Input [2]: [quantity#125, list_price#126]

(199) FlushableHashAggregateExecTransformer
Input [1]: [_pre_4#139]
Keys: []
Functions [1]: [partial_avg(_pre_4#139)]
Aggregate Attributes [2]: [sum#140, count#141]
Results [2]: [sum#142, count#143]

(200) WholeStageCodegenTransformer (10)
Input [2]: [sum#142, count#143]
Arguments: false

(201) VeloxResizeBatches
Input [2]: [sum#142, count#143]
Arguments: 1024, 2147483647, 10485760

(202) ColumnarExchange
Input [2]: [sum#142, count#143]
Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=14], [shuffle_writer_type=hash]

(203) InputAdapter
Input [2]: [sum#142, count#143]

(204) InputIteratorTransformer
Input [2]: [sum#142, count#143]

(205) RegularHashAggregateExecTransformer
Input [2]: [sum#142, count#143]
Keys: []
Functions [1]: [avg((cast(quantity#125 as decimal(10,0)) * list_price#126))]
Aggregate Attributes [1]: [avg((cast(quantity#125 as decimal(10,0)) * list_price#126))#144]
Results [1]: [avg((cast(quantity#125 as decimal(10,0)) * list_price#126))#144 AS average_sales#145]

(206) WholeStageCodegenTransformer (11)
Input [1]: [average_sales#145]
Arguments: false

(207) VeloxColumnarToRow
Input [1]: [average_sales#145]

Subquery:2 Hosting operator id = 174 Hosting Expression = ss_sold_date_sk#123 IN dynamicpruning#12

Subquery:3 Hosting operator id = 181 Hosting Expression = cs_sold_date_sk#129 IN dynamicpruning#12

Subquery:4 Hosting operator id = 188 Hosting Expression = ws_sold_date_sk#135 IN dynamicpruning#12

Subquery:5 Hosting operator id = 1 Hosting Expression = ss_sold_date_sk#4 IN dynamicpruning#5
ColumnarBroadcastExchange (212)
+- ^ ProjectExecTransformer (210)
   +- ^ FilterExecTransformer (209)
      +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (208)


(208) FileSourceScanExecTransformer parquet spark_catalog.default.date_dim
Output [3]: [d_date_sk#41, d_year#146, d_moy#147]
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>

(209) FilterExecTransformer
Input [3]: [d_date_sk#41, d_year#146, d_moy#147]
Arguments: ((((isnotnull(d_year#146) AND isnotnull(d_moy#147)) AND (d_year#146 = 2001)) AND (d_moy#147 = 11)) AND isnotnull(d_date_sk#41))

(210) ProjectExecTransformer
Output [1]: [d_date_sk#41]
Input [3]: [d_date_sk#41, d_year#146, d_moy#147]

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

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

Subquery:6 Hosting operator id = 5 Hosting Expression = ss_sold_date_sk#11 IN dynamicpruning#12
ColumnarBroadcastExchange (217)
+- ^ ProjectExecTransformer (215)
   +- ^ FilterExecTransformer (214)
      +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (213)


(213) FileSourceScanExecTransformer parquet spark_catalog.default.date_dim
Output [2]: [d_date_sk#24, d_year#148]
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>

(214) FilterExecTransformer
Input [2]: [d_date_sk#24, d_year#148]
Arguments: (((isnotnull(d_year#148) AND (d_year#148 >= 1999)) AND (d_year#148 <= 2001)) AND isnotnull(d_date_sk#24))

(215) ProjectExecTransformer
Output [1]: [d_date_sk#24]
Input [2]: [d_date_sk#24, d_year#148]

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

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

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

Subquery:8 Hosting operator id = 48 Hosting Expression = ws_sold_date_sk#30 IN dynamicpruning#12

Subquery:9 Hosting operator id = 128 Hosting Expression = ReusedSubquery Subquery scalar-subquery#54, [id=#10]

Subquery:10 Hosting operator id = 104 Hosting Expression = cs_sold_date_sk#62 IN dynamicpruning#5

Subquery:11 Hosting operator id = 155 Hosting Expression = ReusedSubquery Subquery scalar-subquery#54, [id=#10]

Subquery:12 Hosting operator id = 131 Hosting Expression = ws_sold_date_sk#85 IN dynamicpruning#5


