== Physical Plan ==
VeloxColumnarToRow (126)
+- ^ RegularHashAggregateExecTransformer (124)
   +- ^ InputIteratorTransformer (123)
      +- ColumnarExchange (121)
         +- VeloxResizeBatches (120)
            +- ^ FlushableHashAggregateExecTransformer (118)
               +- ^ InputIteratorTransformer (117)
                  +- ColumnarUnion (115)
                     :- ^ ProjectExecTransformer (68)
                     :  +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (67)
                     :     :- ^ ProjectExecTransformer (63)
                     :     :  +- ^ ShuffledHashJoinExecTransformer LeftSemi BuildRight (62)
                     :     :     :- ^ InputIteratorTransformer (40)
                     :     :     :  +- ColumnarExchange (38)
                     :     :     :     +- VeloxResizeBatches (37)
                     :     :     :        +- ^ ProjectExecTransformer (35)
                     :     :     :           +- ^ ShuffledHashJoinExecTransformer LeftSemi BuildRight (34)
                     :     :     :              :- ^ InputIteratorTransformer (7)
                     :     :     :              :  +- ColumnarExchange (5)
                     :     :     :              :     +- VeloxResizeBatches (4)
                     :     :     :              :        +- ^ ProjectExecTransformer (2)
                     :     :     :              :           +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.catalog_sales (1)
                     :     :     :              +- ^ ProjectExecTransformer (33)
                     :     :     :                 +- ^ FilterExecTransformer (32)
                     :     :     :                    +- ^ ProjectExecTransformer (31)
                     :     :     :                       +- ^ RegularHashAggregateExecTransformer (30)
                     :     :     :                          +- ^ ProjectExecTransformer (29)
                     :     :     :                             +- ^ ShuffledHashJoinExecTransformer Inner BuildRight (28)
                     :     :     :                                :- ^ InputIteratorTransformer (19)
                     :     :     :                                :  +- ColumnarExchange (17)
                     :     :     :                                :     +- VeloxResizeBatches (16)
                     :     :     :                                :        +- ^ ProjectExecTransformer (14)
                     :     :     :                                :           +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (13)
                     :     :     :                                :              :- ^ FilterExecTransformer (9)
                     :     :     :                                :              :  +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.store_sales (8)
                     :     :     :                                :              +- ^ InputIteratorTransformer (12)
                     :     :     :                                :                 +- ReusedExchange (10)
                     :     :     :                                +- ^ InputIteratorTransformer (27)
                     :     :     :                                   +- ColumnarExchange (25)
                     :     :     :                                      +- VeloxResizeBatches (24)
                     :     :     :                                         +- ^ ProjectExecTransformer (22)
                     :     :     :                                            +- ^ FilterExecTransformer (21)
                     :     :     :                                               +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.item (20)
                     :     :     +- ^ ProjectExecTransformer (61)
                     :     :        +- ^ FilterExecTransformer (60)
                     :     :           +- ^ RegularHashAggregateExecTransformer (59)
                     :     :              +- ^ ProjectExecTransformer (58)
                     :     :                 +- ^ ShuffledHashJoinExecTransformer Inner BuildRight (57)
                     :     :                    :- ^ InputIteratorTransformer (48)
                     :     :                    :  +- ColumnarExchange (46)
                     :     :                    :     +- VeloxResizeBatches (45)
                     :     :                    :        +- ^ ProjectExecTransformer (43)
                     :     :                    :           +- ^ FilterExecTransformer (42)
                     :     :                    :              +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.store_sales (41)
                     :     :                    +- ^ InputIteratorTransformer (56)
                     :     :                       +- ColumnarExchange (54)
                     :     :                          +- VeloxResizeBatches (53)
                     :     :                             +- ^ ProjectExecTransformer (51)
                     :     :                                +- ^ FilterExecTransformer (50)
                     :     :                                   +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.customer (49)
                     :     +- ^ InputIteratorTransformer (66)
                     :        +- ReusedExchange (64)
                     +- ^ ProjectExecTransformer (113)
                        +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (112)
                           :- ^ ProjectExecTransformer (108)
                           :  +- ^ ShuffledHashJoinExecTransformer LeftSemi BuildRight (107)
                           :     :- ^ InputIteratorTransformer (95)
                           :     :  +- ColumnarExchange (93)
                           :     :     +- VeloxResizeBatches (92)
                           :     :        +- ^ ProjectExecTransformer (90)
                           :     :           +- ^ ShuffledHashJoinExecTransformer LeftSemi BuildRight (89)
                           :     :              :- ^ InputIteratorTransformer (76)
                           :     :              :  +- ColumnarExchange (74)
                           :     :              :     +- VeloxResizeBatches (73)
                           :     :              :        +- ^ ProjectExecTransformer (71)
                           :     :              :           +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.web_sales (70)
                           :     :              +- ^ ProjectExecTransformer (88)
                           :     :                 +- ^ FilterExecTransformer (87)
                           :     :                    +- ^ ProjectExecTransformer (86)
                           :     :                       +- ^ RegularHashAggregateExecTransformer (85)
                           :     :                          +- ^ ProjectExecTransformer (84)
                           :     :                             +- ^ ShuffledHashJoinExecTransformer Inner BuildRight (83)
                           :     :                                :- ^ InputIteratorTransformer (79)
                           :     :                                :  +- ReusedExchange (77)
                           :     :                                +- ^ InputIteratorTransformer (82)
                           :     :                                   +- ReusedExchange (80)
                           :     +- ^ ProjectExecTransformer (106)
                           :        +- ^ FilterExecTransformer (105)
                           :           +- ^ RegularHashAggregateExecTransformer (104)
                           :              +- ^ ProjectExecTransformer (103)
                           :                 +- ^ ShuffledHashJoinExecTransformer Inner BuildRight (102)
                           :                    :- ^ InputIteratorTransformer (98)
                           :                    :  +- ReusedExchange (96)
                           :                    +- ^ InputIteratorTransformer (101)
                           :                       +- ReusedExchange (99)
                           +- ^ InputIteratorTransformer (111)
                              +- ReusedExchange (109)


