== Physical Plan ==
VeloxColumnarToRow (104)
+- ^ RegularHashAggregateExecTransformer (102)
   +- ^ ProjectExecTransformer (101)
      +- ^ ShuffledHashJoinExecTransformer LeftSemi BuildRight (100)
         :- ^ ShuffledHashJoinExecTransformer LeftSemi BuildRight (68)
         :  :- ^ InputIteratorTransformer (36)
         :  :  +- ColumnarExchange (34)
         :  :     +- VeloxResizeBatches (33)
         :  :        +- ^ ProjectExecTransformer (31)
         :  :           +- ^ FlushableHashAggregateExecTransformer (30)
         :  :              +- ^ InputIteratorTransformer (29)
         :  :                 +- ColumnarExchange (27)
         :  :                    +- VeloxResizeBatches (26)
         :  :                       +- ^ ProjectExecTransformer (24)
         :  :                          +- ^ FlushableHashAggregateExecTransformer (23)
         :  :                             +- ^ ProjectExecTransformer (22)
         :  :                                +- ^ ShuffledHashJoinExecTransformer Inner BuildRight (21)
         :  :                                   :- ^ InputIteratorTransformer (12)
         :  :                                   :  +- ColumnarExchange (10)
         :  :                                   :     +- VeloxResizeBatches (9)
         :  :                                   :        +- ^ ProjectExecTransformer (7)
         :  :                                   :           +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (6)
         :  :                                   :              :- ^ FilterExecTransformer (2)
         :  :                                   :              :  +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.store_sales (1)
         :  :                                   :              +- ^ InputIteratorTransformer (5)
         :  :                                   :                 +- ReusedExchange (3)
         :  :                                   +- ^ InputIteratorTransformer (20)
         :  :                                      +- ColumnarExchange (18)
         :  :                                         +- VeloxResizeBatches (17)
         :  :                                            +- ^ ProjectExecTransformer (15)
         :  :                                               +- ^ FilterExecTransformer (14)
         :  :                                                  +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.customer (13)
         :  +- ^ InputIteratorTransformer (67)
         :     +- ColumnarExchange (65)
         :        +- VeloxResizeBatches (64)
         :           +- ^ ProjectExecTransformer (62)
         :              +- ^ FlushableHashAggregateExecTransformer (61)
         :                 +- ^ InputIteratorTransformer (60)
         :                    +- ColumnarExchange (58)
         :                       +- VeloxResizeBatches (57)
         :                          +- ^ ProjectExecTransformer (55)
         :                             +- ^ FlushableHashAggregateExecTransformer (54)
         :                                +- ^ ProjectExecTransformer (53)
         :                                   +- ^ ShuffledHashJoinExecTransformer Inner BuildRight (52)
         :                                      :- ^ InputIteratorTransformer (48)
         :                                      :  +- ColumnarExchange (46)
         :                                      :     +- VeloxResizeBatches (45)
         :                                      :        +- ^ ProjectExecTransformer (43)
         :                                      :           +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (42)
         :                                      :              :- ^ FilterExecTransformer (38)
         :                                      :              :  +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.catalog_sales (37)
         :                                      :              +- ^ InputIteratorTransformer (41)
         :                                      :                 +- ReusedExchange (39)
         :                                      +- ^ InputIteratorTransformer (51)
         :                                         +- ReusedExchange (49)
         +- ^ InputIteratorTransformer (99)
            +- ColumnarExchange (97)
               +- VeloxResizeBatches (96)
                  +- ^ ProjectExecTransformer (94)
                     +- ^ FlushableHashAggregateExecTransformer (93)
                        +- ^ InputIteratorTransformer (92)
                           +- ColumnarExchange (90)
                              +- VeloxResizeBatches (89)
                                 +- ^ ProjectExecTransformer (87)
                                    +- ^ FlushableHashAggregateExecTransformer (86)
                                       +- ^ ProjectExecTransformer (85)
                                          +- ^ ShuffledHashJoinExecTransformer Inner BuildRight (84)
                                             :- ^ InputIteratorTransformer (80)
                                             :  +- ColumnarExchange (78)
                                             :     +- VeloxResizeBatches (77)
                                             :        +- ^ ProjectExecTransformer (75)
                                             :           +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (74)
                                             :              :- ^ FilterExecTransformer (70)
                                             :              :  +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.web_sales (69)
                                             :              +- ^ InputIteratorTransformer (73)
                                             :                 +- ReusedExchange (71)
                                             +- ^ InputIteratorTransformer (83)
                                                +- ReusedExchange (81)


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

