== Physical Plan ==
VeloxColumnarToRow (91)
+- TakeOrderedAndProjectExecTransformer (90)
   +- ^ ProjectExecTransformer (88)
      +- ^ RegularHashAggregateExecTransformer (87)
         +- ^ InputIteratorTransformer (86)
            +- ColumnarExchange (84)
               +- VeloxResizeBatches (83)
                  +- ^ ProjectExecTransformer (81)
                     +- ^ FlushableHashAggregateExecTransformer (80)
                        +- ^ ProjectExecTransformer (79)
                           +- ^ RegularHashAggregateExecTransformer (78)
                              +- ^ InputIteratorTransformer (77)
                                 +- ColumnarExchange (75)
                                    +- VeloxResizeBatches (74)
                                       +- ^ ProjectExecTransformer (72)
                                          +- ^ FlushableHashAggregateExecTransformer (71)
                                             +- ^ ProjectExecTransformer (70)
                                                +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (69)
                                                   :- ^ ProjectExecTransformer (65)
                                                   :  +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (64)
                                                   :     :- ^ ProjectExecTransformer (57)
                                                   :     :  +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (56)
                                                   :     :     :- ^ ProjectExecTransformer (49)
                                                   :     :     :  +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (48)
                                                   :     :     :     :- ^ RegularHashAggregateExecTransformer (41)
                                                   :     :     :     :  +- ^ InputIteratorTransformer (40)
                                                   :     :     :     :     +- ColumnarExchange (38)
                                                   :     :     :     :        +- VeloxResizeBatches (37)
                                                   :     :     :     :           +- ^ ProjectExecTransformer (35)
                                                   :     :     :     :              +- ^ FlushableHashAggregateExecTransformer (34)
                                                   :     :     :     :                 +- ^ ProjectExecTransformer (33)
                                                   :     :     :     :                    +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (32)
                                                   :     :     :     :                       :- ^ ProjectExecTransformer (25)
                                                   :     :     :     :                       :  +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (24)
                                                   :     :     :     :                       :     :- ^ ProjectExecTransformer (20)
                                                   :     :     :     :                       :     :  +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (19)
                                                   :     :     :     :                       :     :     :- ^ InputIteratorTransformer (11)
                                                   :     :     :     :                       :     :     :  +- ColumnarUnion (9)
                                                   :     :     :     :                       :     :     :     :- ^ ProjectExecTransformer (3)
                                                   :     :     :     :                       :     :     :     :  +- ^ FilterExecTransformer (2)
                                                   :     :     :     :                       :     :     :     :     +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.catalog_sales (1)
                                                   :     :     :     :                       :     :     :     +- ^ ProjectExecTransformer (7)
                                                   :     :     :     :                       :     :     :        +- ^ FilterExecTransformer (6)
                                                   :     :     :     :                       :     :     :           +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.web_sales (5)
                                                   :     :     :     :                       :     :     +- ^ InputIteratorTransformer (18)
                                                   :     :     :     :                       :     :        +- ColumnarBroadcastExchange (16)
                                                   :     :     :     :                       :     :           +- ^ ProjectExecTransformer (14)
                                                   :     :     :     :                       :     :              +- ^ FilterExecTransformer (13)
                                                   :     :     :     :                       :     :                 +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.item (12)
                                                   :     :     :     :                       :     +- ^ InputIteratorTransformer (23)
                                                   :     :     :     :                       :        +- ReusedExchange (21)
                                                   :     :     :     :                       +- ^ InputIteratorTransformer (31)
                                                   :     :     :     :                          +- ColumnarBroadcastExchange (29)
                                                   :     :     :     :                             +- ^ FilterExecTransformer (27)
                                                   :     :     :     :                                +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.customer (26)
                                                   :     :     :     +- ^ InputIteratorTransformer (47)
                                                   :     :     :        +- ColumnarBroadcastExchange (45)
                                                   :     :     :           +- ^ FilterExecTransformer (43)
                                                   :     :     :              +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.store_sales (42)
                                                   :     :     +- ^ InputIteratorTransformer (55)
                                                   :     :        +- ColumnarBroadcastExchange (53)
                                                   :     :           +- ^ FilterExecTransformer (51)
                                                   :     :              +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.customer_address (50)
                                                   :     +- ^ InputIteratorTransformer (63)
                                                   :        +- ColumnarBroadcastExchange (61)
                                                   :           +- ^ FilterExecTransformer (59)
                                                   :              +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.store (58)
                                                   +- ^ InputIteratorTransformer (68)
                                                      +- ReusedExchange (66)


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

