== Physical Plan ==
VeloxColumnarToRow (199)
+- ^ SortExecTransformer (197)
   +- ^ InputIteratorTransformer (196)
      +- ColumnarExchange (194)
         +- VeloxResizeBatches (193)
            +- ^ ProjectExecTransformer (191)
               +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (190)
                  :- ^ ProjectExecTransformer (95)
                  :  +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (94)
                  :     :- ^ ProjectExecTransformer (63)
                  :     :  +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (62)
                  :     :     :- ^ ProjectExecTransformer (31)
                  :     :     :  +- ^ RegularHashAggregateExecTransformer (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_address (13)
                  :     :     +- ^ InputIteratorTransformer (61)
                  :     :        +- ColumnarBroadcastExchange (59)
                  :     :           +- ^ ProjectExecTransformer (57)
                  :     :              +- ^ RegularHashAggregateExecTransformer (56)
                  :     :                 +- ^ InputIteratorTransformer (55)
                  :     :                    +- ColumnarExchange (53)
                  :     :                       +- VeloxResizeBatches (52)
                  :     :                          +- ^ ProjectExecTransformer (50)
                  :     :                             +- ^ FlushableHashAggregateExecTransformer (49)
                  :     :                                +- ^ ProjectExecTransformer (48)
                  :     :                                   +- ^ ShuffledHashJoinExecTransformer Inner BuildRight (47)
                  :     :                                      :- ^ InputIteratorTransformer (43)
                  :     :                                      :  +- ColumnarExchange (41)
                  :     :                                      :     +- VeloxResizeBatches (40)
                  :     :                                      :        +- ^ ProjectExecTransformer (38)
                  :     :                                      :           +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (37)
                  :     :                                      :              :- ^ FilterExecTransformer (33)
                  :     :                                      :              :  +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.store_sales (32)
                  :     :                                      :              +- ^ InputIteratorTransformer (36)
                  :     :                                      :                 +- ReusedExchange (34)
                  :     :                                      +- ^ InputIteratorTransformer (46)
                  :     :                                         +- ReusedExchange (44)
                  :     +- ^ InputIteratorTransformer (93)
                  :        +- ColumnarBroadcastExchange (91)
                  :           +- ^ ProjectExecTransformer (89)
                  :              +- ^ RegularHashAggregateExecTransformer (88)
                  :                 +- ^ InputIteratorTransformer (87)
                  :                    +- ColumnarExchange (85)
                  :                       +- VeloxResizeBatches (84)
                  :                          +- ^ ProjectExecTransformer (82)
                  :                             +- ^ FlushableHashAggregateExecTransformer (81)
                  :                                +- ^ ProjectExecTransformer (80)
                  :                                   +- ^ ShuffledHashJoinExecTransformer Inner BuildRight (79)
                  :                                      :- ^ InputIteratorTransformer (75)
                  :                                      :  +- ColumnarExchange (73)
                  :                                      :     +- VeloxResizeBatches (72)
                  :                                      :        +- ^ ProjectExecTransformer (70)
                  :                                      :           +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (69)
                  :                                      :              :- ^ FilterExecTransformer (65)
                  :                                      :              :  +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.store_sales (64)
                  :                                      :              +- ^ InputIteratorTransformer (68)
                  :                                      :                 +- ReusedExchange (66)
                  :                                      +- ^ InputIteratorTransformer (78)
                  :                                         +- ReusedExchange (76)
                  +- ^ InputIteratorTransformer (189)
                     +- ColumnarBroadcastExchange (187)
                        +- ^ ProjectExecTransformer (185)
                           +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (184)
                              :- ^ ProjectExecTransformer (153)
                              :  +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (152)
                              :     :- ^ ProjectExecTransformer (121)
                              :     :  +- ^ RegularHashAggregateExecTransformer (120)
                              :     :     +- ^ InputIteratorTransformer (119)
                              :     :        +- ColumnarExchange (117)
                              :     :           +- VeloxResizeBatches (116)
                              :     :              +- ^ ProjectExecTransformer (114)
                              :     :                 +- ^ FlushableHashAggregateExecTransformer (113)
                              :     :                    +- ^ ProjectExecTransformer (112)
                              :     :                       +- ^ ShuffledHashJoinExecTransformer Inner BuildRight (111)
                              :     :                          :- ^ InputIteratorTransformer (107)
                              :     :                          :  +- ColumnarExchange (105)
                              :     :                          :     +- VeloxResizeBatches (104)
                              :     :                          :        +- ^ ProjectExecTransformer (102)
                              :     :                          :           +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (101)
                              :     :                          :              :- ^ FilterExecTransformer (97)
                              :     :                          :              :  +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.web_sales (96)
                              :     :                          :              +- ^ InputIteratorTransformer (100)
                              :     :                          :                 +- ReusedExchange (98)
                              :     :                          +- ^ InputIteratorTransformer (110)
                              :     :                             +- ReusedExchange (108)
                              :     +- ^ InputIteratorTransformer (151)
                              :        +- ColumnarBroadcastExchange (149)
                              :           +- ^ ProjectExecTransformer (147)
                              :              +- ^ RegularHashAggregateExecTransformer (146)
                              :                 +- ^ InputIteratorTransformer (145)
                              :                    +- ColumnarExchange (143)
                              :                       +- VeloxResizeBatches (142)
                              :                          +- ^ ProjectExecTransformer (140)
                              :                             +- ^ FlushableHashAggregateExecTransformer (139)
                              :                                +- ^ ProjectExecTransformer (138)
                              :                                   +- ^ ShuffledHashJoinExecTransformer Inner BuildRight (137)
                              :                                      :- ^ InputIteratorTransformer (133)
                              :                                      :  +- ColumnarExchange (131)
                              :                                      :     +- VeloxResizeBatches (130)
                              :                                      :        +- ^ ProjectExecTransformer (128)
                              :                                      :           +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (127)
                              :                                      :              :- ^ FilterExecTransformer (123)
                              :                                      :              :  +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.web_sales (122)
                              :                                      :              +- ^ InputIteratorTransformer (126)
                              :                                      :                 +- ReusedExchange (124)
                              :                                      +- ^ InputIteratorTransformer (136)
                              :                                         +- ReusedExchange (134)
                              +- ^ InputIteratorTransformer (183)
                                 +- ColumnarBroadcastExchange (181)
                                    +- ^ ProjectExecTransformer (179)
                                       +- ^ RegularHashAggregateExecTransformer (178)
                                          +- ^ InputIteratorTransformer (177)
                                             +- ColumnarExchange (175)
                                                +- VeloxResizeBatches (174)
                                                   +- ^ ProjectExecTransformer (172)
                                                      +- ^ FlushableHashAggregateExecTransformer (171)
                                                         +- ^ ProjectExecTransformer (170)
                                                            +- ^ ShuffledHashJoinExecTransformer Inner BuildRight (169)
                                                               :- ^ InputIteratorTransformer (165)
                                                               :  +- ColumnarExchange (163)
                                                               :     +- VeloxResizeBatches (162)
                                                               :        +- ^ ProjectExecTransformer (160)
                                                               :           +- ^ BroadcastHashJoinExecTransformer Inner BuildRight (159)
                                                               :              :- ^ FilterExecTransformer (155)
                                                               :              :  +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.web_sales (154)
                                                               :              +- ^ InputIteratorTransformer (158)
                                                               :                 +- ReusedExchange (156)
                                                               +- ^ InputIteratorTransformer (168)
                                                                  +- ReusedExchange (166)


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

(2) FilterExecTransformer
Input [3]: [ss_addr_sk#1, ss_ext_sales_price#2, ss_sold_date_sk#3]
Arguments: isnotnull(ss_addr_sk#1)

(3) ReusedExchange [Reuses operator id: 203]
Output [3]: [d_date_sk#5, d_year#6, d_qoy#7]

(4) InputAdapter
Input [3]: [d_date_sk#5, d_year#6, d_qoy#7]

(5) InputIteratorTransformer
Input [3]: [d_date_sk#5, d_year#6, d_qoy#7]

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

(7) ProjectExecTransformer
Output [5]: [hash(ss_addr_sk#1, 42) AS hash_partition_key#8, ss_addr_sk#1, ss_ext_sales_price#2, d_year#6, d_qoy#7]
Input [6]: [ss_addr_sk#1, ss_ext_sales_price#2, ss_sold_date_sk#3, d_date_sk#5, d_year#6, d_qoy#7]

(8) WholeStageCodegenTransformer (3)
Input [5]: [hash_partition_key#8, ss_addr_sk#1, ss_ext_sales_price#2, d_year#6, d_qoy#7]
Arguments: false

(9) VeloxResizeBatches
Input [5]: [hash_partition_key#8, ss_addr_sk#1, ss_ext_sales_price#2, d_year#6, d_qoy#7]
Arguments: 1024, 2147483647, 10485760

(10) ColumnarExchange
Input [5]: [hash_partition_key#8, ss_addr_sk#1, ss_ext_sales_price#2, d_year#6, d_qoy#7]
Arguments: hashpartitioning(ss_addr_sk#1, 1), ENSURE_REQUIREMENTS, [ss_addr_sk#1, ss_ext_sales_price#2, d_year#6, d_qoy#7], [plan_id=1], [shuffle_writer_type=hash]

(11) InputAdapter
Input [4]: [ss_addr_sk#1, ss_ext_sales_price#2, d_year#6, d_qoy#7]

(12) InputIteratorTransformer
Input [4]: [ss_addr_sk#1, ss_ext_sales_price#2, d_year#6, d_qoy#7]

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

(14) FilterExecTransformer
Input [2]: [ca_address_sk#9, ca_county#10]
Arguments: (isnotnull(ca_address_sk#9) AND isnotnull(ca_county#10))

(15) ProjectExecTransformer
Output [3]: [hash(ca_address_sk#9, 42) AS hash_partition_key#11, ca_address_sk#9, ca_county#10]
Input [2]: [ca_address_sk#9, ca_county#10]

(16) WholeStageCodegenTransformer (4)
Input [3]: [hash_partition_key#11, ca_address_sk#9, ca_county#10]
Arguments: false

(17) VeloxResizeBatches
Input [3]: [hash_partition_key#11, ca_address_sk#9, ca_county#10]
Arguments: 1024, 2147483647, 10485760

(18) ColumnarExchange
Input [3]: [hash_partition_key#11, ca_address_sk#9, ca_county#10]
Arguments: hashpartitioning(ca_address_sk#9, 1), ENSURE_REQUIREMENTS, [ca_address_sk#9, ca_county#10], [plan_id=2], [shuffle_writer_type=hash]

(19) InputAdapter
Input [2]: [ca_address_sk#9, ca_county#10]

(20) InputIteratorTransformer
Input [2]: [ca_address_sk#9, ca_county#10]

(21) ShuffledHashJoinExecTransformer
Left keys [1]: [ss_addr_sk#1]
Right keys [1]: [ca_address_sk#9]
Join type: Inner
Join condition: None

(22) ProjectExecTransformer
Output [4]: [d_year#6, d_qoy#7, ca_county#10, UnscaledValue(ss_ext_sales_price#2) AS _pre_1#12]
Input [6]: [ss_addr_sk#1, ss_ext_sales_price#2, d_year#6, d_qoy#7, ca_address_sk#9, ca_county#10]

(23) FlushableHashAggregateExecTransformer
Input [4]: [d_year#6, d_qoy#7, ca_county#10, _pre_1#12]
Keys [3]: [ca_county#10, d_qoy#7, d_year#6]
Functions [1]: [partial_sum(_pre_1#12)]
Aggregate Attributes [1]: [sum#13]
Results [4]: [ca_county#10, d_qoy#7, d_year#6, sum#14]

(24) ProjectExecTransformer
Output [5]: [hash(ca_county#10, d_qoy#7, d_year#6, 42) AS hash_partition_key#15, ca_county#10, d_qoy#7, d_year#6, sum#14]
Input [4]: [ca_county#10, d_qoy#7, d_year#6, sum#14]

(25) WholeStageCodegenTransformer (5)
Input [5]: [hash_partition_key#15, ca_county#10, d_qoy#7, d_year#6, sum#14]
Arguments: false

(26) VeloxResizeBatches
Input [5]: [hash_partition_key#15, ca_county#10, d_qoy#7, d_year#6, sum#14]
Arguments: 1024, 2147483647, 10485760

(27) ColumnarExchange
Input [5]: [hash_partition_key#15, ca_county#10, d_qoy#7, d_year#6, sum#14]
Arguments: hashpartitioning(ca_county#10, d_qoy#7, d_year#6, 1), ENSURE_REQUIREMENTS, [ca_county#10, d_qoy#7, d_year#6, sum#14], [plan_id=3], [shuffle_writer_type=hash]

(28) InputAdapter
Input [4]: [ca_county#10, d_qoy#7, d_year#6, sum#14]

(29) InputIteratorTransformer
Input [4]: [ca_county#10, d_qoy#7, d_year#6, sum#14]

(30) RegularHashAggregateExecTransformer
Input [4]: [ca_county#10, d_qoy#7, d_year#6, sum#14]
Keys [3]: [ca_county#10, d_qoy#7, d_year#6]
Functions [1]: [sum(UnscaledValue(ss_ext_sales_price#2))]
Aggregate Attributes [1]: [sum(UnscaledValue(ss_ext_sales_price#2))#16]
Results [4]: [ca_county#10, d_qoy#7, d_year#6, sum(UnscaledValue(ss_ext_sales_price#2))#16]

(31) ProjectExecTransformer
Output [2]: [ca_county#10, MakeDecimal(sum(UnscaledValue(ss_ext_sales_price#2))#16,17,2) AS store_sales#17]
Input [4]: [ca_county#10, d_qoy#7, d_year#6, sum(UnscaledValue(ss_ext_sales_price#2))#16]

(32) FileSourceScanExecTransformer parquet spark_catalog.default.store_sales
Output [3]: [ss_addr_sk#18, ss_ext_sales_price#19, ss_sold_date_sk#20]
Batched: true
Location: InMemoryFileIndex []
PartitionFilters: [isnotnull(ss_sold_date_sk#20), dynamicpruningexpression(ss_sold_date_sk#20 IN dynamicpruning#21)]
PushedFilters: [IsNotNull(ss_addr_sk)]
ReadSchema: struct<ss_addr_sk:int,ss_ext_sales_price:decimal(7,2)>

(33) FilterExecTransformer
Input [3]: [ss_addr_sk#18, ss_ext_sales_price#19, ss_sold_date_sk#20]
Arguments: isnotnull(ss_addr_sk#18)

(34) ReusedExchange [Reuses operator id: 207]
Output [3]: [d_date_sk#22, d_year#23, d_qoy#24]

(35) InputAdapter
Input [3]: [d_date_sk#22, d_year#23, d_qoy#24]

(36) InputIteratorTransformer
Input [3]: [d_date_sk#22, d_year#23, d_qoy#24]

(37) BroadcastHashJoinExecTransformer
Left keys [1]: [ss_sold_date_sk#20]
Right keys [1]: [d_date_sk#22]
Join type: Inner
Join condition: None

(38) ProjectExecTransformer
Output [5]: [hash(ss_addr_sk#18, 42) AS hash_partition_key#25, ss_addr_sk#18, ss_ext_sales_price#19, d_year#23, d_qoy#24]
Input [6]: [ss_addr_sk#18, ss_ext_sales_price#19, ss_sold_date_sk#20, d_date_sk#22, d_year#23, d_qoy#24]

(39) WholeStageCodegenTransformer (8)
Input [5]: [hash_partition_key#25, ss_addr_sk#18, ss_ext_sales_price#19, d_year#23, d_qoy#24]
Arguments: false

(40) VeloxResizeBatches
Input [5]: [hash_partition_key#25, ss_addr_sk#18, ss_ext_sales_price#19, d_year#23, d_qoy#24]
Arguments: 1024, 2147483647, 10485760

(41) ColumnarExchange
Input [5]: [hash_partition_key#25, ss_addr_sk#18, ss_ext_sales_price#19, d_year#23, d_qoy#24]
Arguments: hashpartitioning(ss_addr_sk#18, 1), ENSURE_REQUIREMENTS, [ss_addr_sk#18, ss_ext_sales_price#19, d_year#23, d_qoy#24], [plan_id=4], [shuffle_writer_type=hash]

(42) InputAdapter
Input [4]: [ss_addr_sk#18, ss_ext_sales_price#19, d_year#23, d_qoy#24]

(43) InputIteratorTransformer
Input [4]: [ss_addr_sk#18, ss_ext_sales_price#19, d_year#23, d_qoy#24]

(44) ReusedExchange [Reuses operator id: 18]
Output [2]: [ca_address_sk#26, ca_county#27]

(45) InputAdapter
Input [2]: [ca_address_sk#26, ca_county#27]

(46) InputIteratorTransformer
Input [2]: [ca_address_sk#26, ca_county#27]

(47) ShuffledHashJoinExecTransformer
Left keys [1]: [ss_addr_sk#18]
Right keys [1]: [ca_address_sk#26]
Join type: Inner
Join condition: None

(48) ProjectExecTransformer
Output [4]: [d_year#23, d_qoy#24, ca_county#27, UnscaledValue(ss_ext_sales_price#19) AS _pre_2#28]
Input [6]: [ss_addr_sk#18, ss_ext_sales_price#19, d_year#23, d_qoy#24, ca_address_sk#26, ca_county#27]

(49) FlushableHashAggregateExecTransformer
Input [4]: [d_year#23, d_qoy#24, ca_county#27, _pre_2#28]
Keys [3]: [ca_county#27, d_qoy#24, d_year#23]
Functions [1]: [partial_sum(_pre_2#28)]
Aggregate Attributes [1]: [sum#29]
Results [4]: [ca_county#27, d_qoy#24, d_year#23, sum#30]

(50) ProjectExecTransformer
Output [5]: [hash(ca_county#27, d_qoy#24, d_year#23, 42) AS hash_partition_key#31, ca_county#27, d_qoy#24, d_year#23, sum#30]
Input [4]: [ca_county#27, d_qoy#24, d_year#23, sum#30]

(51) WholeStageCodegenTransformer (10)
Input [5]: [hash_partition_key#31, ca_county#27, d_qoy#24, d_year#23, sum#30]
Arguments: false

(52) VeloxResizeBatches
Input [5]: [hash_partition_key#31, ca_county#27, d_qoy#24, d_year#23, sum#30]
Arguments: 1024, 2147483647, 10485760

(53) ColumnarExchange
Input [5]: [hash_partition_key#31, ca_county#27, d_qoy#24, d_year#23, sum#30]
Arguments: hashpartitioning(ca_county#27, d_qoy#24, d_year#23, 1), ENSURE_REQUIREMENTS, [ca_county#27, d_qoy#24, d_year#23, sum#30], [plan_id=5], [shuffle_writer_type=hash]

(54) InputAdapter
Input [4]: [ca_county#27, d_qoy#24, d_year#23, sum#30]

(55) InputIteratorTransformer
Input [4]: [ca_county#27, d_qoy#24, d_year#23, sum#30]

(56) RegularHashAggregateExecTransformer
Input [4]: [ca_county#27, d_qoy#24, d_year#23, sum#30]
Keys [3]: [ca_county#27, d_qoy#24, d_year#23]
Functions [1]: [sum(UnscaledValue(ss_ext_sales_price#19))]
Aggregate Attributes [1]: [sum(UnscaledValue(ss_ext_sales_price#19))#16]
Results [4]: [ca_county#27, d_qoy#24, d_year#23, sum(UnscaledValue(ss_ext_sales_price#19))#16]

(57) ProjectExecTransformer
Output [2]: [ca_county#27, MakeDecimal(sum(UnscaledValue(ss_ext_sales_price#19))#16,17,2) AS store_sales#32]
Input [4]: [ca_county#27, d_qoy#24, d_year#23, sum(UnscaledValue(ss_ext_sales_price#19))#16]

(58) WholeStageCodegenTransformer (11)
Input [2]: [ca_county#27, store_sales#32]
Arguments: false

(59) ColumnarBroadcastExchange
Input [2]: [ca_county#27, store_sales#32]
Arguments: HashedRelationBroadcastMode(List(input[0, string, true]),false), [plan_id=6]

(60) InputAdapter
Input [2]: [ca_county#27, store_sales#32]

(61) InputIteratorTransformer
Input [2]: [ca_county#27, store_sales#32]

(62) BroadcastHashJoinExecTransformer
Left keys [1]: [ca_county#10]
Right keys [1]: [ca_county#27]
Join type: Inner
Join condition: None

(63) ProjectExecTransformer
Output [3]: [ca_county#10, store_sales#17, store_sales#32]
Input [4]: [ca_county#10, store_sales#17, ca_county#27, store_sales#32]

(64) FileSourceScanExecTransformer parquet spark_catalog.default.store_sales
Output [3]: [ss_addr_sk#33, ss_ext_sales_price#34, ss_sold_date_sk#35]
Batched: true
Location: InMemoryFileIndex []
PartitionFilters: [isnotnull(ss_sold_date_sk#35), dynamicpruningexpression(ss_sold_date_sk#35 IN dynamicpruning#36)]
PushedFilters: [IsNotNull(ss_addr_sk)]
ReadSchema: struct<ss_addr_sk:int,ss_ext_sales_price:decimal(7,2)>

(65) FilterExecTransformer
Input [3]: [ss_addr_sk#33, ss_ext_sales_price#34, ss_sold_date_sk#35]
Arguments: isnotnull(ss_addr_sk#33)

(66) ReusedExchange [Reuses operator id: 211]
Output [3]: [d_date_sk#37, d_year#38, d_qoy#39]

(67) InputAdapter
Input [3]: [d_date_sk#37, d_year#38, d_qoy#39]

(68) InputIteratorTransformer
Input [3]: [d_date_sk#37, d_year#38, d_qoy#39]

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

(70) ProjectExecTransformer
Output [5]: [hash(ss_addr_sk#33, 42) AS hash_partition_key#40, ss_addr_sk#33, ss_ext_sales_price#34, d_year#38, d_qoy#39]
Input [6]: [ss_addr_sk#33, ss_ext_sales_price#34, ss_sold_date_sk#35, d_date_sk#37, d_year#38, d_qoy#39]

(71) WholeStageCodegenTransformer (14)
Input [5]: [hash_partition_key#40, ss_addr_sk#33, ss_ext_sales_price#34, d_year#38, d_qoy#39]
Arguments: false

(72) VeloxResizeBatches
Input [5]: [hash_partition_key#40, ss_addr_sk#33, ss_ext_sales_price#34, d_year#38, d_qoy#39]
Arguments: 1024, 2147483647, 10485760

(73) ColumnarExchange
Input [5]: [hash_partition_key#40, ss_addr_sk#33, ss_ext_sales_price#34, d_year#38, d_qoy#39]
Arguments: hashpartitioning(ss_addr_sk#33, 1), ENSURE_REQUIREMENTS, [ss_addr_sk#33, ss_ext_sales_price#34, d_year#38, d_qoy#39], [plan_id=7], [shuffle_writer_type=hash]

(74) InputAdapter
Input [4]: [ss_addr_sk#33, ss_ext_sales_price#34, d_year#38, d_qoy#39]

(75) InputIteratorTransformer
Input [4]: [ss_addr_sk#33, ss_ext_sales_price#34, d_year#38, d_qoy#39]

(76) ReusedExchange [Reuses operator id: 18]
Output [2]: [ca_address_sk#41, ca_county#42]

(77) InputAdapter
Input [2]: [ca_address_sk#41, ca_county#42]

(78) InputIteratorTransformer
Input [2]: [ca_address_sk#41, ca_county#42]

(79) ShuffledHashJoinExecTransformer
Left keys [1]: [ss_addr_sk#33]
Right keys [1]: [ca_address_sk#41]
Join type: Inner
Join condition: None

(80) ProjectExecTransformer
Output [4]: [d_year#38, d_qoy#39, ca_county#42, UnscaledValue(ss_ext_sales_price#34) AS _pre_3#43]
Input [6]: [ss_addr_sk#33, ss_ext_sales_price#34, d_year#38, d_qoy#39, ca_address_sk#41, ca_county#42]

(81) FlushableHashAggregateExecTransformer
Input [4]: [d_year#38, d_qoy#39, ca_county#42, _pre_3#43]
Keys [3]: [ca_county#42, d_qoy#39, d_year#38]
Functions [1]: [partial_sum(_pre_3#43)]
Aggregate Attributes [1]: [sum#44]
Results [4]: [ca_county#42, d_qoy#39, d_year#38, sum#45]

(82) ProjectExecTransformer
Output [5]: [hash(ca_county#42, d_qoy#39, d_year#38, 42) AS hash_partition_key#46, ca_county#42, d_qoy#39, d_year#38, sum#45]
Input [4]: [ca_county#42, d_qoy#39, d_year#38, sum#45]

(83) WholeStageCodegenTransformer (16)
Input [5]: [hash_partition_key#46, ca_county#42, d_qoy#39, d_year#38, sum#45]
Arguments: false

(84) VeloxResizeBatches
Input [5]: [hash_partition_key#46, ca_county#42, d_qoy#39, d_year#38, sum#45]
Arguments: 1024, 2147483647, 10485760

(85) ColumnarExchange
Input [5]: [hash_partition_key#46, ca_county#42, d_qoy#39, d_year#38, sum#45]
Arguments: hashpartitioning(ca_county#42, d_qoy#39, d_year#38, 1), ENSURE_REQUIREMENTS, [ca_county#42, d_qoy#39, d_year#38, sum#45], [plan_id=8], [shuffle_writer_type=hash]

(86) InputAdapter
Input [4]: [ca_county#42, d_qoy#39, d_year#38, sum#45]

(87) InputIteratorTransformer
Input [4]: [ca_county#42, d_qoy#39, d_year#38, sum#45]

(88) RegularHashAggregateExecTransformer
Input [4]: [ca_county#42, d_qoy#39, d_year#38, sum#45]
Keys [3]: [ca_county#42, d_qoy#39, d_year#38]
Functions [1]: [sum(UnscaledValue(ss_ext_sales_price#34))]
Aggregate Attributes [1]: [sum(UnscaledValue(ss_ext_sales_price#34))#16]
Results [4]: [ca_county#42, d_qoy#39, d_year#38, sum(UnscaledValue(ss_ext_sales_price#34))#16]

(89) ProjectExecTransformer
Output [3]: [ca_county#42, d_year#38, MakeDecimal(sum(UnscaledValue(ss_ext_sales_price#34))#16,17,2) AS store_sales#47]
Input [4]: [ca_county#42, d_qoy#39, d_year#38, sum(UnscaledValue(ss_ext_sales_price#34))#16]

(90) WholeStageCodegenTransformer (17)
Input [3]: [ca_county#42, d_year#38, store_sales#47]
Arguments: false

(91) ColumnarBroadcastExchange
Input [3]: [ca_county#42, d_year#38, store_sales#47]
Arguments: HashedRelationBroadcastMode(List(input[0, string, true]),false), [plan_id=9]

(92) InputAdapter
Input [3]: [ca_county#42, d_year#38, store_sales#47]

(93) InputIteratorTransformer
Input [3]: [ca_county#42, d_year#38, store_sales#47]

(94) BroadcastHashJoinExecTransformer
Left keys [1]: [ca_county#10]
Right keys [1]: [ca_county#42]
Join type: Inner
Join condition: None

(95) ProjectExecTransformer
Output [5]: [store_sales#17, store_sales#32, ca_county#42, d_year#38, store_sales#47]
Input [6]: [ca_county#10, store_sales#17, store_sales#32, ca_county#42, d_year#38, store_sales#47]

(96) FileSourceScanExecTransformer parquet spark_catalog.default.web_sales
Output [3]: [ws_bill_addr_sk#48, ws_ext_sales_price#49, ws_sold_date_sk#50]
Batched: true
Location: InMemoryFileIndex []
PartitionFilters: [isnotnull(ws_sold_date_sk#50), dynamicpruningexpression(ws_sold_date_sk#50 IN dynamicpruning#36)]
PushedFilters: [IsNotNull(ws_bill_addr_sk)]
ReadSchema: struct<ws_bill_addr_sk:int,ws_ext_sales_price:decimal(7,2)>

(97) FilterExecTransformer
Input [3]: [ws_bill_addr_sk#48, ws_ext_sales_price#49, ws_sold_date_sk#50]
Arguments: isnotnull(ws_bill_addr_sk#48)

(98) ReusedExchange [Reuses operator id: 211]
Output [3]: [d_date_sk#51, d_year#52, d_qoy#53]

(99) InputAdapter
Input [3]: [d_date_sk#51, d_year#52, d_qoy#53]

(100) InputIteratorTransformer
Input [3]: [d_date_sk#51, d_year#52, d_qoy#53]

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

(102) ProjectExecTransformer
Output [5]: [hash(ws_bill_addr_sk#48, 42) AS hash_partition_key#54, ws_bill_addr_sk#48, ws_ext_sales_price#49, d_year#52, d_qoy#53]
Input [6]: [ws_bill_addr_sk#48, ws_ext_sales_price#49, ws_sold_date_sk#50, d_date_sk#51, d_year#52, d_qoy#53]

(103) WholeStageCodegenTransformer (20)
Input [5]: [hash_partition_key#54, ws_bill_addr_sk#48, ws_ext_sales_price#49, d_year#52, d_qoy#53]
Arguments: false

(104) VeloxResizeBatches
Input [5]: [hash_partition_key#54, ws_bill_addr_sk#48, ws_ext_sales_price#49, d_year#52, d_qoy#53]
Arguments: 1024, 2147483647, 10485760

(105) ColumnarExchange
Input [5]: [hash_partition_key#54, ws_bill_addr_sk#48, ws_ext_sales_price#49, d_year#52, d_qoy#53]
Arguments: hashpartitioning(ws_bill_addr_sk#48, 1), ENSURE_REQUIREMENTS, [ws_bill_addr_sk#48, ws_ext_sales_price#49, d_year#52, d_qoy#53], [plan_id=10], [shuffle_writer_type=hash]

(106) InputAdapter
Input [4]: [ws_bill_addr_sk#48, ws_ext_sales_price#49, d_year#52, d_qoy#53]

(107) InputIteratorTransformer
Input [4]: [ws_bill_addr_sk#48, ws_ext_sales_price#49, d_year#52, d_qoy#53]

(108) ReusedExchange [Reuses operator id: 18]
Output [2]: [ca_address_sk#55, ca_county#56]

(109) InputAdapter
Input [2]: [ca_address_sk#55, ca_county#56]

(110) InputIteratorTransformer
Input [2]: [ca_address_sk#55, ca_county#56]

(111) ShuffledHashJoinExecTransformer
Left keys [1]: [ws_bill_addr_sk#48]
Right keys [1]: [ca_address_sk#55]
Join type: Inner
Join condition: None

(112) ProjectExecTransformer
Output [4]: [d_year#52, d_qoy#53, ca_county#56, UnscaledValue(ws_ext_sales_price#49) AS _pre_4#57]
Input [6]: [ws_bill_addr_sk#48, ws_ext_sales_price#49, d_year#52, d_qoy#53, ca_address_sk#55, ca_county#56]

(113) FlushableHashAggregateExecTransformer
Input [4]: [d_year#52, d_qoy#53, ca_county#56, _pre_4#57]
Keys [3]: [ca_county#56, d_qoy#53, d_year#52]
Functions [1]: [partial_sum(_pre_4#57)]
Aggregate Attributes [1]: [sum#58]
Results [4]: [ca_county#56, d_qoy#53, d_year#52, sum#59]

(114) ProjectExecTransformer
Output [5]: [hash(ca_county#56, d_qoy#53, d_year#52, 42) AS hash_partition_key#60, ca_county#56, d_qoy#53, d_year#52, sum#59]
Input [4]: [ca_county#56, d_qoy#53, d_year#52, sum#59]

(115) WholeStageCodegenTransformer (22)
Input [5]: [hash_partition_key#60, ca_county#56, d_qoy#53, d_year#52, sum#59]
Arguments: false

(116) VeloxResizeBatches
Input [5]: [hash_partition_key#60, ca_county#56, d_qoy#53, d_year#52, sum#59]
Arguments: 1024, 2147483647, 10485760

(117) ColumnarExchange
Input [5]: [hash_partition_key#60, ca_county#56, d_qoy#53, d_year#52, sum#59]
Arguments: hashpartitioning(ca_county#56, d_qoy#53, d_year#52, 1), ENSURE_REQUIREMENTS, [ca_county#56, d_qoy#53, d_year#52, sum#59], [plan_id=11], [shuffle_writer_type=hash]

(118) InputAdapter
Input [4]: [ca_county#56, d_qoy#53, d_year#52, sum#59]

(119) InputIteratorTransformer
Input [4]: [ca_county#56, d_qoy#53, d_year#52, sum#59]

(120) RegularHashAggregateExecTransformer
Input [4]: [ca_county#56, d_qoy#53, d_year#52, sum#59]
Keys [3]: [ca_county#56, d_qoy#53, d_year#52]
Functions [1]: [sum(UnscaledValue(ws_ext_sales_price#49))]
Aggregate Attributes [1]: [sum(UnscaledValue(ws_ext_sales_price#49))#61]
Results [4]: [ca_county#56, d_qoy#53, d_year#52, sum(UnscaledValue(ws_ext_sales_price#49))#61]

(121) ProjectExecTransformer
Output [2]: [ca_county#56, MakeDecimal(sum(UnscaledValue(ws_ext_sales_price#49))#61,17,2) AS web_sales#62]
Input [4]: [ca_county#56, d_qoy#53, d_year#52, sum(UnscaledValue(ws_ext_sales_price#49))#61]

(122) FileSourceScanExecTransformer parquet spark_catalog.default.web_sales
Output [3]: [ws_bill_addr_sk#63, ws_ext_sales_price#64, ws_sold_date_sk#65]
Batched: true
Location: InMemoryFileIndex []
PartitionFilters: [isnotnull(ws_sold_date_sk#65), dynamicpruningexpression(ws_sold_date_sk#65 IN dynamicpruning#4)]
PushedFilters: [IsNotNull(ws_bill_addr_sk)]
ReadSchema: struct<ws_bill_addr_sk:int,ws_ext_sales_price:decimal(7,2)>

(123) FilterExecTransformer
Input [3]: [ws_bill_addr_sk#63, ws_ext_sales_price#64, ws_sold_date_sk#65]
Arguments: isnotnull(ws_bill_addr_sk#63)

(124) ReusedExchange [Reuses operator id: 203]
Output [3]: [d_date_sk#66, d_year#67, d_qoy#68]

(125) InputAdapter
Input [3]: [d_date_sk#66, d_year#67, d_qoy#68]

(126) InputIteratorTransformer
Input [3]: [d_date_sk#66, d_year#67, d_qoy#68]

(127) BroadcastHashJoinExecTransformer
Left keys [1]: [ws_sold_date_sk#65]
Right keys [1]: [d_date_sk#66]
Join type: Inner
Join condition: None

(128) ProjectExecTransformer
Output [5]: [hash(ws_bill_addr_sk#63, 42) AS hash_partition_key#69, ws_bill_addr_sk#63, ws_ext_sales_price#64, d_year#67, d_qoy#68]
Input [6]: [ws_bill_addr_sk#63, ws_ext_sales_price#64, ws_sold_date_sk#65, d_date_sk#66, d_year#67, d_qoy#68]

(129) WholeStageCodegenTransformer (25)
Input [5]: [hash_partition_key#69, ws_bill_addr_sk#63, ws_ext_sales_price#64, d_year#67, d_qoy#68]
Arguments: false

(130) VeloxResizeBatches
Input [5]: [hash_partition_key#69, ws_bill_addr_sk#63, ws_ext_sales_price#64, d_year#67, d_qoy#68]
Arguments: 1024, 2147483647, 10485760

(131) ColumnarExchange
Input [5]: [hash_partition_key#69, ws_bill_addr_sk#63, ws_ext_sales_price#64, d_year#67, d_qoy#68]
Arguments: hashpartitioning(ws_bill_addr_sk#63, 1), ENSURE_REQUIREMENTS, [ws_bill_addr_sk#63, ws_ext_sales_price#64, d_year#67, d_qoy#68], [plan_id=12], [shuffle_writer_type=hash]

(132) InputAdapter
Input [4]: [ws_bill_addr_sk#63, ws_ext_sales_price#64, d_year#67, d_qoy#68]

(133) InputIteratorTransformer
Input [4]: [ws_bill_addr_sk#63, ws_ext_sales_price#64, d_year#67, d_qoy#68]

(134) ReusedExchange [Reuses operator id: 18]
Output [2]: [ca_address_sk#70, ca_county#71]

(135) InputAdapter
Input [2]: [ca_address_sk#70, ca_county#71]

(136) InputIteratorTransformer
Input [2]: [ca_address_sk#70, ca_county#71]

(137) ShuffledHashJoinExecTransformer
Left keys [1]: [ws_bill_addr_sk#63]
Right keys [1]: [ca_address_sk#70]
Join type: Inner
Join condition: None

(138) ProjectExecTransformer
Output [4]: [d_year#67, d_qoy#68, ca_county#71, UnscaledValue(ws_ext_sales_price#64) AS _pre_5#72]
Input [6]: [ws_bill_addr_sk#63, ws_ext_sales_price#64, d_year#67, d_qoy#68, ca_address_sk#70, ca_county#71]

(139) FlushableHashAggregateExecTransformer
Input [4]: [d_year#67, d_qoy#68, ca_county#71, _pre_5#72]
Keys [3]: [ca_county#71, d_qoy#68, d_year#67]
Functions [1]: [partial_sum(_pre_5#72)]
Aggregate Attributes [1]: [sum#73]
Results [4]: [ca_county#71, d_qoy#68, d_year#67, sum#74]

(140) ProjectExecTransformer
Output [5]: [hash(ca_county#71, d_qoy#68, d_year#67, 42) AS hash_partition_key#75, ca_county#71, d_qoy#68, d_year#67, sum#74]
Input [4]: [ca_county#71, d_qoy#68, d_year#67, sum#74]

(141) WholeStageCodegenTransformer (27)
Input [5]: [hash_partition_key#75, ca_county#71, d_qoy#68, d_year#67, sum#74]
Arguments: false

(142) VeloxResizeBatches
Input [5]: [hash_partition_key#75, ca_county#71, d_qoy#68, d_year#67, sum#74]
Arguments: 1024, 2147483647, 10485760

(143) ColumnarExchange
Input [5]: [hash_partition_key#75, ca_county#71, d_qoy#68, d_year#67, sum#74]
Arguments: hashpartitioning(ca_county#71, d_qoy#68, d_year#67, 1), ENSURE_REQUIREMENTS, [ca_county#71, d_qoy#68, d_year#67, sum#74], [plan_id=13], [shuffle_writer_type=hash]

(144) InputAdapter
Input [4]: [ca_county#71, d_qoy#68, d_year#67, sum#74]

(145) InputIteratorTransformer
Input [4]: [ca_county#71, d_qoy#68, d_year#67, sum#74]

(146) RegularHashAggregateExecTransformer
Input [4]: [ca_county#71, d_qoy#68, d_year#67, sum#74]
Keys [3]: [ca_county#71, d_qoy#68, d_year#67]
Functions [1]: [sum(UnscaledValue(ws_ext_sales_price#64))]
Aggregate Attributes [1]: [sum(UnscaledValue(ws_ext_sales_price#64))#61]
Results [4]: [ca_county#71, d_qoy#68, d_year#67, sum(UnscaledValue(ws_ext_sales_price#64))#61]

(147) ProjectExecTransformer
Output [2]: [ca_county#71, MakeDecimal(sum(UnscaledValue(ws_ext_sales_price#64))#61,17,2) AS web_sales#76]
Input [4]: [ca_county#71, d_qoy#68, d_year#67, sum(UnscaledValue(ws_ext_sales_price#64))#61]

(148) WholeStageCodegenTransformer (28)
Input [2]: [ca_county#71, web_sales#76]
Arguments: false

(149) ColumnarBroadcastExchange
Input [2]: [ca_county#71, web_sales#76]
Arguments: HashedRelationBroadcastMode(List(input[0, string, true]),false), [plan_id=14]

(150) InputAdapter
Input [2]: [ca_county#71, web_sales#76]

(151) InputIteratorTransformer
Input [2]: [ca_county#71, web_sales#76]

(152) BroadcastHashJoinExecTransformer
Left keys [1]: [ca_county#56]
Right keys [1]: [ca_county#71]
Join type: Inner
Join condition: None

(153) ProjectExecTransformer
Output [3]: [ca_county#56, web_sales#62, web_sales#76]
Input [4]: [ca_county#56, web_sales#62, ca_county#71, web_sales#76]

(154) FileSourceScanExecTransformer parquet spark_catalog.default.web_sales
Output [3]: [ws_bill_addr_sk#77, ws_ext_sales_price#78, ws_sold_date_sk#79]
Batched: true
Location: InMemoryFileIndex []
PartitionFilters: [isnotnull(ws_sold_date_sk#79), dynamicpruningexpression(ws_sold_date_sk#79 IN dynamicpruning#21)]
PushedFilters: [IsNotNull(ws_bill_addr_sk)]
ReadSchema: struct<ws_bill_addr_sk:int,ws_ext_sales_price:decimal(7,2)>

(155) FilterExecTransformer
Input [3]: [ws_bill_addr_sk#77, ws_ext_sales_price#78, ws_sold_date_sk#79]
Arguments: isnotnull(ws_bill_addr_sk#77)

(156) ReusedExchange [Reuses operator id: 207]
Output [3]: [d_date_sk#80, d_year#81, d_qoy#82]

(157) InputAdapter
Input [3]: [d_date_sk#80, d_year#81, d_qoy#82]

(158) InputIteratorTransformer
Input [3]: [d_date_sk#80, d_year#81, d_qoy#82]

(159) BroadcastHashJoinExecTransformer
Left keys [1]: [ws_sold_date_sk#79]
Right keys [1]: [d_date_sk#80]
Join type: Inner
Join condition: None

(160) ProjectExecTransformer
Output [5]: [hash(ws_bill_addr_sk#77, 42) AS hash_partition_key#83, ws_bill_addr_sk#77, ws_ext_sales_price#78, d_year#81, d_qoy#82]
Input [6]: [ws_bill_addr_sk#77, ws_ext_sales_price#78, ws_sold_date_sk#79, d_date_sk#80, d_year#81, d_qoy#82]

(161) WholeStageCodegenTransformer (31)
Input [5]: [hash_partition_key#83, ws_bill_addr_sk#77, ws_ext_sales_price#78, d_year#81, d_qoy#82]
Arguments: false

(162) VeloxResizeBatches
Input [5]: [hash_partition_key#83, ws_bill_addr_sk#77, ws_ext_sales_price#78, d_year#81, d_qoy#82]
Arguments: 1024, 2147483647, 10485760

(163) ColumnarExchange
Input [5]: [hash_partition_key#83, ws_bill_addr_sk#77, ws_ext_sales_price#78, d_year#81, d_qoy#82]
Arguments: hashpartitioning(ws_bill_addr_sk#77, 1), ENSURE_REQUIREMENTS, [ws_bill_addr_sk#77, ws_ext_sales_price#78, d_year#81, d_qoy#82], [plan_id=15], [shuffle_writer_type=hash]

(164) InputAdapter
Input [4]: [ws_bill_addr_sk#77, ws_ext_sales_price#78, d_year#81, d_qoy#82]

(165) InputIteratorTransformer
Input [4]: [ws_bill_addr_sk#77, ws_ext_sales_price#78, d_year#81, d_qoy#82]

(166) ReusedExchange [Reuses operator id: 18]
Output [2]: [ca_address_sk#84, ca_county#85]

(167) InputAdapter
Input [2]: [ca_address_sk#84, ca_county#85]

(168) InputIteratorTransformer
Input [2]: [ca_address_sk#84, ca_county#85]

(169) ShuffledHashJoinExecTransformer
Left keys [1]: [ws_bill_addr_sk#77]
Right keys [1]: [ca_address_sk#84]
Join type: Inner
Join condition: None

(170) ProjectExecTransformer
Output [4]: [d_year#81, d_qoy#82, ca_county#85, UnscaledValue(ws_ext_sales_price#78) AS _pre_6#86]
Input [6]: [ws_bill_addr_sk#77, ws_ext_sales_price#78, d_year#81, d_qoy#82, ca_address_sk#84, ca_county#85]

(171) FlushableHashAggregateExecTransformer
Input [4]: [d_year#81, d_qoy#82, ca_county#85, _pre_6#86]
Keys [3]: [ca_county#85, d_qoy#82, d_year#81]
Functions [1]: [partial_sum(_pre_6#86)]
Aggregate Attributes [1]: [sum#87]
Results [4]: [ca_county#85, d_qoy#82, d_year#81, sum#88]

(172) ProjectExecTransformer
Output [5]: [hash(ca_county#85, d_qoy#82, d_year#81, 42) AS hash_partition_key#89, ca_county#85, d_qoy#82, d_year#81, sum#88]
Input [4]: [ca_county#85, d_qoy#82, d_year#81, sum#88]

(173) WholeStageCodegenTransformer (33)
Input [5]: [hash_partition_key#89, ca_county#85, d_qoy#82, d_year#81, sum#88]
Arguments: false

(174) VeloxResizeBatches
Input [5]: [hash_partition_key#89, ca_county#85, d_qoy#82, d_year#81, sum#88]
Arguments: 1024, 2147483647, 10485760

(175) ColumnarExchange
Input [5]: [hash_partition_key#89, ca_county#85, d_qoy#82, d_year#81, sum#88]
Arguments: hashpartitioning(ca_county#85, d_qoy#82, d_year#81, 1), ENSURE_REQUIREMENTS, [ca_county#85, d_qoy#82, d_year#81, sum#88], [plan_id=16], [shuffle_writer_type=hash]

(176) InputAdapter
Input [4]: [ca_county#85, d_qoy#82, d_year#81, sum#88]

(177) InputIteratorTransformer
Input [4]: [ca_county#85, d_qoy#82, d_year#81, sum#88]

(178) RegularHashAggregateExecTransformer
Input [4]: [ca_county#85, d_qoy#82, d_year#81, sum#88]
Keys [3]: [ca_county#85, d_qoy#82, d_year#81]
Functions [1]: [sum(UnscaledValue(ws_ext_sales_price#78))]
Aggregate Attributes [1]: [sum(UnscaledValue(ws_ext_sales_price#78))#61]
Results [4]: [ca_county#85, d_qoy#82, d_year#81, sum(UnscaledValue(ws_ext_sales_price#78))#61]

(179) ProjectExecTransformer
Output [2]: [ca_county#85, MakeDecimal(sum(UnscaledValue(ws_ext_sales_price#78))#61,17,2) AS web_sales#90]
Input [4]: [ca_county#85, d_qoy#82, d_year#81, sum(UnscaledValue(ws_ext_sales_price#78))#61]

(180) WholeStageCodegenTransformer (34)
Input [2]: [ca_county#85, web_sales#90]
Arguments: false

(181) ColumnarBroadcastExchange
Input [2]: [ca_county#85, web_sales#90]
Arguments: HashedRelationBroadcastMode(List(input[0, string, true]),false), [plan_id=17]

(182) InputAdapter
Input [2]: [ca_county#85, web_sales#90]

(183) InputIteratorTransformer
Input [2]: [ca_county#85, web_sales#90]

(184) BroadcastHashJoinExecTransformer
Left keys [1]: [ca_county#56]
Right keys [1]: [ca_county#85]
Join type: Inner
Join condition: None

(185) ProjectExecTransformer
Output [4]: [ca_county#56, web_sales#62, web_sales#76, web_sales#90]
Input [5]: [ca_county#56, web_sales#62, web_sales#76, ca_county#85, web_sales#90]

(186) WholeStageCodegenTransformer (35)
Input [4]: [ca_county#56, web_sales#62, web_sales#76, web_sales#90]
Arguments: false

(187) ColumnarBroadcastExchange
Input [4]: [ca_county#56, web_sales#62, web_sales#76, web_sales#90]
Arguments: HashedRelationBroadcastMode(List(input[0, string, true]),false), [plan_id=18]

(188) InputAdapter
Input [4]: [ca_county#56, web_sales#62, web_sales#76, web_sales#90]

(189) InputIteratorTransformer
Input [4]: [ca_county#56, web_sales#62, web_sales#76, web_sales#90]

(190) BroadcastHashJoinExecTransformer
Left keys [1]: [ca_county#42]
Right keys [1]: [ca_county#56]
Join type: Inner
Join condition: ((CASE WHEN (web_sales#62 > 0.00) THEN (web_sales#76 / web_sales#62) END > CASE WHEN (store_sales#47 > 0.00) THEN (store_sales#17 / store_sales#47) END) AND (CASE WHEN (web_sales#76 > 0.00) THEN (web_sales#90 / web_sales#76) END > CASE WHEN (store_sales#17 > 0.00) THEN (store_sales#32 / store_sales#17) END))

(191) ProjectExecTransformer
Output [6]: [ca_county#42, d_year#38, (web_sales#76 / web_sales#62) AS web_q1_q2_increase#91, (store_sales#17 / store_sales#47) AS store_q1_q2_increase#92, (web_sales#90 / web_sales#76) AS web_q2_q3_increase#93, (store_sales#32 / store_sales#17) AS store_q2_q3_increase#94]
Input [9]: [store_sales#17, store_sales#32, ca_county#42, d_year#38, store_sales#47, ca_county#56, web_sales#62, web_sales#76, web_sales#90]

(192) WholeStageCodegenTransformer (36)
Input [6]: [ca_county#42, d_year#38, web_q1_q2_increase#91, store_q1_q2_increase#92, web_q2_q3_increase#93, store_q2_q3_increase#94]
Arguments: false

(193) VeloxResizeBatches
Input [6]: [ca_county#42, d_year#38, web_q1_q2_increase#91, store_q1_q2_increase#92, web_q2_q3_increase#93, store_q2_q3_increase#94]
Arguments: 1024, 2147483647, 10485760

(194) ColumnarExchange
Input [6]: [ca_county#42, d_year#38, web_q1_q2_increase#91, store_q1_q2_increase#92, web_q2_q3_increase#93, store_q2_q3_increase#94]
Arguments: rangepartitioning(ca_county#42 ASC NULLS FIRST, 1), ENSURE_REQUIREMENTS, [plan_id=19], [shuffle_writer_type=hash]

(195) InputAdapter
Input [6]: [ca_county#42, d_year#38, web_q1_q2_increase#91, store_q1_q2_increase#92, web_q2_q3_increase#93, store_q2_q3_increase#94]

(196) InputIteratorTransformer
Input [6]: [ca_county#42, d_year#38, web_q1_q2_increase#91, store_q1_q2_increase#92, web_q2_q3_increase#93, store_q2_q3_increase#94]

(197) SortExecTransformer
Input [6]: [ca_county#42, d_year#38, web_q1_q2_increase#91, store_q1_q2_increase#92, web_q2_q3_increase#93, store_q2_q3_increase#94]
Arguments: [ca_county#42 ASC NULLS FIRST], true, 0

(198) WholeStageCodegenTransformer (37)
Input [6]: [ca_county#42, d_year#38, web_q1_q2_increase#91, store_q1_q2_increase#92, web_q2_q3_increase#93, store_q2_q3_increase#94]
Arguments: false

(199) VeloxColumnarToRow
Input [6]: [ca_county#42, d_year#38, web_q1_q2_increase#91, store_q1_q2_increase#92, web_q2_q3_increase#93, store_q2_q3_increase#94]

===== Subqueries =====

Subquery:1 Hosting operator id = 1 Hosting Expression = ss_sold_date_sk#3 IN dynamicpruning#4
ColumnarBroadcastExchange (203)
+- ^ FilterExecTransformer (201)
   +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (200)


(200) FileSourceScanExecTransformer parquet spark_catalog.default.date_dim
Output [3]: [d_date_sk#5, d_year#6, d_qoy#7]
Batched: true
Location: InMemoryFileIndex [{warehouse_dir}/date_dim]
PushedFilters: [IsNotNull(d_qoy), IsNotNull(d_year), EqualTo(d_qoy,2), EqualTo(d_year,2000), IsNotNull(d_date_sk)]
ReadSchema: struct<d_date_sk:int,d_year:int,d_qoy:int>

(201) FilterExecTransformer
Input [3]: [d_date_sk#5, d_year#6, d_qoy#7]
Arguments: ((((isnotnull(d_qoy#7) AND isnotnull(d_year#6)) AND (d_qoy#7 = 2)) AND (d_year#6 = 2000)) AND isnotnull(d_date_sk#5))

(202) WholeStageCodegenTransformer (1)
Input [3]: [d_date_sk#5, d_year#6, d_qoy#7]
Arguments: false

(203) ColumnarBroadcastExchange
Input [3]: [d_date_sk#5, d_year#6, d_qoy#7]
Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=20]

Subquery:2 Hosting operator id = 32 Hosting Expression = ss_sold_date_sk#20 IN dynamicpruning#21
ColumnarBroadcastExchange (207)
+- ^ FilterExecTransformer (205)
   +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (204)


(204) FileSourceScanExecTransformer parquet spark_catalog.default.date_dim
Output [3]: [d_date_sk#22, d_year#23, d_qoy#24]
Batched: true
Location: InMemoryFileIndex [{warehouse_dir}/date_dim]
PushedFilters: [IsNotNull(d_qoy), IsNotNull(d_year), EqualTo(d_qoy,3), EqualTo(d_year,2000), IsNotNull(d_date_sk)]
ReadSchema: struct<d_date_sk:int,d_year:int,d_qoy:int>

(205) FilterExecTransformer
Input [3]: [d_date_sk#22, d_year#23, d_qoy#24]
Arguments: ((((isnotnull(d_qoy#24) AND isnotnull(d_year#23)) AND (d_qoy#24 = 3)) AND (d_year#23 = 2000)) AND isnotnull(d_date_sk#22))

(206) WholeStageCodegenTransformer (6)
Input [3]: [d_date_sk#22, d_year#23, d_qoy#24]
Arguments: false

(207) ColumnarBroadcastExchange
Input [3]: [d_date_sk#22, d_year#23, d_qoy#24]
Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=21]

Subquery:3 Hosting operator id = 64 Hosting Expression = ss_sold_date_sk#35 IN dynamicpruning#36
ColumnarBroadcastExchange (211)
+- ^ FilterExecTransformer (209)
   +- ^ FileSourceScanExecTransformer parquet spark_catalog.default.date_dim (208)


(208) FileSourceScanExecTransformer parquet spark_catalog.default.date_dim
Output [3]: [d_date_sk#37, d_year#38, d_qoy#39]
Batched: true
Location: InMemoryFileIndex [{warehouse_dir}/date_dim]
PushedFilters: [IsNotNull(d_qoy), IsNotNull(d_year), EqualTo(d_qoy,1), EqualTo(d_year,2000), IsNotNull(d_date_sk)]
ReadSchema: struct<d_date_sk:int,d_year:int,d_qoy:int>

(209) FilterExecTransformer
Input [3]: [d_date_sk#37, d_year#38, d_qoy#39]
Arguments: ((((isnotnull(d_qoy#39) AND isnotnull(d_year#38)) AND (d_qoy#39 = 1)) AND (d_year#38 = 2000)) AND isnotnull(d_date_sk#37))

(210) WholeStageCodegenTransformer (12)
Input [3]: [d_date_sk#37, d_year#38, d_qoy#39]
Arguments: false

(211) ColumnarBroadcastExchange
Input [3]: [d_date_sk#37, d_year#38, d_qoy#39]
Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, false] as bigint)),false), [plan_id=22]

Subquery:4 Hosting operator id = 96 Hosting Expression = ws_sold_date_sk#50 IN dynamicpruning#36

Subquery:5 Hosting operator id = 122 Hosting Expression = ws_sold_date_sk#65 IN dynamicpruning#4

Subquery:6 Hosting operator id = 154 Hosting Expression = ws_sold_date_sk#79 IN dynamicpruning#21