(2) FilterExecTransformer
Input [2]: [ss_customer_sk#1, ss_sold_date_sk#2]
Arguments: isnotnull(ss_customer_sk#1)

(3) ReusedExchange [Reuses operator id: 109]
Output [2]: [d_date_sk#4, d_date#5]

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

(5) InputIteratorTransformer
Input [2]: [d_date_sk#4, d_date#5]

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

(7) ProjectExecTransformer
Output [3]: [hash(ss_customer_sk#1, 42) AS hash_partition_key#6, ss_customer_sk#1, d_date#5]
Input [4]: [ss_customer_sk#1, ss_sold_date_sk#2, d_date_sk#4, d_date#5]

(8) WholeStageCodegenTransformer (3)
Input [3]: [hash_partition_key#6, ss_customer_sk#1, d_date#5]
Arguments: false

(9) VeloxResizeBatches
Input [3]: [hash_partition_key#6, ss_customer_sk#1, d_date#5]
Arguments: 1024, 2147483647, 10485760

(10) ColumnarExchange
Input [3]: [hash_partition_key#6, ss_customer_sk#1, d_date#5]
Arguments: hashpartitioning(ss_customer_sk#1, 1), ENSURE_REQUIREMENTS, [ss_customer_sk#1, d_date#5], [plan_id=1], [shuffle_writer_type=hash]

(11) InputAdapter
Input [2]: [ss_customer_sk#1, d_date#5]

(12) InputIteratorTransformer
Input [2]: [ss_customer_sk#1, d_date#5]

(13) FileSourceScanExecTransformer parquet spark_catalog.default.customer
Output [3]: [c_customer_sk#7, c_first_name#8, c_last_name#9]
Batched: true
Location: InMemoryFileIndex [{warehouse_dir}/customer]
PushedFilters: [IsNotNull(c_customer_sk)]
ReadSchema: struct<c_customer_sk:int,c_first_name:string,c_last_name:string>

(14) FilterExecTransformer
Input [3]: [c_customer_sk#7, c_first_name#8, c_last_name#9]
Arguments: isnotnull(c_customer_sk#7)

(15) ProjectExecTransformer
Output [4]: [hash(c_customer_sk#7, 42) AS hash_partition_key#10, c_customer_sk#7, c_first_name#8, c_last_name#9]
Input [3]: [c_customer_sk#7, c_first_name#8, c_last_name#9]

(16) WholeStageCodegenTransformer (4)
Input [4]: [hash_partition_key#10, c_customer_sk#7, c_first_name#8, c_last_name#9]
Arguments: false

(17) VeloxResizeBatches
Input [4]: [hash_partition_key#10, c_customer_sk#7, c_first_name#8, c_last_name#9]
Arguments: 1024, 2147483647, 10485760

(18) ColumnarExchange
Input [4]: [hash_partition_key#10, c_customer_sk#7, c_first_name#8, c_last_name#9]
Arguments: hashpartitioning(c_customer_sk#7, 1), ENSURE_REQUIREMENTS, [c_customer_sk#7, c_first_name#8, c_last_name#9], [plan_id=2], [shuffle_writer_type=hash]

(19) InputAdapter
Input [3]: [c_customer_sk#7, c_first_name#8, c_last_name#9]

(20) InputIteratorTransformer
Input [3]: [c_customer_sk#7, c_first_name#8, c_last_name#9]

(21) ShuffledHashJoinExecTransformer
Left keys [1]: [ss_customer_sk#1]
Right keys [1]: [c_customer_sk#7]
Join type: Inner
Join condition: None

(22) ProjectExecTransformer
Output [3]: [c_last_name#9, c_first_name#8, d_date#5]
Input [5]: [ss_customer_sk#1, d_date#5, c_customer_sk#7, c_first_name#8, c_last_name#9]

(23) FlushableHashAggregateExecTransformer
Input [3]: [c_last_name#9, c_first_name#8, d_date#5]
Keys [3]: [c_last_name#9, c_first_name#8, d_date#5]
Functions: []
Aggregate Attributes: []
Results [3]: [c_last_name#9, c_first_name#8, d_date#5]

(24) ProjectExecTransformer
Output [4]: [hash(c_last_name#9, c_first_name#8, d_date#5, 42) AS hash_partition_key#11, c_last_name#9, c_first_name#8, d_date#5]
Input [3]: [c_last_name#9, c_first_name#8, d_date#5]

(25) WholeStageCodegenTransformer (5)
Input [4]: [hash_partition_key#11, c_last_name#9, c_first_name#8, d_date#5]
Arguments: false

(26) VeloxResizeBatches
Input [4]: [hash_partition_key#11, c_last_name#9, c_first_name#8, d_date#5]
Arguments: 1024, 2147483647, 10485760

(27) ColumnarExchange
Input [4]: [hash_partition_key#11, c_last_name#9, c_first_name#8, d_date#5]
Arguments: hashpartitioning(c_last_name#9, c_first_name#8, d_date#5, 1), ENSURE_REQUIREMENTS, [c_last_name#9, c_first_name#8, d_date#5], [plan_id=3], [shuffle_writer_type=hash]

(28) InputAdapter
Input [3]: [c_last_name#9, c_first_name#8, d_date#5]

(29) InputIteratorTransformer
Input [3]: [c_last_name#9, c_first_name#8, d_date#5]

(30) FlushableHashAggregateExecTransformer
Input [3]: [c_last_name#9, c_first_name#8, d_date#5]
Keys [3]: [c_last_name#9, c_first_name#8, d_date#5]
Functions: []
Aggregate Attributes: []
Results [3]: [c_last_name#9, c_first_name#8, d_date#5]

(31) ProjectExecTransformer
Output [4]: [hash(coalesce(c_last_name#9, ), isnull(c_last_name#9), coalesce(c_first_name#8, ), isnull(c_first_name#8), coalesce(d_date#5, 1970-01-01), isnull(d_date#5), 42) AS hash_partition_key#12, c_last_name#9, c_first_name#8, d_date#5]
Input [3]: [c_last_name#9, c_first_name#8, d_date#5]

(32) WholeStageCodegenTransformer (6)
Input [4]: [hash_partition_key#12, c_last_name#9, c_first_name#8, d_date#5]
Arguments: false

(33) VeloxResizeBatches
Input [4]: [hash_partition_key#12, c_last_name#9, c_first_name#8, d_date#5]
Arguments: 1024, 2147483647, 10485760

(34) ColumnarExchange
Input [4]: [hash_partition_key#12, c_last_name#9, c_first_name#8, d_date#5]
Arguments: hashpartitioning(coalesce(c_last_name#9, ), isnull(c_last_name#9), coalesce(c_first_name#8, ), isnull(c_first_name#8), coalesce(d_date#5, 1970-01-01), isnull(d_date#5), 1), ENSURE_REQUIREMENTS, [c_last_name#9, c_first_name#8, d_date#5], [plan_id=4], [shuffle_writer_type=hash]

(35) InputAdapter
Input [3]: [c_last_name#9, c_first_name#8, d_date#5]

(36) InputIteratorTransformer
Input [3]: [c_last_name#9, c_first_name#8, d_date#5]

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

(38) FilterExecTransformer
Input [2]: [cs_bill_customer_sk#13, cs_sold_date_sk#14]
Arguments: isnotnull(cs_bill_customer_sk#13)

(39) ReusedExchange [Reuses operator id: 109]
Output [2]: [d_date_sk#15, d_date#16]

(40) InputAdapter
Input [2]: [d_date_sk#15, d_date#16]

(41) InputIteratorTransformer
Input [2]: [d_date_sk#15, d_date#16]

(42) BroadcastHashJoinExecTransformer
Left keys [1]: [cs_sold_date_sk#14]
Right keys [1]: [d_date_sk#15]
Join type: Inner
Join condition: None

(43) ProjectExecTransformer
Output [3]: [hash(cs_bill_customer_sk#13, 42) AS hash_partition_key#17, cs_bill_customer_sk#13, d_date#16]
Input [4]: [cs_bill_customer_sk#13, cs_sold_date_sk#14, d_date_sk#15, d_date#16]

(44) WholeStageCodegenTransformer (9)
Input [3]: [hash_partition_key#17, cs_bill_customer_sk#13, d_date#16]
Arguments: false

(45) VeloxResizeBatches
Input [3]: [hash_partition_key#17, cs_bill_customer_sk#13, d_date#16]
Arguments: 1024, 2147483647, 10485760

(46) ColumnarExchange
Input [3]: [hash_partition_key#17, cs_bill_customer_sk#13, d_date#16]
Arguments: hashpartitioning(cs_bill_customer_sk#13, 1), ENSURE_REQUIREMENTS, [cs_bill_customer_sk#13, d_date#16], [plan_id=5], [shuffle_writer_type=hash]

(47) InputAdapter
Input [2]: [cs_bill_customer_sk#13, d_date#16]

(48) InputIteratorTransformer
Input [2]: [cs_bill_customer_sk#13, d_date#16]

(49) ReusedExchange [Reuses operator id: 18]
Output [3]: [c_customer_sk#18, c_first_name#19, c_last_name#20]

(50) InputAdapter
Input [3]: [c_customer_sk#18, c_first_name#19, c_last_name#20]

(51) InputIteratorTransformer
Input [3]: [c_customer_sk#18, c_first_name#19, c_last_name#20]

(52) ShuffledHashJoinExecTransformer
Left keys [1]: [cs_bill_customer_sk#13]
Right keys [1]: [c_customer_sk#18]
Join type: Inner
Join condition: None

(53) ProjectExecTransformer
Output [3]: [c_last_name#20, c_first_name#19, d_date#16]
Input [5]: [cs_bill_customer_sk#13, d_date#16, c_customer_sk#18, c_first_name#19, c_last_name#20]

(54) FlushableHashAggregateExecTransformer
Input [3]: [c_last_name#20, c_first_name#19, d_date#16]
Keys [3]: [c_last_name#20, c_first_name#19, d_date#16]
Functions: []
Aggregate Attributes: []
Results [3]: [c_last_name#20, c_first_name#19, d_date#16]

(55) ProjectExecTransformer
Output [4]: [hash(c_last_name#20, c_first_name#19, d_date#16, 42) AS hash_partition_key#21, c_last_name#20, c_first_name#19, d_date#16]
Input [3]: [c_last_name#20, c_first_name#19, d_date#16]

(56) WholeStageCodegenTransformer (11)
Input [4]: [hash_partition_key#21, c_last_name#20, c_first_name#19, d_date#16]
Arguments: false

(57) VeloxResizeBatches
Input [4]: [hash_partition_key#21, c_last_name#20, c_first_name#19, d_date#16]
Arguments: 1024, 2147483647, 10485760

(58) ColumnarExchange
Input [4]: [hash_partition_key#21, c_last_name#20, c_first_name#19, d_date#16]
Arguments: hashpartitioning(c_last_name#20, c_first_name#19, d_date#16, 1), ENSURE_REQUIREMENTS, [c_last_name#20, c_first_name#19, d_date#16], [plan_id=6], [shuffle_writer_type=hash]

(59) InputAdapter
Input [3]: [c_last_name#20, c_first_name#19, d_date#16]

(60) InputIteratorTransformer
Input [3]: [c_last_name#20, c_first_name#19, d_date#16]

(61) FlushableHashAggregateExecTransformer
Input [3]: [c_last_name#20, c_first_name#19, d_date#16]
Keys [3]: [c_last_name#20, c_first_name#19, d_date#16]
Functions: []
Aggregate Attributes: []
Results [3]: [c_last_name#20, c_first_name#19, d_date#16]

(62) ProjectExecTransformer
Output [4]: [hash(coalesce(c_last_name#20, ), isnull(c_last_name#20), coalesce(c_first_name#19, ), isnull(c_first_name#19), coalesce(d_date#16, 1970-01-01), isnull(d_date#16), 42) AS hash_partition_key#22, c_last_name#20, c_first_name#19, d_date#16]
Input [3]: [c_last_name#20, c_first_name#19, d_date#16]

(63) WholeStageCodegenTransformer (12)
Input [4]: [hash_partition_key#22, c_last_name#20, c_first_name#19, d_date#16]
Arguments: false

(64) VeloxResizeBatches
Input [4]: [hash_partition_key#22, c_last_name#20, c_first_name#19, d_date#16]
Arguments: 1024, 2147483647, 10485760

(65) ColumnarExchange
Input [4]: [hash_partition_key#22, c_last_name#20, c_first_name#19, d_date#16]
Arguments: hashpartitioning(coalesce(c_last_name#20, ), isnull(c_last_name#20), coalesce(c_first_name#19, ), isnull(c_first_name#19), coalesce(d_date#16, 1970-01-01), isnull(d_date#16), 1), ENSURE_REQUIREMENTS, [c_last_name#20, c_first_name#19, d_date#16], [plan_id=7], [shuffle_writer_type=hash]

(66) InputAdapter
Input [3]: [c_last_name#20, c_first_name#19, d_date#16]

(67) InputIteratorTransformer
Input [3]: [c_last_name#20, c_first_name#19, d_date#16]

(68) ShuffledHashJoinExecTransformer
Left keys [6]: [coalesce(c_last_name#9, ), isnull(c_last_name#9), coalesce(c_first_name#8, ), isnull(c_first_name#8), coalesce(d_date#5, 1970-01-01), isnull(d_date#5)]
Right keys [6]: [coalesce(c_last_name#20, ), isnull(c_last_name#20), coalesce(c_first_name#19, ), isnull(c_first_name#19), coalesce(d_date#16, 1970-01-01), isnull(d_date#16)]
Join type: LeftSemi
Join condition: None

(69) FileSourceScanExecTransformer parquet spark_catalog.default.web_sales
Output [2]: [ws_bill_customer_sk#23, ws_sold_date_sk#24]
Batched: true
Location: InMemoryFileIndex []
PartitionFilters: [isnotnull(ws_sold_date_sk#24), dynamicpruningexpression(ws_sold_date_sk#24 IN dynamicpruning#3)]
PushedFilters: [IsNotNull(ws_bill_customer_sk)]
ReadSchema: struct<ws_bill_customer_sk:int>

(70) FilterExecTransformer
Input [2]: [ws_bill_customer_sk#23, ws_sold_date_sk#24]
Arguments: isnotnull(ws_bill_customer_sk#23)

(71) ReusedExchange [Reuses operator id: 109]
Output [2]: [d_date_sk#25, d_date#26]

(72) InputAdapter
Input [2]: [d_date_sk#25, d_date#26]

(73) InputIteratorTransformer
Input [2]: [d_date_sk#25, d_date#26]

(74) BroadcastHashJoinExecTransformer
Left keys [1]: [ws_sold_date_sk#24]
Right keys [1]: [d_date_sk#25]
Join type: Inner
Join condition: None

(75) ProjectExecTransformer
Output [3]: [hash(ws_bill_customer_sk#23, 42) AS hash_partition_key#27, ws_bill_customer_sk#23, d_date#26]
Input [4]: [ws_bill_customer_sk#23, ws_sold_date_sk#24, d_date_sk#25, d_date#26]

(76) WholeStageCodegenTransformer (15)
Input [3]: [hash_partition_key#27, ws_bill_customer_sk#23, d_date#26]
Arguments: false

(77) VeloxResizeBatches
Input [3]: [hash_partition_key#27, ws_bill_customer_sk#23, d_date#26]
Arguments: 1024, 2147483647, 10485760

(78) ColumnarExchange
Input [3]: [hash_partition_key#27, ws_bill_customer_sk#23, d_date#26]
Arguments: hashpartitioning(ws_bill_customer_sk#23, 1), ENSURE_REQUIREMENTS, [ws_bill_customer_sk#23, d_date#26], [plan_id=8], [shuffle_writer_type=hash]

(79) InputAdapter
Input [2]: [ws_bill_customer_sk#23, d_date#26]

(80) InputIteratorTransformer
Input [2]: [ws_bill_customer_sk#23, d_date#26]

(81) ReusedExchange [Reuses operator id: 18]
Output [3]: [c_customer_sk#28, c_first_name#29, c_last_name#30]

(82) InputAdapter
Input [3]: [c_customer_sk#28, c_first_name#29, c_last_name#30]

(83) InputIteratorTransformer
Input [3]: [c_customer_sk#28, c_first_name#29, c_last_name#30]

(84) ShuffledHashJoinExecTransformer
Left keys [1]: [ws_bill_customer_sk#23]
Right keys [1]: [c_customer_sk#28]
Join type: Inner
Join condition: None

(85) ProjectExecTransformer
Output [3]: [c_last_name#30, c_first_name#29, d_date#26]
Input [5]: [ws_bill_customer_sk#23, d_date#26, c_customer_sk#28, c_first_name#29, c_last_name#30]

(86) FlushableHashAggregateExecTransformer
Input [3]: [c_last_name#30, c_first_name#29, d_date#26]
Keys [3]: [c_last_name#30, c_first_name#29, d_date#26]
Functions: []
Aggregate Attributes: []
Results [3]: [c_last_name#30, c_first_name#29, d_date#26]

(87) ProjectExecTransformer
Output [4]: [hash(c_last_name#30, c_first_name#29, d_date#26, 42) AS hash_partition_key#31, c_last_name#30, c_first_name#29, d_date#26]
Input [3]: [c_last_name#30, c_first_name#29, d_date#26]

(88) WholeStageCodegenTransformer (17)
Input [4]: [hash_partition_key#31, c_last_name#30, c_first_name#29, d_date#26]
Arguments: false

(89) VeloxResizeBatches
Input [4]: [hash_partition_key#31, c_last_name#30, c_first_name#29, d_date#26]
Arguments: 1024, 2147483647, 10485760

(90) ColumnarExchange
Input [4]: [hash_partition_key#31, c_last_name#30, c_first_name#29, d_date#26]
Arguments: hashpartitioning(c_last_name#30, c_first_name#29, d_date#26, 1), ENSURE_REQUIREMENTS, [c_last_name#30, c_first_name#29, d_date#26], [plan_id=9], [shuffle_writer_type=hash]

(91) InputAdapter
Input [3]: [c_last_name#30, c_first_name#29, d_date#26]

(92) InputIteratorTransformer
Input [3]: [c_last_name#30, c_first_name#29, d_date#26]

(93) FlushableHashAggregateExecTransformer
Input [3]: [c_last_name#30, c_first_name#29, d_date#26]
Keys [3]: [c_last_name#30, c_first_name#29, d_date#26]
Functions: []
Aggregate Attributes: []
Results [3]: [c_last_name#30, c_first_name#29, d_date#26]

(94) ProjectExecTransformer
Output [4]: [hash(coalesce(c_last_name#30, ), isnull(c_last_name#30), coalesce(c_first_name#29, ), isnull(c_first_name#29), coalesce(d_date#26, 1970-01-01), isnull(d_date#26), 42) AS hash_partition_key#32, c_last_name#30, c_first_name#29, d_date#26]
Input [3]: [c_last_name#30, c_first_name#29, d_date#26]

(95) WholeStageCodegenTransformer (18)
Input [4]: [hash_partition_key#32, c_last_name#30, c_first_name#29, d_date#26]
Arguments: false

(96) VeloxResizeBatches
Input [4]: [hash_partition_key#32, c_last_name#30, c_first_name#29, d_date#26]
Arguments: 1024, 2147483647, 10485760

(97) ColumnarExchange
Input [4]: [hash_partition_key#32, c_last_name#30, c_first_name#29, d_date#26]
Arguments: hashpartitioning(coalesce(c_last_name#30, ), isnull(c_last_name#30), coalesce(c_first_name#29, ), isnull(c_first_name#29), coalesce(d_date#26, 1970-01-01), isnull(d_date#26), 1), ENSURE_REQUIREMENTS, [c_last_name#30, c_first_name#29, d_date#26], [plan_id=10], [shuffle_writer_type=hash]

(98) InputAdapter
Input [3]: [c_last_name#30, c_first_name#29, d_date#26]

(99) InputIteratorTransformer
Input [3]: [c_last_name#30, c_first_name#29, d_date#26]

(100) ShuffledHashJoinExecTransformer
Left keys [6]: [coalesce(c_last_name#9, ), isnull(c_last_name#9), coalesce(c_first_name#8, ), isnull(c_first_name#8), coalesce(d_date#5, 1970-01-01), isnull(d_date#5)]
Right keys [6]: [coalesce(c_last_name#30, ), isnull(c_last_name#30), coalesce(c_first_name#29, ), isnull(c_first_name#29), coalesce(d_date#26, 1970-01-01), isnull(d_date#26)]
Join type: LeftSemi
Join condition: None

(101) ProjectExecTransformer
Output: []
Input [3]: [c_last_name#9, c_first_name#8, d_date#5]

(102) RegularHashAggregateExecTransformer
Input: []
Keys: []
Functions [1]: [count(1)]
Aggregate Attributes [1]: [count(1)#33]
Results [1]: [count(1)#33 AS count(1)#34]

(103) WholeStageCodegenTransformer (19)
Input [1]: [count(1)#34]
Arguments: false

(104) VeloxColumnarToRow
Input [1]: [count(1)#34]

===== Subqueries =====

Subquery:1 Hosting operator id = 1 Hosting Expression = ss_sold_date_sk#2 IN dynamicpruning#3
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#4, d_date#5, d_month_seq#35]
Batched: true
Location: InMemoryFileIndex [{warehouse_dir}/date_dim]
PushedFilters: [IsNotNull(d_month_seq), GreaterThanOrEqual(d_month_seq,1200), LessThanOrEqual(d_month_seq,1211), IsNotNull(d_date_sk)]
ReadSchema: struct<d_date_sk:int,d_date:date,d_month_seq:int>

(106) FilterExecTransformer
Input [3]: [d_date_sk#4, d_date#5, d_month_seq#35]
Arguments: (((isnotnull(d_month_seq#35) AND (d_month_seq#35 >= 1200)) AND (d_month_seq#35 <= 1211)) AND isnotnull(d_date_sk#4))

(107) ProjectExecTransformer
Output [2]: [d_date_sk#4, d_date#5]
Input [3]: [d_date_sk#4, d_date#5, d_month_seq#35]

(108) WholeStageCodegenTransformer (1)
Input [2]: [d_date_sk#4, d_date#5]
Arguments: false

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

Subquery:2 Hosting operator id = 37 Hosting Expression = cs_sold_date_sk#14 IN dynamicpruning#3

Subquery:3 Hosting operator id = 69 Hosting Expression = ws_sold_date_sk#24 IN dynamicpruning#3


