== Physical Plan ==
VeloxColumnarToRow (49)
+- ^ ProjectExecTransformer (47)
   +- ^ RegularHashAggregateExecTransformer (46)
      +- ^ InputIteratorTransformer (45)
         +- ColumnarExchange (43)
            +- VeloxResizeBatches (42)
               +- ^ FlushableHashAggregateExecTransformer (40)
                  +- ^ ProjectExecTransformer (39)
                     +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (38)
                        :- ^ ProjectExecTransformer (34)
                        :  +- ^ BroadcastHashJoinExecTransformer Inner BuildLeft (33)
                        :     :- ^ InputIteratorTransformer (30)
                        :     :  +- ColumnarBroadcastExchange (28)
                        :     :     +- ^ ProjectExecTransformer (26)
                        :     :        +- ^ BroadcastHashJoinExecTransformer Inner BuildLeft (25)
                        :     :           :- ^ InputIteratorTransformer (7)
                        :     :           :  +- ColumnarBroadcastExchange (5)
                        :     :           :     +- ^ ProjectExecTransformer (3)
                        :     :           :        +- ^ FilterExecTransformer (2)
                        :     :           :           +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.item (1)
                        :     :           +- ^ FilterExecTransformer (24)
                        :     :              +- ^ ProjectExecTransformer (23)
                        :     :                 +- ^ RegularHashAggregateExecTransformer (22)
                        :     :                    +- ^ InputIteratorTransformer (21)
                        :     :                       +- ColumnarExchange (19)
                        :     :                          +- VeloxResizeBatches (18)
                        :     :                             +- ^ ProjectExecTransformer (16)
                        :     :                                +- ^ FlushableHashAggregateExecTransformer (15)
                        :     :                                   +- ^ ProjectExecTransformer (14)
                        :     :                                      +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (13)
                        :     :                                         :- ^ FilterExecTransformer (9)
                        :     :                                         :  +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.catalog_sales (8)
                        :     :                                         +- ^ InputIteratorTransformer (12)
                        :     :                                            +- ReusedExchange (10)
                        :     +- ^ FilterExecTransformer (32)
                        :        +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.catalog_sales (31)
                        +- ^ InputIteratorTransformer (37)
                           +- ReusedExchange (35)


