== Physical Plan ==
VeloxColumnarToRow (104)
+- ^ RegularHashAggregateExecTransformer (102)
   +- ^ InputIteratorTransformer (101)
      +- ColumnarExchange (99)
         +- VeloxResizeBatches (98)
            +- ^ FlushableHashAggregateExecTransformer (96)
               +- ^ InputIteratorTransformer (95)
                  +- ColumnarUnion (93)
                     :- ^ ProjectExecTransformer (66)
                     :  +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (65)
                     :     :- ^ ProjectExecTransformer (61)
                     :     :  +- ^ ShuffledHashJoinExecTransformer LeftSemi BuildRight (60)
                     :     :     :- ^ InputIteratorTransformer (38)
                     :     :     :  +- ColumnarExchange (36)
                     :     :     :     +- VeloxResizeBatches (35)
                     :     :     :        +- ^ ProjectExecTransformer (33)
                     :     :     :           +- ^ BroadcastHashJoinExecTransformer LeftSemi BuildRight (32)
                     :     :     :              :- ^ FileSourceScanExecTransformer parquet spark_catalog.default.catalog_sales (1)
                     :     :     :              +- ^ InputIteratorTransformer (31)
                     :     :     :                 +- ColumnarBroadcastExchange (29)
                     :     :     :                    +- ^ ProjectExecTransformer (27)
                     :     :     :                       +- ^ FilterExecTransformer (26)
                     :     :     :                          +- ^ ProjectExecTransformer (25)
                     :     :     :                             +- ^ RegularHashAggregateExecTransformer (24)
                     :     :     :                                +- ^ InputIteratorTransformer (23)
                     :     :     :                                   +- ColumnarExchange (21)
                     :     :     :                                      +- VeloxResizeBatches (20)
                     :     :     :                                         +- ^ ProjectExecTransformer (18)
                     :     :     :                                            +- ^ FlushableHashAggregateExecTransformer (17)
                     :     :     :                                               +- ^ ProjectExecTransformer (16)
                     :     :     :                                                  +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (15)
                     :     :     :                                                     :- ^ ProjectExecTransformer (8)
                     :     :     :                                                     :  +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (7)
                     :     :     :                                                     :     :- ^ FilterExecTransformer (3)
                     :     :     :                                                     :     :  +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.store_sales (2)
                     :     :     :                                                     :     +- ^ InputIteratorTransformer (6)
                     :     :     :                                                     :        +- ReusedExchange (4)
                     :     :     :                                                     +- ^ InputIteratorTransformer (14)
                     :     :     :                                                        +- ColumnarBroadcastExchange (12)
                     :     :     :                                                           +- ^ FilterExecTransformer (10)
                     :     :     :                                                              +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.item (9)
                     :     :     +- ^ ProjectExecTransformer (59)
                     :     :        +- ^ FilterExecTransformer (58)
                     :     :           +- ^ RegularHashAggregateExecTransformer (57)
                     :     :              +- ^ InputIteratorTransformer (56)
                     :     :                 +- ColumnarExchange (54)
                     :     :                    +- VeloxResizeBatches (53)
                     :     :                       +- ^ ProjectExecTransformer (51)
                     :     :                          +- ^ FlushableHashAggregateExecTransformer (50)
                     :     :                             +- ^ ProjectExecTransformer (49)
                     :     :                                +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (48)
                     :     :                                   :- ^ ProjectExecTransformer (41)
                     :     :                                   :  +- ^ FilterExecTransformer (40)
                     :     :                                   :     +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.store_sales (39)
                     :     :                                   +- ^ InputIteratorTransformer (47)
                     :     :                                      +- ColumnarBroadcastExchange (45)
                     :     :                                         +- ^ FilterExecTransformer (43)
                     :     :                                            +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.customer (42)
                     :     +- ^ InputIteratorTransformer (64)
                     :        +- ReusedExchange (62)
                     +- ^ ProjectExecTransformer (91)
                        +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (90)
                           :- ^ ProjectExecTransformer (86)
                           :  +- ^ ShuffledHashJoinExecTransformer LeftSemi BuildRight (85)
                           :     :- ^ InputIteratorTransformer (78)
                           :     :  +- ColumnarExchange (76)
                           :     :     +- VeloxResizeBatches (75)
                           :     :        +- ^ ProjectExecTransformer (73)
                           :     :           +- ^ BroadcastHashJoinExecTransformer LeftSemi BuildRight (72)
                           :     :              :- ^ FileSourceScanExecTransformer parquet spark_catalog.default.web_sales (68)
                           :     :              +- ^ InputIteratorTransformer (71)
                           :     :                 +- ReusedExchange (69)
                           :     +- ^ ProjectExecTransformer (84)
                           :        +- ^ FilterExecTransformer (83)
                           :           +- ^ RegularHashAggregateExecTransformer (82)
                           :              +- ^ InputIteratorTransformer (81)
                           :                 +- ReusedExchange (79)
                           +- ^ InputIteratorTransformer (89)
                              +- ReusedExchange (87)