(2) FilterExecTransformer
Input [3]: [cs_bill_customer_sk#1, cs_item_sk#2, cs_sold_date_sk#3]
Arguments: (isnotnull(cs_item_sk#2) AND isnotnull(cs_bill_customer_sk#1))

(3) ProjectExecTransformer
Output [3]: [cs_sold_date_sk#3 AS sold_date_sk#5, cs_bill_customer_sk#1 AS customer_sk#6, cs_item_sk#2 AS item_sk#7]
Input [3]: [cs_bill_customer_sk#1, cs_item_sk#2, cs_sold_date_sk#3]

(4) WholeStageCodegenTransformer (2)
Input [3]: [sold_date_sk#5, customer_sk#6, item_sk#7]
Arguments: false

(5) FileSourceScanExecTransformer parquet spark_catalog.default.web_sales
Output [3]: [ws_item_sk#8, ws_bill_customer_sk#9, ws_sold_date_sk#10]
Batched: true
Location: InMemoryFileIndex []
PartitionFilters: [isnotnull(ws_sold_date_sk#10), dynamicpruningexpression(ws_sold_date_sk#10 IN dynamicpruning#4)]
PushedFilters: [IsNotNull(ws_item_sk), IsNotNull(ws_bill_customer_sk)]
ReadSchema: struct<ws_item_sk:int,ws_bill_customer_sk:int>

(6) FilterExecTransformer
Input [3]: [ws_item_sk#8, ws_bill_customer_sk#9, ws_sold_date_sk#10]
Arguments: (isnotnull(ws_item_sk#8) AND isnotnull(ws_bill_customer_sk#9))

(7) ProjectExecTransformer
Output [3]: [ws_sold_date_sk#10 AS sold_date_sk#11, ws_bill_customer_sk#9 AS customer_sk#12, ws_item_sk#8 AS item_sk#13]
Input [3]: [ws_item_sk#8, ws_bill_customer_sk#9, ws_sold_date_sk#10]

(8) WholeStageCodegenTransformer (4)
Input [3]: [sold_date_sk#11, customer_sk#12, item_sk#13]
Arguments: false

(9) ColumnarUnion
Arguments: UnknownPartitioning(0)

(10) InputAdapter
Input [3]: [sold_date_sk#5, customer_sk#6, item_sk#7]

(11) InputIteratorTransformer
Input [3]: [sold_date_sk#5, customer_sk#6, item_sk#7]

(12) FileSourceScanExecTransformer parquet spark_catalog.default.item
Output [3]: [i_item_sk#14, i_class#15, i_category#16]
Batched: true
Location: InMemoryFileIndex [{warehouse_dir}/item]
PushedFilters: [IsNotNull(i_category), IsNotNull(i_class), EqualTo(i_category,Women                                             ), EqualTo(i_class,maternity                                         ), IsNotNull(i_item_sk)]
ReadSchema: struct<i_item_sk:int,i_class:string,i_category:string>

(13) FilterExecTransformer
Input [3]: [i_item_sk#14, i_class#15, i_category#16]
Arguments: ((((isnotnull(i_category#16) AND isnotnull(i_class#15)) AND (i_category#16 = Women                                             )) AND (i_class#15 = maternity                                         )) AND isnotnull(i_item_sk#14))

(14) ProjectExecTransformer
Output [1]: [i_item_sk#14]
Input [3]: [i_item_sk#14, i_class#15, i_category#16]

(15) WholeStageCodegenTransformer (5)
Input [1]: [i_item_sk#14]
Arguments: false

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

(17) InputAdapter
Input [1]: [i_item_sk#14]

(18) InputIteratorTransformer
Input [1]: [i_item_sk#14]

(19) BroadcastHashJoinExecTransformer
Left keys [1]: [item_sk#7]
Right keys [1]: [i_item_sk#14]
Join type: Inner
Join condition: None

(20) ProjectExecTransformer
Output [2]: [sold_date_sk#5, customer_sk#6]
Input [4]: [sold_date_sk#5, customer_sk#6, item_sk#7, i_item_sk#14]

(21) ReusedExchange [Reuses operator id: 96]
Output [1]: [d_date_sk#17]

(22) InputAdapter
Input [1]: [d_date_sk#17]

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

(24) BroadcastHashJoinExecTransformer
Left keys [1]: [sold_date_sk#5]
Right keys [1]: [d_date_sk#17]
Join type: Inner
Join condition: None

(25) ProjectExecTransformer
Output [1]: [customer_sk#6]
Input [3]: [sold_date_sk#5, customer_sk#6, d_date_sk#17]

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

(27) FilterExecTransformer
Input [2]: [c_customer_sk#18, c_current_addr_sk#19]
Arguments: (isnotnull(c_customer_sk#18) AND isnotnull(c_current_addr_sk#19))

(28) WholeStageCodegenTransformer (7)
Input [2]: [c_customer_sk#18, c_current_addr_sk#19]
Arguments: false

(29) ColumnarBroadcastExchange
Input [2]: [c_customer_sk#18, c_current_addr_sk#19]
Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=2]

(30) InputAdapter
Input [2]: [c_customer_sk#18, c_current_addr_sk#19]

(31) InputIteratorTransformer
Input [2]: [c_customer_sk#18, c_current_addr_sk#19]

(32) BroadcastHashJoinExecTransformer
Left keys [1]: [customer_sk#6]
Right keys [1]: [c_customer_sk#18]
Join type: Inner
Join condition: None

(33) ProjectExecTransformer
Output [2]: [c_customer_sk#18, c_current_addr_sk#19]
Input [3]: [customer_sk#6, c_customer_sk#18, c_current_addr_sk#19]

(34) FlushableHashAggregateExecTransformer
Input [2]: [c_customer_sk#18, c_current_addr_sk#19]
Keys [2]: [c_customer_sk#18, c_current_addr_sk#19]
Functions: []
Aggregate Attributes: []
Results [2]: [c_customer_sk#18, c_current_addr_sk#19]

(35) ProjectExecTransformer
Output [3]: [hash(c_customer_sk#18, c_current_addr_sk#19, 42) AS hash_partition_key#20, c_customer_sk#18, c_current_addr_sk#19]
Input [2]: [c_customer_sk#18, c_current_addr_sk#19]

(36) WholeStageCodegenTransformer (8)
Input [3]: [hash_partition_key#20, c_customer_sk#18, c_current_addr_sk#19]
Arguments: false

(37) VeloxResizeBatches
Input [3]: [hash_partition_key#20, c_customer_sk#18, c_current_addr_sk#19]
Arguments: 1024, 2147483647, 10485760

(38) ColumnarExchange
Input [3]: [hash_partition_key#20, c_customer_sk#18, c_current_addr_sk#19]
Arguments: hashpartitioning(c_customer_sk#18, c_current_addr_sk#19, 1), ENSURE_REQUIREMENTS, [c_customer_sk#18, c_current_addr_sk#19], [plan_id=3], [shuffle_writer_type=hash]

(39) InputAdapter
Input [2]: [c_customer_sk#18, c_current_addr_sk#19]

(40) InputIteratorTransformer
Input [2]: [c_customer_sk#18, c_current_addr_sk#19]

(41) RegularHashAggregateExecTransformer
Input [2]: [c_customer_sk#18, c_current_addr_sk#19]
Keys [2]: [c_customer_sk#18, c_current_addr_sk#19]
Functions: []
Aggregate Attributes: []
Results [2]: [c_customer_sk#18, c_current_addr_sk#19]

(42) FileSourceScanExecTransformer parquet spark_catalog.default.store_sales
Output [3]: [ss_customer_sk#21, ss_ext_sales_price#22, ss_sold_date_sk#23]
Batched: true
Location: InMemoryFileIndex []
PartitionFilters: [isnotnull(ss_sold_date_sk#23), dynamicpruningexpression(ss_sold_date_sk#23 IN dynamicpruning#24)]
PushedFilters: [IsNotNull(ss_customer_sk)]
ReadSchema: struct<ss_customer_sk:int,ss_ext_sales_price:decimal(7,2)>

(43) FilterExecTransformer
Input [3]: [ss_customer_sk#21, ss_ext_sales_price#22, ss_sold_date_sk#23]
Arguments: isnotnull(ss_customer_sk#21)

(44) WholeStageCodegenTransformer (18)
Input [3]: [ss_customer_sk#21, ss_ext_sales_price#22, ss_sold_date_sk#23]
Arguments: false

(45) ColumnarBroadcastExchange
Input [3]: [ss_customer_sk#21, ss_ext_sales_price#22, ss_sold_date_sk#23]
Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=4]

(46) InputAdapter
Input [3]: [ss_customer_sk#21, ss_ext_sales_price#22, ss_sold_date_sk#23]

(47) InputIteratorTransformer
Input [3]: [ss_customer_sk#21, ss_ext_sales_price#22, ss_sold_date_sk#23]

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

(49) ProjectExecTransformer
Output [4]: [c_customer_sk#18, c_current_addr_sk#19, ss_ext_sales_price#22, ss_sold_date_sk#23]
Input [5]: [c_customer_sk#18, c_current_addr_sk#19, ss_customer_sk#21, ss_ext_sales_price#22, ss_sold_date_sk#23]

(50) FileSourceScanExecTransformer parquet spark_catalog.default.customer_address
Output [3]: [ca_address_sk#25, ca_county#26, ca_state#27]
Batched: true
Location: InMemoryFileIndex [{warehouse_dir}/customer_address]
PushedFilters: [IsNotNull(ca_address_sk), IsNotNull(ca_county), IsNotNull(ca_state)]
ReadSchema: struct<ca_address_sk:int,ca_county:string,ca_state:string>

(51) FilterExecTransformer
Input [3]: [ca_address_sk#25, ca_county#26, ca_state#27]
Arguments: ((isnotnull(ca_address_sk#25) AND isnotnull(ca_county#26)) AND isnotnull(ca_state#27))

(52) WholeStageCodegenTransformer (19)
Input [3]: [ca_address_sk#25, ca_county#26, ca_state#27]
Arguments: false

(53) ColumnarBroadcastExchange
Input [3]: [ca_address_sk#25, ca_county#26, ca_state#27]
Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=5]

(54) InputAdapter
Input [3]: [ca_address_sk#25, ca_county#26, ca_state#27]

(55) InputIteratorTransformer
Input [3]: [ca_address_sk#25, ca_county#26, ca_state#27]

(56) BroadcastHashJoinExecTransformer
Left keys [1]: [c_current_addr_sk#19]
Right keys [1]: [ca_address_sk#25]
Join type: Inner
Join condition: None

(57) ProjectExecTransformer
Output [5]: [c_customer_sk#18, ss_ext_sales_price#22, ss_sold_date_sk#23, ca_county#26, ca_state#27]
Input [7]: [c_customer_sk#18, c_current_addr_sk#19, ss_ext_sales_price#22, ss_sold_date_sk#23, ca_address_sk#25, ca_county#26, ca_state#27]

(58) FileSourceScanExecTransformer parquet spark_catalog.default.store
Output [2]: [s_county#28, s_state#29]
Batched: true
Location: InMemoryFileIndex [{warehouse_dir}/store]
PushedFilters: [IsNotNull(s_county), IsNotNull(s_state)]
ReadSchema: struct<s_county:string,s_state:string>

(59) FilterExecTransformer
Input [2]: [s_county#28, s_state#29]
Arguments: (isnotnull(s_county#28) AND isnotnull(s_state#29))

(60) WholeStageCodegenTransformer (20)
Input [2]: [s_county#28, s_state#29]
Arguments: false

(61) ColumnarBroadcastExchange
Input [2]: [s_county#28, s_state#29]
Arguments: HashedRelationBroadcastMode(List(input[0, string, false], input[1, string, false]),false), [plan_id=6]

(62) InputAdapter
Input [2]: [s_county#28, s_state#29]

(63) InputIteratorTransformer
Input [2]: [s_county#28, s_state#29]

(64) BroadcastHashJoinExecTransformer
Left keys [2]: [ca_county#26, ca_state#27]
Right keys [2]: [s_county#28, s_state#29]
Join type: Inner
Join condition: None

(65) ProjectExecTransformer
Output [3]: [c_customer_sk#18, ss_ext_sales_price#22, ss_sold_date_sk#23]
Input [7]: [c_customer_sk#18, ss_ext_sales_price#22, ss_sold_date_sk#23, ca_county#26, ca_state#27, s_county#28, s_state#29]

(66) ReusedExchange [Reuses operator id: 101]
Output [1]: [d_date_sk#30]

(67) InputAdapter
Input [1]: [d_date_sk#30]

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

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

(70) ProjectExecTransformer
Output [2]: [c_customer_sk#18, UnscaledValue(ss_ext_sales_price#22) AS _pre_1#31]
Input [4]: [c_customer_sk#18, ss_ext_sales_price#22, ss_sold_date_sk#23, d_date_sk#30]

(71) FlushableHashAggregateExecTransformer
Input [2]: [c_customer_sk#18, _pre_1#31]
Keys [1]: [c_customer_sk#18]
Functions [1]: [partial_sum(_pre_1#31)]
Aggregate Attributes [1]: [sum#32]
Results [2]: [c_customer_sk#18, sum#33]

(72) ProjectExecTransformer
Output [3]: [hash(c_customer_sk#18, 42) AS hash_partition_key#34, c_customer_sk#18, sum#33]
Input [2]: [c_customer_sk#18, sum#33]

(73) WholeStageCodegenTransformer (30)
Input [3]: [hash_partition_key#34, c_customer_sk#18, sum#33]
Arguments: false

(74) VeloxResizeBatches
Input [3]: [hash_partition_key#34, c_customer_sk#18, sum#33]
Arguments: 1024, 2147483647, 10485760

(75) ColumnarExchange
Input [3]: [hash_partition_key#34, c_customer_sk#18, sum#33]
Arguments: hashpartitioning(c_customer_sk#18, 1), ENSURE_REQUIREMENTS, [c_customer_sk#18, sum#33], [plan_id=7], [shuffle_writer_type=hash]

(76) InputAdapter
Input [2]: [c_customer_sk#18, sum#33]

(77) InputIteratorTransformer
Input [2]: [c_customer_sk#18, sum#33]

(78) RegularHashAggregateExecTransformer
Input [2]: [c_customer_sk#18, sum#33]
Keys [1]: [c_customer_sk#18]
Functions [1]: [sum(UnscaledValue(ss_ext_sales_price#22))]
Aggregate Attributes [1]: [sum(UnscaledValue(ss_ext_sales_price#22))#35]
Results [2]: [c_customer_sk#18, sum(UnscaledValue(ss_ext_sales_price#22))#35]

(79) ProjectExecTransformer
Output [1]: [cast((MakeDecimal(sum(UnscaledValue(ss_ext_sales_price#22))#35,17,2) / 50) as int) AS segment#36]
Input [2]: [c_customer_sk#18, sum(UnscaledValue(ss_ext_sales_price#22))#35]

(80) FlushableHashAggregateExecTransformer
Input [1]: [segment#36]
Keys [1]: [segment#36]
Functions [1]: [partial_count(1)]
Aggregate Attributes [1]: [count#37]
Results [2]: [segment#36, count#38]

(81) ProjectExecTransformer
Output [3]: [hash(segment#36, 42) AS hash_partition_key#39, segment#36, count#38]
Input [2]: [segment#36, count#38]

(82) WholeStageCodegenTransformer (31)
Input [3]: [hash_partition_key#39, segment#36, count#38]
Arguments: false

(83) VeloxResizeBatches
Input [3]: [hash_partition_key#39, segment#36, count#38]
Arguments: 1024, 2147483647, 10485760

(84) ColumnarExchange
Input [3]: [hash_partition_key#39, segment#36, count#38]
Arguments: hashpartitioning(segment#36, 1), ENSURE_REQUIREMENTS, [segment#36, count#38], [plan_id=8], [shuffle_writer_type=hash]

(85) InputAdapter
Input [2]: [segment#36, count#38]

(86) InputIteratorTransformer
Input [2]: [segment#36, count#38]

(87) RegularHashAggregateExecTransformer
Input [2]: [segment#36, count#38]
Keys [1]: [segment#36]
Functions [1]: [count(1)]
Aggregate Attributes [1]: [count(1)#40]
Results [2]: [segment#36, count(1)#40]

(88) ProjectExecTransformer
Output [3]: [segment#36, count(1)#40 AS num_customers#41, (segment#36 * 50) AS segment_base#42]
Input [2]: [segment#36, count(1)#40]

(89) WholeStageCodegenTransformer (32)
Input [3]: [segment#36, num_customers#41, segment_base#42]
Arguments: false

(90) TakeOrderedAndProjectExecTransformer
Input [3]: [segment#36, num_customers#41, segment_base#42]
Arguments: 100, [segment#36 ASC NULLS FIRST, num_customers#41 ASC NULLS FIRST], [segment#36, num_customers#41, segment_base#42], 0

(91) VeloxColumnarToRow
Input [3]: [segment#36, num_customers#41, segment_base#42]

===== Subqueries =====

Subquery:1 Hosting operator id = 1 Hosting Expression = cs_sold_date_sk#3 IN dynamicpruning#4
ColumnarBroadcastExchange (96)
+- ^ ProjectExecTransformer (94)
   +- ^ FilterExecTransformer (93)
      +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (92)


(92) FileSourceScanExecTransformer parquet spark_catalog.default.date_dim
Output [3]: [d_date_sk#17, d_year#43, d_moy#44]
Batched: true
Location: InMemoryFileIndex [{warehouse_dir}/date_dim]
PushedFilters: [IsNotNull(d_moy), IsNotNull(d_year), EqualTo(d_moy,12), EqualTo(d_year,1998), IsNotNull(d_date_sk)]
ReadSchema: struct<d_date_sk:int,d_year:int,d_moy:int>

(93) FilterExecTransformer
Input [3]: [d_date_sk#17, d_year#43, d_moy#44]
Arguments: ((((isnotnull(d_moy#44) AND isnotnull(d_year#43)) AND (d_moy#44 = 12)) AND (d_year#43 = 1998)) AND isnotnull(d_date_sk#17))

(94) ProjectExecTransformer
Output [1]: [d_date_sk#17]
Input [3]: [d_date_sk#17, d_year#43, d_moy#44]

(95) WholeStageCodegenTransformer (1)
Input [1]: [d_date_sk#17]
Arguments: false

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

Subquery:2 Hosting operator id = 5 Hosting Expression = ws_sold_date_sk#10 IN dynamicpruning#4

Subquery:3 Hosting operator id = 42 Hosting Expression = ss_sold_date_sk#23 IN dynamicpruning#24
ColumnarBroadcastExchange (101)
+- ^ ProjectExecTransformer (99)
   +- ^ FilterExecTransformer (98)
      +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (97)


(97) FileSourceScanExecTransformer parquet spark_catalog.default.date_dim
Output [2]: [d_date_sk#30, d_month_seq#45]
Batched: true
Location: InMemoryFileIndex [{warehouse_dir}/date_dim]
PushedFilters: [IsNotNull(d_month_seq), GreaterThanOrEqual(d_month_seq,ScalarSubquery#46), LessThanOrEqual(d_month_seq,ScalarSubquery#47), IsNotNull(d_date_sk)]
ReadSchema: struct<d_date_sk:int,d_month_seq:int>

(98) FilterExecTransformer
Input [2]: [d_date_sk#30, d_month_seq#45]
Arguments: (((isnotnull(d_month_seq#45) AND (d_month_seq#45 >= ReusedSubquery Subquery scalar-subquery#46, [id=#10])) AND (d_month_seq#45 <= ReusedSubquery Subquery scalar-subquery#47, [id=#11])) AND isnotnull(d_date_sk#30))

(99) ProjectExecTransformer
Output [1]: [d_date_sk#30]
Input [2]: [d_date_sk#30, d_month_seq#45]

(100) WholeStageCodegenTransformer (17)
Input [1]: [d_date_sk#30]
Arguments: false

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

Subquery:4 Hosting operator id = 98 Hosting Expression = ReusedSubquery Subquery scalar-subquery#46, [id=#10]

Subquery:5 Hosting operator id = 98 Hosting Expression = ReusedSubquery Subquery scalar-subquery#47, [id=#11]

Subquery:6 Hosting operator id = 97 Hosting Expression = Subquery scalar-subquery#46, [id=#10]
VeloxColumnarToRow (114)
+- ^ RegularHashAggregateExecTransformer (112)
   +- ^ InputIteratorTransformer (111)
      +- ColumnarExchange (109)
         +- VeloxResizeBatches (108)
            +- ^ ProjectExecTransformer (106)
               +- ^ FlushableHashAggregateExecTransformer (105)
                  +- ^ ProjectExecTransformer (104)
                     +- ^ FilterExecTransformer (103)
                        +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (102)


(102) FileSourceScanExecTransformer parquet spark_catalog.default.date_dim
Output [3]: [d_month_seq#48, d_year#49, d_moy#50]
Batched: true
Location: InMemoryFileIndex [{warehouse_dir}/date_dim]
PushedFilters: [IsNotNull(d_year), IsNotNull(d_moy), EqualTo(d_year,1998), EqualTo(d_moy,12)]
ReadSchema: struct<d_month_seq:int,d_year:int,d_moy:int>

(103) FilterExecTransformer
Input [3]: [d_month_seq#48, d_year#49, d_moy#50]
Arguments: (((isnotnull(d_year#49) AND isnotnull(d_moy#50)) AND (d_year#49 = 1998)) AND (d_moy#50 = 12))

(104) ProjectExecTransformer
Output [1]: [(d_month_seq#48 + 1) AS (d_month_seq + 1)#51]
Input [3]: [d_month_seq#48, d_year#49, d_moy#50]

(105) FlushableHashAggregateExecTransformer
Input [1]: [(d_month_seq + 1)#51]
Keys [1]: [(d_month_seq + 1)#51]
Functions: []
Aggregate Attributes: []
Results [1]: [(d_month_seq + 1)#51]

(106) ProjectExecTransformer
Output [2]: [hash((d_month_seq + 1)#51, 42) AS hash_partition_key#52, (d_month_seq + 1)#51]
Input [1]: [(d_month_seq + 1)#51]

(107) WholeStageCodegenTransformer (13)
Input [2]: [hash_partition_key#52, (d_month_seq + 1)#51]
Arguments: false

(108) VeloxResizeBatches
Input [2]: [hash_partition_key#52, (d_month_seq + 1)#51]
Arguments: 1024, 2147483647, 10485760

(109) ColumnarExchange
Input [2]: [hash_partition_key#52, (d_month_seq + 1)#51]
Arguments: hashpartitioning((d_month_seq + 1)#51, 1), ENSURE_REQUIREMENTS, [(d_month_seq + 1)#51], [plan_id=13], [shuffle_writer_type=hash]

(110) InputAdapter
Input [1]: [(d_month_seq + 1)#51]

(111) InputIteratorTransformer
Input [1]: [(d_month_seq + 1)#51]

(112) RegularHashAggregateExecTransformer
Input [1]: [(d_month_seq + 1)#51]
Keys [1]: [(d_month_seq + 1)#51]
Functions: []
Aggregate Attributes: []
Results [1]: [(d_month_seq + 1)#51]

(113) WholeStageCodegenTransformer (14)
Input [1]: [(d_month_seq + 1)#51]
Arguments: false

(114) VeloxColumnarToRow
Input [1]: [(d_month_seq + 1)#51]

Subquery:7 Hosting operator id = 97 Hosting Expression = Subquery scalar-subquery#47, [id=#11]
VeloxColumnarToRow (127)
+- ^ RegularHashAggregateExecTransformer (125)
   +- ^ InputIteratorTransformer (124)
      +- ColumnarExchange (122)
         +- VeloxResizeBatches (121)
            +- ^ ProjectExecTransformer (119)
               +- ^ FlushableHashAggregateExecTransformer (118)
                  +- ^ ProjectExecTransformer (117)
                     +- ^ FilterExecTransformer (116)
                        +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (115)


(115) FileSourceScanExecTransformer parquet spark_catalog.default.date_dim
Output [3]: [d_month_seq#53, d_year#54, d_moy#55]
Batched: true
Location: InMemoryFileIndex [{warehouse_dir}/date_dim]
PushedFilters: [IsNotNull(d_year), IsNotNull(d_moy), EqualTo(d_year,1998), EqualTo(d_moy,12)]
ReadSchema: struct<d_month_seq:int,d_year:int,d_moy:int>

(116) FilterExecTransformer
Input [3]: [d_month_seq#53, d_year#54, d_moy#55]
Arguments: (((isnotnull(d_year#54) AND isnotnull(d_moy#55)) AND (d_year#54 = 1998)) AND (d_moy#55 = 12))

(117) ProjectExecTransformer
Output [1]: [(d_month_seq#53 + 3) AS (d_month_seq + 3)#56]
Input [3]: [d_month_seq#53, d_year#54, d_moy#55]

(118) FlushableHashAggregateExecTransformer
Input [1]: [(d_month_seq + 3)#56]
Keys [1]: [(d_month_seq + 3)#56]
Functions: []
Aggregate Attributes: []
Results [1]: [(d_month_seq + 3)#56]

(119) ProjectExecTransformer
Output [2]: [hash((d_month_seq + 3)#56, 42) AS hash_partition_key#57, (d_month_seq + 3)#56]
Input [1]: [(d_month_seq + 3)#56]

(120) WholeStageCodegenTransformer (15)
Input [2]: [hash_partition_key#57, (d_month_seq + 3)#56]
Arguments: false

(121) VeloxResizeBatches
Input [2]: [hash_partition_key#57, (d_month_seq + 3)#56]
Arguments: 1024, 2147483647, 10485760

(122) ColumnarExchange
Input [2]: [hash_partition_key#57, (d_month_seq + 3)#56]
Arguments: hashpartitioning((d_month_seq + 3)#56, 1), ENSURE_REQUIREMENTS, [(d_month_seq + 3)#56], [plan_id=14], [shuffle_writer_type=hash]

(123) InputAdapter
Input [1]: [(d_month_seq + 3)#56]

(124) InputIteratorTransformer
Input [1]: [(d_month_seq + 3)#56]

(125) RegularHashAggregateExecTransformer
Input [1]: [(d_month_seq + 3)#56]
Keys [1]: [(d_month_seq + 3)#56]
Functions: []
Aggregate Attributes: []
Results [1]: [(d_month_seq + 3)#56]

(126) WholeStageCodegenTransformer (16)
Input [1]: [(d_month_seq + 3)#56]
Arguments: false

(127) VeloxColumnarToRow
Input [1]: [(d_month_seq + 3)#56]

Subquery:8 Hosting operator id = 97 Hosting Expression = ReusedSubquery Subquery scalar-subquery#46, [id=#10]

Subquery:9 Hosting operator id = 97 Hosting Expression = ReusedSubquery Subquery scalar-subquery#47, [id=#11]