(1) FileSourceScanExecTransformer parquet spark_catalog.default.item
Output [2]: [i_item_sk#1, i_manufact_id#2]
Batched: true
Location: InMemoryFileIndex [{warehouse_dir}/item]
PushedFilters: [IsNotNull(i_manufact_id), EqualTo(i_manufact_id,977), IsNotNull(i_item_sk)]
ReadSchema: struct<i_item_sk:int,i_manufact_id:int>

(2) FilterExecTransformer
Input [2]: [i_item_sk#1, i_manufact_id#2]
Arguments: ((isnotnull(i_manufact_id#2) AND (i_manufact_id#2 = 977)) AND isnotnull(i_item_sk#1))

(3) ProjectExecTransformer
Output [1]: [i_item_sk#1]
Input [2]: [i_item_sk#1, i_manufact_id#2]

(4) WholeStageCodegenTransformer (1)
Input [1]: [i_item_sk#1]
Arguments: false

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

(6) InputAdapter
Input [1]: [i_item_sk#1]

(7) InputIteratorTransformer
Input [1]: [i_item_sk#1]

(8) FileSourceScanExecTransformer parquet spark_catalog.default.catalog_sales
Output [3]: [cs_item_sk#3, cs_ext_discount_amt#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)]
PushedFilters: [IsNotNull(cs_item_sk)]
ReadSchema: struct<cs_item_sk:int,cs_ext_discount_amt:decimal(7,2)>

(9) FilterExecTransformer
Input [3]: [cs_item_sk#3, cs_ext_discount_amt#4, cs_sold_date_sk#5]
Arguments: (isnotnull(cs_item_sk#3) AND velox_might_contain(Subquery scalar-subquery#7, [id=#2], xxhash64(cs_item_sk#3, 42)))

(10) ReusedExchange [Reuses operator id: 66]
Output [1]: [d_date_sk#8]

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

(12) InputIteratorTransformer
Input [1]: [d_date_sk#8]

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

(14) ProjectExecTransformer
Output [2]: [cs_item_sk#3, UnscaledValue(cs_ext_discount_amt#4) AS _pre_1#9]
Input [4]: [cs_item_sk#3, cs_ext_discount_amt#4, cs_sold_date_sk#5, d_date_sk#8]

(15) FlushableHashAggregateExecTransformer
Input [2]: [cs_item_sk#3, _pre_1#9]
Keys [1]: [cs_item_sk#3]
Functions [1]: [partial_avg(_pre_1#9)]
Aggregate Attributes [2]: [sum#10, count#11]
Results [3]: [cs_item_sk#3, sum#12, count#13]

(16) ProjectExecTransformer
Output [4]: [hash(cs_item_sk#3, 42) AS hash_partition_key#14, cs_item_sk#3, sum#12, count#13]
Input [3]: [cs_item_sk#3, sum#12, count#13]

(17) WholeStageCodegenTransformer (6)
Input [4]: [hash_partition_key#14, cs_item_sk#3, sum#12, count#13]
Arguments: false

(18) VeloxResizeBatches
Input [4]: [hash_partition_key#14, cs_item_sk#3, sum#12, count#13]
Arguments: 1024, 2147483647, 10485760

(19) ColumnarExchange
Input [4]: [hash_partition_key#14, cs_item_sk#3, sum#12, count#13]
Arguments: hashpartitioning(cs_item_sk#3, 1), ENSURE_REQUIREMENTS, [cs_item_sk#3, sum#12, count#13], [plan_id=3], [shuffle_writer_type=hash]

(20) InputAdapter
Input [3]: [cs_item_sk#3, sum#12, count#13]

(21) InputIteratorTransformer
Input [3]: [cs_item_sk#3, sum#12, count#13]

(22) RegularHashAggregateExecTransformer
Input [3]: [cs_item_sk#3, sum#12, count#13]
Keys [1]: [cs_item_sk#3]
Functions [1]: [avg(UnscaledValue(cs_ext_discount_amt#4))]
Aggregate Attributes [1]: [avg(UnscaledValue(cs_ext_discount_amt#4))#15]
Results [2]: [cs_item_sk#3, avg(UnscaledValue(cs_ext_discount_amt#4))#15]

(23) ProjectExecTransformer
Output [2]: [(1.3 * cast((avg(UnscaledValue(cs_ext_discount_amt#4))#15 / 100.0) as decimal(11,6))) AS (1.3 * avg(cs_ext_discount_amt))#16, cs_item_sk#3]
Input [2]: [cs_item_sk#3, avg(UnscaledValue(cs_ext_discount_amt#4))#15]

(24) FilterExecTransformer
Input [2]: [(1.3 * avg(cs_ext_discount_amt))#16, cs_item_sk#3]
Arguments: isnotnull((1.3 * avg(cs_ext_discount_amt))#16)

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

(26) ProjectExecTransformer
Output [2]: [i_item_sk#1, (1.3 * avg(cs_ext_discount_amt))#16]
Input [3]: [i_item_sk#1, (1.3 * avg(cs_ext_discount_amt))#16, cs_item_sk#3]

(27) WholeStageCodegenTransformer (7)
Input [2]: [i_item_sk#1, (1.3 * avg(cs_ext_discount_amt))#16]
Arguments: false

(28) ColumnarBroadcastExchange
Input [2]: [i_item_sk#1, (1.3 * avg(cs_ext_discount_amt))#16]
Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=4]

(29) InputAdapter
Input [2]: [i_item_sk#1, (1.3 * avg(cs_ext_discount_amt))#16]

(30) InputIteratorTransformer
Input [2]: [i_item_sk#1, (1.3 * avg(cs_ext_discount_amt))#16]

(31) FileSourceScanExecTransformer parquet spark_catalog.default.catalog_sales
Output [3]: [cs_item_sk#17, cs_ext_discount_amt#18, cs_sold_date_sk#19]
Batched: true
Location: InMemoryFileIndex []
PartitionFilters: [isnotnull(cs_sold_date_sk#19), dynamicpruningexpression(cs_sold_date_sk#19 IN dynamicpruning#6)]
PushedFilters: [IsNotNull(cs_item_sk), IsNotNull(cs_ext_discount_amt)]
ReadSchema: struct<cs_item_sk:int,cs_ext_discount_amt:decimal(7,2)>

(32) FilterExecTransformer
Input [3]: [cs_item_sk#17, cs_ext_discount_amt#18, cs_sold_date_sk#19]
Arguments: (isnotnull(cs_item_sk#17) AND isnotnull(cs_ext_discount_amt#18))

(33) BroadcastHashJoinExecTransformer
Left keys [1]: [i_item_sk#1]
Right keys [1]: [cs_item_sk#17]
Join type: Inner
Join condition: (cast(cs_ext_discount_amt#18 as decimal(14,7)) > (1.3 * avg(cs_ext_discount_amt))#16)

(34) ProjectExecTransformer
Output [2]: [cs_ext_discount_amt#18, cs_sold_date_sk#19]
Input [5]: [i_item_sk#1, (1.3 * avg(cs_ext_discount_amt))#16, cs_item_sk#17, cs_ext_discount_amt#18, cs_sold_date_sk#19]

(35) ReusedExchange [Reuses operator id: 66]
Output [1]: [d_date_sk#20]

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

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

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

(39) ProjectExecTransformer
Output [1]: [UnscaledValue(cs_ext_discount_amt#18) AS _pre_2#21]
Input [3]: [cs_ext_discount_amt#18, cs_sold_date_sk#19, d_date_sk#20]

(40) FlushableHashAggregateExecTransformer
Input [1]: [_pre_2#21]
Keys: []
Functions [1]: [partial_sum(_pre_2#21)]
Aggregate Attributes [1]: [sum#22]
Results [1]: [sum#23]

(41) WholeStageCodegenTransformer (10)
Input [1]: [sum#23]
Arguments: false

(42) VeloxResizeBatches
Input [1]: [sum#23]
Arguments: 1024, 2147483647, 10485760

(43) ColumnarExchange
Input [1]: [sum#23]
Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=5], [shuffle_writer_type=hash]

(44) InputAdapter
Input [1]: [sum#23]

(45) InputIteratorTransformer
Input [1]: [sum#23]

(46) RegularHashAggregateExecTransformer
Input [1]: [sum#23]
Keys: []
Functions [1]: [sum(UnscaledValue(cs_ext_discount_amt#18))]
Aggregate Attributes [1]: [sum(UnscaledValue(cs_ext_discount_amt#18))#24]
Results [1]: [sum(UnscaledValue(cs_ext_discount_amt#18))#24]

(47) ProjectExecTransformer
Output [1]: [MakeDecimal(sum(UnscaledValue(cs_ext_discount_amt#18))#24,17,2) AS excess discount amount#25]
Input [1]: [sum(UnscaledValue(cs_ext_discount_amt#18))#24]

(48) WholeStageCodegenTransformer (11)
Input [1]: [excess discount amount#25]
Arguments: false

(49) VeloxColumnarToRow
Input [1]: [excess discount amount#25]

===== Subqueries =====

Subquery:1 Hosting operator id = 9 Hosting Expression = Subquery scalar-subquery#7, [id=#2]
VeloxColumnarToRow (61)
+- ^ RegularHashAggregateExecTransformer (59)
   +- ^ InputIteratorTransformer (58)
      +- ColumnarExchange (56)
         +- VeloxResizeBatches (55)
            +- ^ FlushableHashAggregateExecTransformer (53)
               +- ^ ProjectExecTransformer (52)
                  +- ^ FilterExecTransformer (51)
                     +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.item (50)


(50) FileSourceScanExecTransformer parquet spark_catalog.default.item
Output [2]: [i_item_sk#1, i_manufact_id#2]
Batched: true
Location: InMemoryFileIndex [{warehouse_dir}/item]
PushedFilters: [IsNotNull(i_manufact_id), EqualTo(i_manufact_id,977), IsNotNull(i_item_sk)]
ReadSchema: struct<i_item_sk:int,i_manufact_id:int>

(51) FilterExecTransformer
Input [2]: [i_item_sk#1, i_manufact_id#2]
Arguments: ((isnotnull(i_manufact_id#2) AND (i_manufact_id#2 = 977)) AND isnotnull(i_item_sk#1))

(52) ProjectExecTransformer
Output [1]: [xxhash64(i_item_sk#1, 42) AS _pre_3#26]
Input [2]: [i_item_sk#1, i_manufact_id#2]

(53) FlushableHashAggregateExecTransformer
Input [1]: [_pre_3#26]
Keys: []
Functions [1]: [partial_velox_bloom_filter_agg(_pre_3#26, 199, 5556, 0, 0)]
Aggregate Attributes [1]: [buf#27]
Results [1]: [buf#28]

(54) WholeStageCodegenTransformer (2)
Input [1]: [buf#28]
Arguments: false

(55) VeloxResizeBatches
Input [1]: [buf#28]
Arguments: 1024, 2147483647, 10485760

(56) ColumnarExchange
Input [1]: [buf#28]
Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=6], [shuffle_writer_type=hash]

(57) InputAdapter
Input [1]: [buf#28]

(58) InputIteratorTransformer
Input [1]: [buf#28]

(59) RegularHashAggregateExecTransformer
Input [1]: [buf#28]
Keys: []
Functions [1]: [velox_bloom_filter_agg(xxhash64(i_item_sk#1, 42), 199, 5556, 0, 0)]
Aggregate Attributes [1]: [bloom_filter_agg(xxhash64(i_item_sk#1, 42), 199, 5556, 0, 0)#29]
Results [1]: [bloom_filter_agg(xxhash64(i_item_sk#1, 42), 199, 5556, 0, 0)#29 AS bloomFilter#30]

(60) WholeStageCodegenTransformer (3)
Input [1]: [bloomFilter#30]
Arguments: false

(61) VeloxColumnarToRow
Input [1]: [bloomFilter#30]

Subquery:2 Hosting operator id = 8 Hosting Expression = cs_sold_date_sk#5 IN dynamicpruning#6
ColumnarBroadcastExchange (66)
+- ^ ProjectExecTransformer (64)
   +- ^ FilterExecTransformer (63)
      +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (62)


(62) FileSourceScanExecTransformer parquet spark_catalog.default.date_dim
Output [2]: [d_date_sk#8, d_date#31]
Batched: true
Location: InMemoryFileIndex [{warehouse_dir}/date_dim]
PushedFilters: [IsNotNull(d_date), GreaterThanOrEqual(d_date,2000-01-27), LessThanOrEqual(d_date,2000-04-26), IsNotNull(d_date_sk)]
ReadSchema: struct<d_date_sk:int,d_date:date>

(63) FilterExecTransformer
Input [2]: [d_date_sk#8, d_date#31]
Arguments: (((isnotnull(d_date#31) AND (d_date#31 >= 2000-01-27)) AND (d_date#31 <= 2000-04-26)) AND isnotnull(d_date_sk#8))

(64) ProjectExecTransformer
Output [1]: [d_date_sk#8]
Input [2]: [d_date_sk#8, d_date#31]

(65) WholeStageCodegenTransformer (4)
Input [1]: [d_date_sk#8]
Arguments: false

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

Subquery:3 Hosting operator id = 8 Hosting Expression = Subquery scalar-subquery#7, [id=#2]
VeloxColumnarToRow (61)
+- ^ RegularHashAggregateExecTransformer (59)
   +- ^ InputIteratorTransformer (58)
      +- ColumnarExchange (56)
         +- VeloxResizeBatches (55)
            +- ^ FlushableHashAggregateExecTransformer (53)
               +- ^ ProjectExecTransformer (52)
                  +- ^ FilterExecTransformer (51)
                     +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.item (50)


Subquery:4 Hosting operator id = 31 Hosting Expression = cs_sold_date_sk#19 IN dynamicpruning#6