(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) ProjectExecTransformer
Output [6]: [hash(cs_item_sk#2, 42) AS hash_partition_key#7, cs_bill_customer_sk#1, cs_item_sk#2, 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]

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

(4) VeloxResizeBatches
Input [6]: [hash_partition_key#7, cs_bill_customer_sk#1, cs_item_sk#2, cs_quantity#3, cs_list_price#4, cs_sold_date_sk#5]
Arguments: 1024, 2147483647, 10485760

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

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

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

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

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

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

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

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

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

(14) ProjectExecTransformer
Output [3]: [hash(ss_item_sk#8, 42) AS hash_partition_key#13, ss_item_sk#8, d_date#12]
Input [4]: [ss_item_sk#8, ss_sold_date_sk#9, d_date_sk#11, d_date#12]

(15) WholeStageCodegenTransformer (5)
Input [3]: [hash_partition_key#13, ss_item_sk#8, d_date#12]
Arguments: false

(16) VeloxResizeBatches
Input [3]: [hash_partition_key#13, ss_item_sk#8, d_date#12]
Arguments: 1024, 2147483647, 10485760

(17) ColumnarExchange
Input [3]: [hash_partition_key#13, ss_item_sk#8, d_date#12]
Arguments: hashpartitioning(ss_item_sk#8, 1), ENSURE_REQUIREMENTS, [ss_item_sk#8, d_date#12], [plan_id=2], [shuffle_writer_type=hash]

(18) InputAdapter
Input [2]: [ss_item_sk#8, d_date#12]

(19) InputIteratorTransformer
Input [2]: [ss_item_sk#8, d_date#12]

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

(21) FilterExecTransformer
Input [2]: [i_item_sk#14, i_item_desc#15]
Arguments: isnotnull(i_item_sk#14)

(22) ProjectExecTransformer
Output [3]: [hash(i_item_sk#14, 42) AS hash_partition_key#16, i_item_sk#14, i_item_desc#15]
Input [2]: [i_item_sk#14, i_item_desc#15]

(23) WholeStageCodegenTransformer (6)
Input [3]: [hash_partition_key#16, i_item_sk#14, i_item_desc#15]
Arguments: false

(24) VeloxResizeBatches
Input [3]: [hash_partition_key#16, i_item_sk#14, i_item_desc#15]
Arguments: 1024, 2147483647, 10485760

(25) ColumnarExchange
Input [3]: [hash_partition_key#16, i_item_sk#14, i_item_desc#15]
Arguments: hashpartitioning(i_item_sk#14, 1), ENSURE_REQUIREMENTS, [i_item_sk#14, i_item_desc#15], [plan_id=3], [shuffle_writer_type=hash]

(26) InputAdapter
Input [2]: [i_item_sk#14, i_item_desc#15]

(27) InputIteratorTransformer
Input [2]: [i_item_sk#14, i_item_desc#15]

(28) ShuffledHashJoinExecTransformer
Left keys [1]: [ss_item_sk#8]
Right keys [1]: [i_item_sk#14]
Join type: Inner
Join condition: None

(29) ProjectExecTransformer
Output [3]: [d_date#12, i_item_sk#14, substr(i_item_desc#15, 1, 30) AS _groupingexpression#17]
Input [4]: [ss_item_sk#8, d_date#12, i_item_sk#14, i_item_desc#15]

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

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

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

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

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

(35) 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]

(36) 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

(37) 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

(38) 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]

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

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

(41) 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)>

(42) 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)

(43) ProjectExecTransformer
Output [4]: [hash(ss_customer_sk#22, 42) AS hash_partition_key#26, 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]

(44) WholeStageCodegenTransformer (13)
Input [4]: [hash_partition_key#26, ss_customer_sk#22, ss_quantity#23, ss_sales_price#24]
Arguments: false

(45) VeloxResizeBatches
Input [4]: [hash_partition_key#26, ss_customer_sk#22, ss_quantity#23, ss_sales_price#24]
Arguments: 1024, 2147483647, 10485760

(46) ColumnarExchange
Input [4]: [hash_partition_key#26, ss_customer_sk#22, ss_quantity#23, ss_sales_price#24]
Arguments: hashpartitioning(ss_customer_sk#22, 1), ENSURE_REQUIREMENTS, [ss_customer_sk#22, ss_quantity#23, ss_sales_price#24], [plan_id=5], [shuffle_writer_type=hash]

(47) InputAdapter
Input [3]: [ss_customer_sk#22, ss_quantity#23, ss_sales_price#24]

(48) InputIteratorTransformer
Input [3]: [ss_customer_sk#22, ss_quantity#23, ss_sales_price#24]

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

(50) FilterExecTransformer
Input [1]: [c_customer_sk#27]
Arguments: isnotnull(c_customer_sk#27)

(51) ProjectExecTransformer
Output [2]: [hash(c_customer_sk#27, 42) AS hash_partition_key#28, c_customer_sk#27]
Input [1]: [c_customer_sk#27]

(52) WholeStageCodegenTransformer (14)
Input [2]: [hash_partition_key#28, c_customer_sk#27]
Arguments: false

(53) VeloxResizeBatches
Input [2]: [hash_partition_key#28, c_customer_sk#27]
Arguments: 1024, 2147483647, 10485760

(54) ColumnarExchange
Input [2]: [hash_partition_key#28, c_customer_sk#27]
Arguments: hashpartitioning(c_customer_sk#27, 1), ENSURE_REQUIREMENTS, [c_customer_sk#27], [plan_id=6], [shuffle_writer_type=hash]

(55) InputAdapter
Input [1]: [c_customer_sk#27]

(56) InputIteratorTransformer
Input [1]: [c_customer_sk#27]

(57) ShuffledHashJoinExecTransformer
Left keys [1]: [ss_customer_sk#22]
Right keys [1]: [c_customer_sk#27]
Join type: Inner
Join condition: None

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

(59) RegularHashAggregateExecTransformer
Input [2]: [c_customer_sk#27, _pre_1#29]
Keys [1]: [c_customer_sk#27]
Functions [1]: [sum(_pre_1#29)]
Aggregate Attributes [1]: [sum((cast(ss_quantity#23 as decimal(10,0)) * ss_sales_price#24))#30]
Results [2]: [c_customer_sk#27, sum((cast(ss_quantity#23 as decimal(10,0)) * ss_sales_price#24))#30 AS ssales#31]

(60) FilterExecTransformer
Input [2]: [c_customer_sk#27, ssales#31]
Arguments: (isnotnull(ssales#31) AND (cast(ssales#31 as decimal(38,8)) > (0.500000 * Subquery scalar-subquery#32, [id=#7])))

(61) ProjectExecTransformer
Output [1]: [c_customer_sk#27]
Input [2]: [c_customer_sk#27, ssales#31]

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

(63) 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]

(64) ReusedExchange [Reuses operator id: 131]
Output [1]: [d_date_sk#33]

(65) InputAdapter
Input [1]: [d_date_sk#33]

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

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

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

(69) WholeStageCodegenTransformer (16)
Input [1]: [sales#34]
Arguments: false

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

(71) ProjectExecTransformer
Output [6]: [hash(ws_item_sk#35, 42) AS hash_partition_key#40, ws_item_sk#35, ws_bill_customer_sk#36, ws_quantity#37, ws_list_price#38, ws_sold_date_sk#39]
Input [5]: [ws_item_sk#35, ws_bill_customer_sk#36, ws_quantity#37, ws_list_price#38, ws_sold_date_sk#39]

(72) WholeStageCodegenTransformer (18)
Input [6]: [hash_partition_key#40, ws_item_sk#35, ws_bill_customer_sk#36, ws_quantity#37, ws_list_price#38, ws_sold_date_sk#39]
Arguments: false

(73) VeloxResizeBatches
Input [6]: [hash_partition_key#40, ws_item_sk#35, ws_bill_customer_sk#36, ws_quantity#37, ws_list_price#38, ws_sold_date_sk#39]
Arguments: 1024, 2147483647, 10485760

(74) ColumnarExchange
Input [6]: [hash_partition_key#40, ws_item_sk#35, ws_bill_customer_sk#36, ws_quantity#37, ws_list_price#38, ws_sold_date_sk#39]
Arguments: hashpartitioning(ws_item_sk#35, 1), ENSURE_REQUIREMENTS, [ws_item_sk#35, ws_bill_customer_sk#36, ws_quantity#37, ws_list_price#38, ws_sold_date_sk#39], [plan_id=8], [shuffle_writer_type=hash]

(75) InputAdapter
Input [5]: [ws_item_sk#35, ws_bill_customer_sk#36, ws_quantity#37, ws_list_price#38, ws_sold_date_sk#39]

(76) InputIteratorTransformer
Input [5]: [ws_item_sk#35, ws_bill_customer_sk#36, ws_quantity#37, ws_list_price#38, ws_sold_date_sk#39]

(77) ReusedExchange [Reuses operator id: 17]
Output [2]: [ss_item_sk#41, d_date#42]

(78) InputAdapter
Input [2]: [ss_item_sk#41, d_date#42]

(79) InputIteratorTransformer
Input [2]: [ss_item_sk#41, d_date#42]

(80) ReusedExchange [Reuses operator id: 25]
Output [2]: [i_item_sk#43, i_item_desc#44]

(81) InputAdapter
Input [2]: [i_item_sk#43, i_item_desc#44]

(82) InputIteratorTransformer
Input [2]: [i_item_sk#43, i_item_desc#44]

(83) ShuffledHashJoinExecTransformer
Left keys [1]: [ss_item_sk#41]
Right keys [1]: [i_item_sk#43]
Join type: Inner
Join condition: None

(84) ProjectExecTransformer
Output [3]: [d_date#42, i_item_sk#43, substr(i_item_desc#44, 1, 30) AS _groupingexpression#45]
Input [4]: [ss_item_sk#41, d_date#42, i_item_sk#43, i_item_desc#44]

(85) RegularHashAggregateExecTransformer
Input [3]: [d_date#42, i_item_sk#43, _groupingexpression#45]
Keys [3]: [_groupingexpression#45, i_item_sk#43, d_date#42]
Functions [1]: [count(1)]
Aggregate Attributes [1]: [count(1)#18]
Results [4]: [_groupingexpression#45, i_item_sk#43, d_date#42, count(1)#18]

(86) ProjectExecTransformer
Output [2]: [i_item_sk#43 AS item_sk#46, count(1)#18 AS cnt#47]
Input [4]: [_groupingexpression#45, i_item_sk#43, d_date#42, count(1)#18]

(87) FilterExecTransformer
Input [2]: [item_sk#46, cnt#47]
Arguments: (cnt#47 > 4)

(88) ProjectExecTransformer
Output [1]: [item_sk#46]
Input [2]: [item_sk#46, cnt#47]

(89) ShuffledHashJoinExecTransformer
Left keys [1]: [ws_item_sk#35]
Right keys [1]: [item_sk#46]
Join type: LeftSemi
Join condition: None

(90) ProjectExecTransformer
Output [5]: [hash(ws_bill_customer_sk#36, 42) AS hash_partition_key#48, ws_bill_customer_sk#36, ws_quantity#37, ws_list_price#38, ws_sold_date_sk#39]
Input [5]: [ws_item_sk#35, ws_bill_customer_sk#36, ws_quantity#37, ws_list_price#38, ws_sold_date_sk#39]

(91) WholeStageCodegenTransformer (23)
Input [5]: [hash_partition_key#48, ws_bill_customer_sk#36, ws_quantity#37, ws_list_price#38, ws_sold_date_sk#39]
Arguments: false

(92) VeloxResizeBatches
Input [5]: [hash_partition_key#48, ws_bill_customer_sk#36, ws_quantity#37, ws_list_price#38, ws_sold_date_sk#39]
Arguments: 1024, 2147483647, 10485760

(93) ColumnarExchange
Input [5]: [hash_partition_key#48, ws_bill_customer_sk#36, ws_quantity#37, ws_list_price#38, ws_sold_date_sk#39]
Arguments: hashpartitioning(ws_bill_customer_sk#36, 1), ENSURE_REQUIREMENTS, [ws_bill_customer_sk#36, ws_quantity#37, ws_list_price#38, ws_sold_date_sk#39], [plan_id=9], [shuffle_writer_type=hash]

(94) InputAdapter
Input [4]: [ws_bill_customer_sk#36, ws_quantity#37, ws_list_price#38, ws_sold_date_sk#39]

(95) InputIteratorTransformer
Input [4]: [ws_bill_customer_sk#36, ws_quantity#37, ws_list_price#38, ws_sold_date_sk#39]

(96) ReusedExchange [Reuses operator id: 46]
Output [3]: [ss_customer_sk#49, ss_quantity#50, ss_sales_price#51]

(97) InputAdapter
Input [3]: [ss_customer_sk#49, ss_quantity#50, ss_sales_price#51]

(98) InputIteratorTransformer
Input [3]: [ss_customer_sk#49, ss_quantity#50, ss_sales_price#51]

(99) ReusedExchange [Reuses operator id: 54]
Output [1]: [c_customer_sk#52]

(100) InputAdapter
Input [1]: [c_customer_sk#52]

(101) InputIteratorTransformer
Input [1]: [c_customer_sk#52]

(102) ShuffledHashJoinExecTransformer
Left keys [1]: [ss_customer_sk#49]
Right keys [1]: [c_customer_sk#52]
Join type: Inner
Join condition: None

(103) ProjectExecTransformer
Output [2]: [c_customer_sk#52, (cast(ss_quantity#50 as decimal(10,0)) * ss_sales_price#51) AS _pre_2#53]
Input [4]: [ss_customer_sk#49, ss_quantity#50, ss_sales_price#51, c_customer_sk#52]

(104) RegularHashAggregateExecTransformer
Input [2]: [c_customer_sk#52, _pre_2#53]
Keys [1]: [c_customer_sk#52]
Functions [1]: [sum(_pre_2#53)]
Aggregate Attributes [1]: [sum((cast(ss_quantity#50 as decimal(10,0)) * ss_sales_price#51))#30]
Results [2]: [c_customer_sk#52, sum((cast(ss_quantity#50 as decimal(10,0)) * ss_sales_price#51))#30 AS ssales#54]

(105) FilterExecTransformer
Input [2]: [c_customer_sk#52, ssales#54]
Arguments: (isnotnull(ssales#54) AND (cast(ssales#54 as decimal(38,8)) > (0.500000 * ReusedSubquery Subquery scalar-subquery#32, [id=#7])))

(106) ProjectExecTransformer
Output [1]: [c_customer_sk#52]
Input [2]: [c_customer_sk#52, ssales#54]

(107) ShuffledHashJoinExecTransformer
Left keys [1]: [ws_bill_customer_sk#36]
Right keys [1]: [c_customer_sk#52]
Join type: LeftSemi
Join condition: None

(108) ProjectExecTransformer
Output [3]: [ws_quantity#37, ws_list_price#38, ws_sold_date_sk#39]
Input [4]: [ws_bill_customer_sk#36, ws_quantity#37, ws_list_price#38, ws_sold_date_sk#39]

(109) ReusedExchange [Reuses operator id: 131]
Output [1]: [d_date_sk#55]

(110) InputAdapter
Input [1]: [d_date_sk#55]

(111) InputIteratorTransformer
Input [1]: [d_date_sk#55]

(112) BroadcastHashJoinExecTransformer
Left keys [1]: [ws_sold_date_sk#39]
Right keys [1]: [d_date_sk#55]
Join type: Inner
Join condition: None

(113) ProjectExecTransformer
Output [1]: [(cast(ws_quantity#37 as decimal(10,0)) * ws_list_price#38) AS sales#56]
Input [4]: [ws_quantity#37, ws_list_price#38, ws_sold_date_sk#39, d_date_sk#55]

(114) WholeStageCodegenTransformer (32)
Input [1]: [sales#56]
Arguments: false

(115) ColumnarUnion
Arguments: UnknownPartitioning(0)

(116) InputAdapter
Input [1]: [sales#34]

(117) InputIteratorTransformer
Input [1]: [sales#34]

(118) FlushableHashAggregateExecTransformer
Input [1]: [sales#34]
Keys: []
Functions [1]: [partial_sum(sales#34)]
Aggregate Attributes [2]: [sum#57, isEmpty#58]
Results [2]: [sum#59, isEmpty#60]

(119) WholeStageCodegenTransformer (33)
Input [2]: [sum#59, isEmpty#60]
Arguments: false

(120) VeloxResizeBatches
Input [2]: [sum#59, isEmpty#60]
Arguments: 1024, 2147483647, 10485760

(121) ColumnarExchange
Input [2]: [sum#59, isEmpty#60]
Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=10], [shuffle_writer_type=hash]

(122) InputAdapter
Input [2]: [sum#59, isEmpty#60]

(123) InputIteratorTransformer
Input [2]: [sum#59, isEmpty#60]

(124) RegularHashAggregateExecTransformer
Input [2]: [sum#59, isEmpty#60]
Keys: []
Functions [1]: [sum(sales#34)]
Aggregate Attributes [1]: [sum(sales#34)#61]
Results [1]: [sum(sales#34)#61 AS sum(sales)#62]

(125) WholeStageCodegenTransformer (34)
Input [1]: [sum(sales)#62]
Arguments: false

(126) VeloxColumnarToRow
Input [1]: [sum(sales)#62]

===== Subqueries =====

Subquery:1 Hosting operator id = 1 Hosting Expression = cs_sold_date_sk#5 IN dynamicpruning#6
ColumnarBroadcastExchange (131)
+- ^ ProjectExecTransformer (129)
   +- ^ FilterExecTransformer (128)
      +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (127)


(127) FileSourceScanExecTransformer parquet spark_catalog.default.date_dim
Output [3]: [d_date_sk#33, d_year#63, d_moy#64]
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>

(128) FilterExecTransformer
Input [3]: [d_date_sk#33, d_year#63, d_moy#64]
Arguments: ((((isnotnull(d_year#63) AND isnotnull(d_moy#64)) AND (d_year#63 = 2000)) AND (d_moy#64 = 2)) AND isnotnull(d_date_sk#33))

(129) ProjectExecTransformer
Output [1]: [d_date_sk#33]
Input [3]: [d_date_sk#33, d_year#63, d_moy#64]

(130) WholeStageCodegenTransformer (1)
Input [1]: [d_date_sk#33]
Arguments: false

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

Subquery:2 Hosting operator id = 8 Hosting Expression = ss_sold_date_sk#9 IN dynamicpruning#10
ColumnarBroadcastExchange (136)
+- ^ ProjectExecTransformer (134)
   +- ^ FilterExecTransformer (133)
      +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (132)


(132) FileSourceScanExecTransformer parquet spark_catalog.default.date_dim
Output [3]: [d_date_sk#11, d_date#12, d_year#65]
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>

(133) FilterExecTransformer
Input [3]: [d_date_sk#11, d_date#12, d_year#65]
Arguments: (d_year#65 IN (2000,2001,2002,2003) AND isnotnull(d_date_sk#11))

(134) ProjectExecTransformer
Output [2]: [d_date_sk#11, d_date#12]
Input [3]: [d_date_sk#11, d_date#12, d_year#65]

(135) WholeStageCodegenTransformer (3)
Input [2]: [d_date_sk#11, d_date#12]
Arguments: false

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

Subquery:3 Hosting operator id = 60 Hosting Expression = Subquery scalar-subquery#32, [id=#7]
VeloxColumnarToRow (158)
+- ^ RegularHashAggregateExecTransformer (156)
   +- ^ ProjectExecTransformer (155)
      +- ^ RegularHashAggregateExecTransformer (154)
         +- ^ ProjectExecTransformer (153)
            +- ^ ShuffledHashJoinExecTransformer Inner BuildRight (152)
               :- ^ InputIteratorTransformer (148)
               :  +- ColumnarExchange (146)
               :     +- VeloxResizeBatches (145)
               :        +- ^ ProjectExecTransformer (143)
               :           +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (142)
               :              :- ^ FilterExecTransformer (138)
               :              :  +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.store_sales (137)
               :              +- ^ InputIteratorTransformer (141)
               :                 +- ReusedExchange (139)
               +- ^ InputIteratorTransformer (151)
                  +- ReusedExchange (149)


(137) FileSourceScanExecTransformer parquet spark_catalog.default.store_sales
Output [4]: [ss_customer_sk#66, ss_quantity#67, ss_sales_price#68, ss_sold_date_sk#69]
Batched: true
Location: InMemoryFileIndex []
PartitionFilters: [isnotnull(ss_sold_date_sk#69), dynamicpruningexpression(ss_sold_date_sk#69 IN dynamicpruning#70)]
PushedFilters: [IsNotNull(ss_customer_sk)]
ReadSchema: struct<ss_customer_sk:int,ss_quantity:int,ss_sales_price:decimal(7,2)>

(138) FilterExecTransformer
Input [4]: [ss_customer_sk#66, ss_quantity#67, ss_sales_price#68, ss_sold_date_sk#69]
Arguments: isnotnull(ss_customer_sk#66)

(139) ReusedExchange [Reuses operator id: 163]
Output [1]: [d_date_sk#71]

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

(141) InputIteratorTransformer
Input [1]: [d_date_sk#71]

(142) BroadcastHashJoinExecTransformer
Left keys [1]: [ss_sold_date_sk#69]
Right keys [1]: [d_date_sk#71]
Join type: Inner
Join condition: None

(143) ProjectExecTransformer
Output [4]: [hash(ss_customer_sk#66, 42) AS hash_partition_key#72, ss_customer_sk#66, ss_quantity#67, ss_sales_price#68]
Input [5]: [ss_customer_sk#66, ss_quantity#67, ss_sales_price#68, ss_sold_date_sk#69, d_date_sk#71]

(144) WholeStageCodegenTransformer (10)
Input [4]: [hash_partition_key#72, ss_customer_sk#66, ss_quantity#67, ss_sales_price#68]
Arguments: false

(145) VeloxResizeBatches
Input [4]: [hash_partition_key#72, ss_customer_sk#66, ss_quantity#67, ss_sales_price#68]
Arguments: 1024, 2147483647, 10485760

(146) ColumnarExchange
Input [4]: [hash_partition_key#72, ss_customer_sk#66, ss_quantity#67, ss_sales_price#68]
Arguments: hashpartitioning(ss_customer_sk#66, 1), ENSURE_REQUIREMENTS, [ss_customer_sk#66, ss_quantity#67, ss_sales_price#68], [plan_id=13], [shuffle_writer_type=hash]

(147) InputAdapter
Input [3]: [ss_customer_sk#66, ss_quantity#67, ss_sales_price#68]

(148) InputIteratorTransformer
Input [3]: [ss_customer_sk#66, ss_quantity#67, ss_sales_price#68]

(149) ReusedExchange [Reuses operator id: 54]
Output [1]: [c_customer_sk#73]

(150) InputAdapter
Input [1]: [c_customer_sk#73]

(151) InputIteratorTransformer
Input [1]: [c_customer_sk#73]

(152) ShuffledHashJoinExecTransformer
Left keys [1]: [ss_customer_sk#66]
Right keys [1]: [c_customer_sk#73]
Join type: Inner
Join condition: None

(153) ProjectExecTransformer
Output [2]: [c_customer_sk#73, (cast(ss_quantity#67 as decimal(10,0)) * ss_sales_price#68) AS _pre_3#74]
Input [4]: [ss_customer_sk#66, ss_quantity#67, ss_sales_price#68, c_customer_sk#73]

(154) RegularHashAggregateExecTransformer
Input [2]: [c_customer_sk#73, _pre_3#74]
Keys [1]: [c_customer_sk#73]
Functions [1]: [sum(_pre_3#74)]
Aggregate Attributes [1]: [sum((cast(ss_quantity#67 as decimal(10,0)) * ss_sales_price#68))#75]
Results [2]: [c_customer_sk#73, sum((cast(ss_quantity#67 as decimal(10,0)) * ss_sales_price#68))#75]

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

(156) 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]

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

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

Subquery:4 Hosting operator id = 137 Hosting Expression = ss_sold_date_sk#69 IN dynamicpruning#70
ColumnarBroadcastExchange (163)
+- ^ ProjectExecTransformer (161)
   +- ^ FilterExecTransformer (160)
      +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (159)


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

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

(161) ProjectExecTransformer
Output [1]: [d_date_sk#71]
Input [2]: [d_date_sk#71, d_year#79]

(162) WholeStageCodegenTransformer (8)
Input [1]: [d_date_sk#71]
Arguments: false

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

Subquery:5 Hosting operator id = 70 Hosting Expression = ws_sold_date_sk#39 IN dynamicpruning#6

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