(1) FileSourceScanExecTransformer parquet spark_catalog.default.catalog_sales
Output [5]: [cs_bill_customer_sk#1, cs_item_sk#2, cs_quantity#3, cs_list_price#4, cs_sold_date_sk#5]
Batched: true
Location: InMemoryFileIndex []
PartitionFilters: [isnotnull(cs_sold_date_sk#5), dynamicpruningexpression(cs_sold_date_sk#5 IN dynamicpruning#6)]
ReadSchema: struct<cs_bill_customer_sk:int,cs_item_sk:int,cs_quantity:int,cs_list_price:decimal(7,2)>

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

(3) FilterExecTransformer
Input [2]: [ss_item_sk#7, ss_sold_date_sk#8]
Arguments: isnotnull(ss_item_sk#7)

(4) ReusedExchange [Reuses operator id: 114]
Output [2]: [d_date_sk#10, d_date#11]

(5) InputAdapter
Input [2]: [d_date_sk#10, d_date#11]

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

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

(8) ProjectExecTransformer
Output [2]: [ss_item_sk#7, d_date#11]
Input [4]: [ss_item_sk#7, ss_sold_date_sk#8, d_date_sk#10, d_date#11]

(9) FileSourceScanExecTransformer parquet spark_catalog.default.item
Output [2]: [i_item_sk#12, i_item_desc#13]
Batched: true
Location: InMemoryFileIndex [{warehouse_dir}/item]
PushedFilters: [IsNotNull(i_item_sk)]
ReadSchema: struct<i_item_sk:int,i_item_desc:string>

(10) FilterExecTransformer
Input [2]: [i_item_sk#12, i_item_desc#13]
Arguments: isnotnull(i_item_sk#12)

(11) WholeStageCodegenTransformer (4)
Input [2]: [i_item_sk#12, i_item_desc#13]
Arguments: false

(12) ColumnarBroadcastExchange
Input [2]: [i_item_sk#12, i_item_desc#13]
Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=1]

(13) InputAdapter
Input [2]: [i_item_sk#12, i_item_desc#13]

(14) InputIteratorTransformer
Input [2]: [i_item_sk#12, i_item_desc#13]

(15) BroadcastHashJoinExecTransformer
Left keys [1]: [ss_item_sk#7]
Right keys [1]: [i_item_sk#12]
Join type: Inner
Join condition: None

(16) ProjectExecTransformer
Output [3]: [d_date#11, i_item_sk#12, substr(i_item_desc#13, 1, 30) AS _groupingexpression#14]
Input [4]: [ss_item_sk#7, d_date#11, i_item_sk#12, i_item_desc#13]

(17) FlushableHashAggregateExecTransformer
Input [3]: [d_date#11, i_item_sk#12, _groupingexpression#14]
Keys [3]: [_groupingexpression#14, i_item_sk#12, d_date#11]
Functions [1]: [partial_count(1)]
Aggregate Attributes [1]: [count#15]
Results [4]: [_groupingexpression#14, i_item_sk#12, d_date#11, count#16]

(18) ProjectExecTransformer
Output [5]: [hash(_groupingexpression#14, i_item_sk#12, d_date#11, 42) AS hash_partition_key#17, _groupingexpression#14, i_item_sk#12, d_date#11, count#16]
Input [4]: [_groupingexpression#14, i_item_sk#12, d_date#11, count#16]

(19) WholeStageCodegenTransformer (5)
Input [5]: [hash_partition_key#17, _groupingexpression#14, i_item_sk#12, d_date#11, count#16]
Arguments: false

(20) VeloxResizeBatches
Input [5]: [hash_partition_key#17, _groupingexpression#14, i_item_sk#12, d_date#11, count#16]
Arguments: 1024, 2147483647, 10485760

(21) ColumnarExchange
Input [5]: [hash_partition_key#17, _groupingexpression#14, i_item_sk#12, d_date#11, count#16]
Arguments: hashpartitioning(_groupingexpression#14, i_item_sk#12, d_date#11, 1), ENSURE_REQUIREMENTS, [_groupingexpression#14, i_item_sk#12, d_date#11, count#16], [plan_id=2], [shuffle_writer_type=hash]

(22) InputAdapter
Input [4]: [_groupingexpression#14, i_item_sk#12, d_date#11, count#16]

(23) InputIteratorTransformer
Input [4]: [_groupingexpression#14, i_item_sk#12, d_date#11, count#16]

(24) RegularHashAggregateExecTransformer
Input [4]: [_groupingexpression#14, i_item_sk#12, d_date#11, count#16]
Keys [3]: [_groupingexpression#14, i_item_sk#12, d_date#11]
Functions [1]: [count(1)]
Aggregate Attributes [1]: [count(1)#18]
Results [4]: [_groupingexpression#14, i_item_sk#12, d_date#11, count(1)#18]

(25) ProjectExecTransformer
Output [2]: [i_item_sk#12 AS item_sk#19, count(1)#18 AS cnt#20]
Input [4]: [_groupingexpression#14, i_item_sk#12, d_date#11, count(1)#18]

(26) FilterExecTransformer
Input [2]: [item_sk#19, cnt#20]
Arguments: (cnt#20 > 4)

(27) ProjectExecTransformer
Output [1]: [item_sk#19]
Input [2]: [item_sk#19, cnt#20]

(28) WholeStageCodegenTransformer (6)
Input [1]: [item_sk#19]
Arguments: false

(29) ColumnarBroadcastExchange
Input [1]: [item_sk#19]
Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=3]

(30) InputAdapter
Input [1]: [item_sk#19]

(31) InputIteratorTransformer
Input [1]: [item_sk#19]

(32) BroadcastHashJoinExecTransformer
Left keys [1]: [cs_item_sk#2]
Right keys [1]: [item_sk#19]
Join type: LeftSemi
Join condition: None

(33) ProjectExecTransformer
Output [5]: [hash(cs_bill_customer_sk#1, 42) AS hash_partition_key#21, cs_bill_customer_sk#1, cs_quantity#3, cs_list_price#4, cs_sold_date_sk#5]
Input [5]: [cs_bill_customer_sk#1, cs_item_sk#2, cs_quantity#3, cs_list_price#4, cs_sold_date_sk#5]

(34) WholeStageCodegenTransformer (7)
Input [5]: [hash_partition_key#21, cs_bill_customer_sk#1, cs_quantity#3, cs_list_price#4, cs_sold_date_sk#5]
Arguments: false

(35) VeloxResizeBatches
Input [5]: [hash_partition_key#21, cs_bill_customer_sk#1, cs_quantity#3, cs_list_price#4, cs_sold_date_sk#5]
Arguments: 1024, 2147483647, 10485760

(36) ColumnarExchange
Input [5]: [hash_partition_key#21, cs_bill_customer_sk#1, cs_quantity#3, cs_list_price#4, cs_sold_date_sk#5]
Arguments: hashpartitioning(cs_bill_customer_sk#1, 1), ENSURE_REQUIREMENTS, [cs_bill_customer_sk#1, cs_quantity#3, cs_list_price#4, cs_sold_date_sk#5], [plan_id=4], [shuffle_writer_type=hash]

(37) InputAdapter
Input [4]: [cs_bill_customer_sk#1, cs_quantity#3, cs_list_price#4, cs_sold_date_sk#5]

(38) InputIteratorTransformer
Input [4]: [cs_bill_customer_sk#1, cs_quantity#3, cs_list_price#4, cs_sold_date_sk#5]

(39) FileSourceScanExecTransformer parquet spark_catalog.default.store_sales
Output [4]: [ss_customer_sk#22, ss_quantity#23, ss_sales_price#24, ss_sold_date_sk#25]
Batched: true
Location: CatalogFileIndex [{warehouse_dir}/store_sales]
PushedFilters: [IsNotNull(ss_customer_sk)]
ReadSchema: struct<ss_customer_sk:int,ss_quantity:int,ss_sales_price:decimal(7,2)>

(40) FilterExecTransformer
Input [4]: [ss_customer_sk#22, ss_quantity#23, ss_sales_price#24, ss_sold_date_sk#25]
Arguments: isnotnull(ss_customer_sk#22)

(41) ProjectExecTransformer
Output [3]: [ss_customer_sk#22, ss_quantity#23, ss_sales_price#24]
Input [4]: [ss_customer_sk#22, ss_quantity#23, ss_sales_price#24, ss_sold_date_sk#25]

(42) FileSourceScanExecTransformer parquet spark_catalog.default.customer
Output [1]: [c_customer_sk#26]
Batched: true
Location: InMemoryFileIndex [{warehouse_dir}/customer]
PushedFilters: [IsNotNull(c_customer_sk)]
ReadSchema: struct<c_customer_sk:int>

(43) FilterExecTransformer
Input [1]: [c_customer_sk#26]
Arguments: isnotnull(c_customer_sk#26)

(44) WholeStageCodegenTransformer (13)
Input [1]: [c_customer_sk#26]
Arguments: false

(45) ColumnarBroadcastExchange
Input [1]: [c_customer_sk#26]
Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=5]

(46) InputAdapter
Input [1]: [c_customer_sk#26]

(47) InputIteratorTransformer
Input [1]: [c_customer_sk#26]

(48) BroadcastHashJoinExecTransformer
Left keys [1]: [ss_customer_sk#22]
Right keys [1]: [c_customer_sk#26]
Join type: Inner
Join condition: None

(49) ProjectExecTransformer
Output [2]: [c_customer_sk#26, (cast(ss_quantity#23 as decimal(10,0)) * ss_sales_price#24) AS _pre_1#27]
Input [4]: [ss_customer_sk#22, ss_quantity#23, ss_sales_price#24, c_customer_sk#26]

(50) FlushableHashAggregateExecTransformer
Input [2]: [c_customer_sk#26, _pre_1#27]
Keys [1]: [c_customer_sk#26]
Functions [1]: [partial_sum(_pre_1#27)]
Aggregate Attributes [2]: [sum#28, isEmpty#29]
Results [3]: [c_customer_sk#26, sum#30, isEmpty#31]

(51) ProjectExecTransformer
Output [4]: [hash(c_customer_sk#26, 42) AS hash_partition_key#32, c_customer_sk#26, sum#30, isEmpty#31]
Input [3]: [c_customer_sk#26, sum#30, isEmpty#31]

(52) WholeStageCodegenTransformer (14)
Input [4]: [hash_partition_key#32, c_customer_sk#26, sum#30, isEmpty#31]
Arguments: false

(53) VeloxResizeBatches
Input [4]: [hash_partition_key#32, c_customer_sk#26, sum#30, isEmpty#31]
Arguments: 1024, 2147483647, 10485760

(54) ColumnarExchange
Input [4]: [hash_partition_key#32, c_customer_sk#26, sum#30, isEmpty#31]
Arguments: hashpartitioning(c_customer_sk#26, 1), ENSURE_REQUIREMENTS, [c_customer_sk#26, sum#30, isEmpty#31], [plan_id=6], [shuffle_writer_type=hash]

(55) InputAdapter
Input [3]: [c_customer_sk#26, sum#30, isEmpty#31]

(56) InputIteratorTransformer
Input [3]: [c_customer_sk#26, sum#30, isEmpty#31]

(57) RegularHashAggregateExecTransformer
Input [3]: [c_customer_sk#26, sum#30, isEmpty#31]
Keys [1]: [c_customer_sk#26]
Functions [1]: [sum((cast(ss_quantity#23 as decimal(10,0)) * ss_sales_price#24))]
Aggregate Attributes [1]: [sum((cast(ss_quantity#23 as decimal(10,0)) * ss_sales_price#24))#33]
Results [2]: [c_customer_sk#26, sum((cast(ss_quantity#23 as decimal(10,0)) * ss_sales_price#24))#33 AS ssales#34]

(58) FilterExecTransformer
Input [2]: [c_customer_sk#26, ssales#34]
Arguments: (isnotnull(ssales#34) AND (cast(ssales#34 as decimal(38,8)) > (0.500000 * Subquery scalar-subquery#35, [id=#7])))

(59) ProjectExecTransformer
Output [1]: [c_customer_sk#26]
Input [2]: [c_customer_sk#26, ssales#34]

(60) ShuffledHashJoinExecTransformer
Left keys [1]: [cs_bill_customer_sk#1]
Right keys [1]: [c_customer_sk#26]
Join type: LeftSemi
Join condition: None

(61) ProjectExecTransformer
Output [3]: [cs_quantity#3, cs_list_price#4, cs_sold_date_sk#5]
Input [4]: [cs_bill_customer_sk#1, cs_quantity#3, cs_list_price#4, cs_sold_date_sk#5]

(62) ReusedExchange [Reuses operator id: 109]
Output [1]: [d_date_sk#36]

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

(64) InputIteratorTransformer
Input [1]: [d_date_sk#36]

(65) BroadcastHashJoinExecTransformer
Left keys [1]: [cs_sold_date_sk#5]
Right keys [1]: [d_date_sk#36]
Join type: Inner
Join condition: None

(66) ProjectExecTransformer
Output [1]: [(cast(cs_quantity#3 as decimal(10,0)) * cs_list_price#4) AS sales#37]
Input [4]: [cs_quantity#3, cs_list_price#4, cs_sold_date_sk#5, d_date_sk#36]

(67) WholeStageCodegenTransformer (16)
Input [1]: [sales#37]
Arguments: false

(68) FileSourceScanExecTransformer parquet spark_catalog.default.web_sales
Output [5]: [ws_item_sk#38, ws_bill_customer_sk#39, ws_quantity#40, ws_list_price#41, ws_sold_date_sk#42]
Batched: true
Location: InMemoryFileIndex []
PartitionFilters: [isnotnull(ws_sold_date_sk#42), dynamicpruningexpression(ws_sold_date_sk#42 IN dynamicpruning#6)]
ReadSchema: struct<ws_item_sk:int,ws_bill_customer_sk:int,ws_quantity:int,ws_list_price:decimal(7,2)>

(69) ReusedExchange [Reuses operator id: 29]
Output [1]: [item_sk#43]

(70) InputAdapter
Input [1]: [item_sk#43]

(71) InputIteratorTransformer
Input [1]: [item_sk#43]

(72) BroadcastHashJoinExecTransformer
Left keys [1]: [ws_item_sk#38]
Right keys [1]: [item_sk#43]
Join type: LeftSemi
Join condition: None

(73) ProjectExecTransformer
Output [5]: [hash(ws_bill_customer_sk#39, 42) AS hash_partition_key#44, ws_bill_customer_sk#39, ws_quantity#40, ws_list_price#41, ws_sold_date_sk#42]
Input [5]: [ws_item_sk#38, ws_bill_customer_sk#39, ws_quantity#40, ws_list_price#41, ws_sold_date_sk#42]

(74) WholeStageCodegenTransformer (23)
Input [5]: [hash_partition_key#44, ws_bill_customer_sk#39, ws_quantity#40, ws_list_price#41, ws_sold_date_sk#42]
Arguments: false

(75) VeloxResizeBatches
Input [5]: [hash_partition_key#44, ws_bill_customer_sk#39, ws_quantity#40, ws_list_price#41, ws_sold_date_sk#42]
Arguments: 1024, 2147483647, 10485760

(76) ColumnarExchange
Input [5]: [hash_partition_key#44, ws_bill_customer_sk#39, ws_quantity#40, ws_list_price#41, ws_sold_date_sk#42]
Arguments: hashpartitioning(ws_bill_customer_sk#39, 1), ENSURE_REQUIREMENTS, [ws_bill_customer_sk#39, ws_quantity#40, ws_list_price#41, ws_sold_date_sk#42], [plan_id=8], [shuffle_writer_type=hash]

(77) InputAdapter
Input [4]: [ws_bill_customer_sk#39, ws_quantity#40, ws_list_price#41, ws_sold_date_sk#42]

(78) InputIteratorTransformer
Input [4]: [ws_bill_customer_sk#39, ws_quantity#40, ws_list_price#41, ws_sold_date_sk#42]

(79) ReusedExchange [Reuses operator id: 54]
Output [3]: [c_customer_sk#45, sum#46, isEmpty#47]

(80) InputAdapter
Input [3]: [c_customer_sk#45, sum#46, isEmpty#47]

(81) InputIteratorTransformer
Input [3]: [c_customer_sk#45, sum#46, isEmpty#47]

(82) RegularHashAggregateExecTransformer
Input [3]: [c_customer_sk#45, sum#46, isEmpty#47]
Keys [1]: [c_customer_sk#45]
Functions [1]: [sum((cast(ss_quantity#48 as decimal(10,0)) * ss_sales_price#49))]
Aggregate Attributes [1]: [sum((cast(ss_quantity#48 as decimal(10,0)) * ss_sales_price#49))#33]
Results [2]: [c_customer_sk#45, sum((cast(ss_quantity#48 as decimal(10,0)) * ss_sales_price#49))#33 AS ssales#50]

(83) FilterExecTransformer
Input [2]: [c_customer_sk#45, ssales#50]
Arguments: (isnotnull(ssales#50) AND (cast(ssales#50 as decimal(38,8)) > (0.500000 * ReusedSubquery Subquery scalar-subquery#35, [id=#7])))

(84) ProjectExecTransformer
Output [1]: [c_customer_sk#45]
Input [2]: [c_customer_sk#45, ssales#50]

(85) ShuffledHashJoinExecTransformer
Left keys [1]: [ws_bill_customer_sk#39]
Right keys [1]: [c_customer_sk#45]
Join type: LeftSemi
Join condition: None

(86) ProjectExecTransformer
Output [3]: [ws_quantity#40, ws_list_price#41, ws_sold_date_sk#42]
Input [4]: [ws_bill_customer_sk#39, ws_quantity#40, ws_list_price#41, ws_sold_date_sk#42]

(87) ReusedExchange [Reuses operator id: 109]
Output [1]: [d_date_sk#51]

(88) InputAdapter
Input [1]: [d_date_sk#51]

(89) InputIteratorTransformer
Input [1]: [d_date_sk#51]

(90) BroadcastHashJoinExecTransformer
Left keys [1]: [ws_sold_date_sk#42]
Right keys [1]: [d_date_sk#51]
Join type: Inner
Join condition: None

(91) ProjectExecTransformer
Output [1]: [(cast(ws_quantity#40 as decimal(10,0)) * ws_list_price#41) AS sales#52]
Input [4]: [ws_quantity#40, ws_list_price#41, ws_sold_date_sk#42, d_date_sk#51]

(92) WholeStageCodegenTransformer (32)
Input [1]: [sales#52]
Arguments: false

(93) ColumnarUnion
Arguments: UnknownPartitioning(0)

(94) InputAdapter
Input [1]: [sales#37]

(95) InputIteratorTransformer
Input [1]: [sales#37]

(96) FlushableHashAggregateExecTransformer
Input [1]: [sales#37]
Keys: []
Functions [1]: [partial_sum(sales#37)]
Aggregate Attributes [2]: [sum#53, isEmpty#54]
Results [2]: [sum#55, isEmpty#56]

(97) WholeStageCodegenTransformer (33)
Input [2]: [sum#55, isEmpty#56]
Arguments: false

(98) VeloxResizeBatches
Input [2]: [sum#55, isEmpty#56]
Arguments: 1024, 2147483647, 10485760

(99) ColumnarExchange
Input [2]: [sum#55, isEmpty#56]
Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=9], [shuffle_writer_type=hash]

(100) InputAdapter
Input [2]: [sum#55, isEmpty#56]

(101) InputIteratorTransformer
Input [2]: [sum#55, isEmpty#56]

(102) RegularHashAggregateExecTransformer
Input [2]: [sum#55, isEmpty#56]
Keys: []
Functions [1]: [sum(sales#37)]
Aggregate Attributes [1]: [sum(sales#37)#57]
Results [1]: [sum(sales#37)#57 AS sum(sales)#58]

(103) WholeStageCodegenTransformer (34)
Input [1]: [sum(sales)#58]
Arguments: false

(104) VeloxColumnarToRow
Input [1]: [sum(sales)#58]

===== Subqueries =====

Subquery:1 Hosting operator id = 1 Hosting Expression = cs_sold_date_sk#5 IN dynamicpruning#6
ColumnarBroadcastExchange (109)
+- ^ ProjectExecTransformer (107)
   +- ^ FilterExecTransformer (106)
      +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (105)


(105) FileSourceScanExecTransformer parquet spark_catalog.default.date_dim
Output [3]: [d_date_sk#36, d_year#59, d_moy#60]
Batched: true
Location: InMemoryFileIndex [{warehouse_dir}/date_dim]
PushedFilters: [IsNotNull(d_year), IsNotNull(d_moy), EqualTo(d_year,2000), EqualTo(d_moy,2), IsNotNull(d_date_sk)]
ReadSchema: struct<d_date_sk:int,d_year:int,d_moy:int>

(106) FilterExecTransformer
Input [3]: [d_date_sk#36, d_year#59, d_moy#60]
Arguments: ((((isnotnull(d_year#59) AND isnotnull(d_moy#60)) AND (d_year#59 = 2000)) AND (d_moy#60 = 2)) AND isnotnull(d_date_sk#36))

(107) ProjectExecTransformer
Output [1]: [d_date_sk#36]
Input [3]: [d_date_sk#36, d_year#59, d_moy#60]

(108) WholeStageCodegenTransformer (1)
Input [1]: [d_date_sk#36]
Arguments: false

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

Subquery:2 Hosting operator id = 2 Hosting Expression = ss_sold_date_sk#8 IN dynamicpruning#9
ColumnarBroadcastExchange (114)
+- ^ ProjectExecTransformer (112)
   +- ^ FilterExecTransformer (111)
      +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (110)


(110) FileSourceScanExecTransformer parquet spark_catalog.default.date_dim
Output [3]: [d_date_sk#10, d_date#11, d_year#61]
Batched: true
Location: InMemoryFileIndex [{warehouse_dir}/date_dim]
PushedFilters: [In(d_year, [2000,2001,2002,2003]), IsNotNull(d_date_sk)]
ReadSchema: struct<d_date_sk:int,d_date:date,d_year:int>

(111) FilterExecTransformer
Input [3]: [d_date_sk#10, d_date#11, d_year#61]
Arguments: (d_year#61 IN (2000,2001,2002,2003) AND isnotnull(d_date_sk#10))

(112) ProjectExecTransformer
Output [2]: [d_date_sk#10, d_date#11]
Input [3]: [d_date_sk#10, d_date#11, d_year#61]

(113) WholeStageCodegenTransformer (2)
Input [2]: [d_date_sk#10, d_date#11]
Arguments: false

(114) ColumnarBroadcastExchange
Input [2]: [d_date_sk#10, d_date#11]
Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=11]

Subquery:3 Hosting operator id = 58 Hosting Expression = Subquery scalar-subquery#35, [id=#7]
VeloxColumnarToRow (138)
+- ^ RegularHashAggregateExecTransformer (136)
   +- ^ ProjectExecTransformer (135)
      +- ^ RegularHashAggregateExecTransformer (134)
         +- ^ InputIteratorTransformer (133)
            +- ColumnarExchange (131)
               +- VeloxResizeBatches (130)
                  +- ^ ProjectExecTransformer (128)
                     +- ^ FlushableHashAggregateExecTransformer (127)
                        +- ^ ProjectExecTransformer (126)
                           +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (125)
                              :- ^ ProjectExecTransformer (121)
                              :  +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (120)
                              :     :- ^ FilterExecTransformer (116)
                              :     :  +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.store_sales (115)
                              :     +- ^ InputIteratorTransformer (119)
                              :        +- ReusedExchange (117)
                              +- ^ InputIteratorTransformer (124)
                                 +- ReusedExchange (122)


(115) FileSourceScanExecTransformer parquet spark_catalog.default.store_sales
Output [4]: [ss_customer_sk#62, ss_quantity#63, ss_sales_price#64, ss_sold_date_sk#65]
Batched: true
Location: InMemoryFileIndex []
PartitionFilters: [isnotnull(ss_sold_date_sk#65), dynamicpruningexpression(ss_sold_date_sk#65 IN dynamicpruning#66)]
PushedFilters: [IsNotNull(ss_customer_sk)]
ReadSchema: struct<ss_customer_sk:int,ss_quantity:int,ss_sales_price:decimal(7,2)>

(116) FilterExecTransformer
Input [4]: [ss_customer_sk#62, ss_quantity#63, ss_sales_price#64, ss_sold_date_sk#65]
Arguments: isnotnull(ss_customer_sk#62)

(117) ReusedExchange [Reuses operator id: 45]
Output [1]: [c_customer_sk#67]

(118) InputAdapter
Input [1]: [c_customer_sk#67]

(119) InputIteratorTransformer
Input [1]: [c_customer_sk#67]

(120) BroadcastHashJoinExecTransformer
Left keys [1]: [ss_customer_sk#62]
Right keys [1]: [c_customer_sk#67]
Join type: Inner
Join condition: None

(121) ProjectExecTransformer
Output [4]: [ss_quantity#63, ss_sales_price#64, ss_sold_date_sk#65, c_customer_sk#67]
Input [5]: [ss_customer_sk#62, ss_quantity#63, ss_sales_price#64, ss_sold_date_sk#65, c_customer_sk#67]

(122) ReusedExchange [Reuses operator id: 143]
Output [1]: [d_date_sk#68]

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

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

(125) BroadcastHashJoinExecTransformer
Left keys [1]: [ss_sold_date_sk#65]
Right keys [1]: [d_date_sk#68]
Join type: Inner
Join condition: None

(126) ProjectExecTransformer
Output [2]: [c_customer_sk#67, (cast(ss_quantity#63 as decimal(10,0)) * ss_sales_price#64) AS _pre_2#69]
Input [5]: [ss_quantity#63, ss_sales_price#64, ss_sold_date_sk#65, c_customer_sk#67, d_date_sk#68]

(127) FlushableHashAggregateExecTransformer
Input [2]: [c_customer_sk#67, _pre_2#69]
Keys [1]: [c_customer_sk#67]
Functions [1]: [partial_sum(_pre_2#69)]
Aggregate Attributes [2]: [sum#70, isEmpty#71]
Results [3]: [c_customer_sk#67, sum#72, isEmpty#73]

(128) ProjectExecTransformer
Output [4]: [hash(c_customer_sk#67, 42) AS hash_partition_key#74, c_customer_sk#67, sum#72, isEmpty#73]
Input [3]: [c_customer_sk#67, sum#72, isEmpty#73]

(129) WholeStageCodegenTransformer (11)
Input [4]: [hash_partition_key#74, c_customer_sk#67, sum#72, isEmpty#73]
Arguments: false

(130) VeloxResizeBatches
Input [4]: [hash_partition_key#74, c_customer_sk#67, sum#72, isEmpty#73]
Arguments: 1024, 2147483647, 10485760

(131) ColumnarExchange
Input [4]: [hash_partition_key#74, c_customer_sk#67, sum#72, isEmpty#73]
Arguments: hashpartitioning(c_customer_sk#67, 1), ENSURE_REQUIREMENTS, [c_customer_sk#67, sum#72, isEmpty#73], [plan_id=12], [shuffle_writer_type=hash]

(132) InputAdapter
Input [3]: [c_customer_sk#67, sum#72, isEmpty#73]

(133) InputIteratorTransformer
Input [3]: [c_customer_sk#67, sum#72, isEmpty#73]

(134) RegularHashAggregateExecTransformer
Input [3]: [c_customer_sk#67, sum#72, isEmpty#73]
Keys [1]: [c_customer_sk#67]
Functions [1]: [sum((cast(ss_quantity#63 as decimal(10,0)) * ss_sales_price#64))]
Aggregate Attributes [1]: [sum((cast(ss_quantity#63 as decimal(10,0)) * ss_sales_price#64))#75]
Results [2]: [c_customer_sk#67, sum((cast(ss_quantity#63 as decimal(10,0)) * ss_sales_price#64))#75]

(135) ProjectExecTransformer
Output [1]: [sum((cast(ss_quantity#63 as decimal(10,0)) * ss_sales_price#64))#75 AS csales#76]
Input [2]: [c_customer_sk#67, sum((cast(ss_quantity#63 as decimal(10,0)) * ss_sales_price#64))#75]

(136) RegularHashAggregateExecTransformer
Input [1]: [csales#76]
Keys: []
Functions [1]: [max(csales#76)]
Aggregate Attributes [1]: [max(csales#76)#77]
Results [1]: [max(csales#76)#77 AS tpcds_cmax#78]

(137) WholeStageCodegenTransformer (12)
Input [1]: [tpcds_cmax#78]
Arguments: false

(138) VeloxColumnarToRow
Input [1]: [tpcds_cmax#78]

Subquery:4 Hosting operator id = 115 Hosting Expression = ss_sold_date_sk#65 IN dynamicpruning#66
ColumnarBroadcastExchange (143)
+- ^ ProjectExecTransformer (141)
   +- ^ FilterExecTransformer (140)
      +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (139)


(139) FileSourceScanExecTransformer parquet spark_catalog.default.date_dim
Output [2]: [d_date_sk#68, d_year#79]
Batched: true
Location: InMemoryFileIndex [{warehouse_dir}/date_dim]
PushedFilters: [In(d_year, [2000,2001,2002,2003]), IsNotNull(d_date_sk)]
ReadSchema: struct<d_date_sk:int,d_year:int>

(140) FilterExecTransformer
Input [2]: [d_date_sk#68, d_year#79]
Arguments: (d_year#79 IN (2000,2001,2002,2003) AND isnotnull(d_date_sk#68))

(141) ProjectExecTransformer
Output [1]: [d_date_sk#68]
Input [2]: [d_date_sk#68, d_year#79]

(142) WholeStageCodegenTransformer (8)
Input [1]: [d_date_sk#68]
Arguments: false

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

Subquery:5 Hosting operator id = 68 Hosting Expression = ws_sold_date_sk#42 IN dynamicpruning#6

Subquery:6 Hosting operator id = 83 Hosting Expression = ReusedSubquery Subquery scalar-subquery#35, [id=#7]


