== Physical Plan ==
* BroadcastNestedLoopJoin Inner BuildRight (172)
:- * BroadcastNestedLoopJoin Inner BuildRight (151)
:  :- * BroadcastNestedLoopJoin Inner BuildRight (130)
:  :  :- * BroadcastNestedLoopJoin Inner BuildRight (109)
:  :  :  :- * BroadcastNestedLoopJoin Inner BuildRight (88)
:  :  :  :  :- * BroadcastNestedLoopJoin Inner BuildRight (67)
:  :  :  :  :  :- * BroadcastNestedLoopJoin Inner BuildRight (46)
:  :  :  :  :  :  :- * HashAggregate (25)
:  :  :  :  :  :  :  +- Exchange (24)
:  :  :  :  :  :  :     +- * ColumnarToRow (23)
:  :  :  :  :  :  :        +- CometHashAggregate (22)
:  :  :  :  :  :  :           +- CometProject (21)
:  :  :  :  :  :  :              +- CometBroadcastHashJoin (20)
:  :  :  :  :  :  :                 :- CometProject (15)
:  :  :  :  :  :  :                 :  +- CometBroadcastHashJoin (14)
:  :  :  :  :  :  :                 :     :- CometProject (9)
:  :  :  :  :  :  :                 :     :  +- CometBroadcastHashJoin (8)
:  :  :  :  :  :  :                 :     :     :- CometProject (3)
:  :  :  :  :  :  :                 :     :     :  +- CometFilter (2)
:  :  :  :  :  :  :                 :     :     :     +- CometScan parquet spark_catalog.default.store_sales (1)
:  :  :  :  :  :  :                 :     :     +- CometBroadcastExchange (7)
:  :  :  :  :  :  :                 :     :        +- CometProject (6)
:  :  :  :  :  :  :                 :     :           +- CometFilter (5)
:  :  :  :  :  :  :                 :     :              +- CometScan parquet spark_catalog.default.household_demographics (4)
:  :  :  :  :  :  :                 :     +- CometBroadcastExchange (13)
:  :  :  :  :  :  :                 :        +- CometProject (12)
:  :  :  :  :  :  :                 :           +- CometFilter (11)
:  :  :  :  :  :  :                 :              +- CometScan parquet spark_catalog.default.time_dim (10)
:  :  :  :  :  :  :                 +- CometBroadcastExchange (19)
:  :  :  :  :  :  :                    +- CometProject (18)
:  :  :  :  :  :  :                       +- CometFilter (17)
:  :  :  :  :  :  :                          +- CometScan parquet spark_catalog.default.store (16)
:  :  :  :  :  :  +- BroadcastExchange (45)
:  :  :  :  :  :     +- * HashAggregate (44)
:  :  :  :  :  :        +- Exchange (43)
:  :  :  :  :  :           +- * ColumnarToRow (42)
:  :  :  :  :  :              +- CometHashAggregate (41)
:  :  :  :  :  :                 +- CometProject (40)
:  :  :  :  :  :                    +- CometBroadcastHashJoin (39)
:  :  :  :  :  :                       :- CometProject (37)
:  :  :  :  :  :                       :  +- CometBroadcastHashJoin (36)
:  :  :  :  :  :                       :     :- CometProject (31)
:  :  :  :  :  :                       :     :  +- CometBroadcastHashJoin (30)
:  :  :  :  :  :                       :     :     :- CometProject (28)
:  :  :  :  :  :                       :     :     :  +- CometFilter (27)
:  :  :  :  :  :                       :     :     :     +- CometScan parquet spark_catalog.default.store_sales (26)
:  :  :  :  :  :                       :     :     +- ReusedExchange (29)
:  :  :  :  :  :                       :     +- CometBroadcastExchange (35)
:  :  :  :  :  :                       :        +- CometProject (34)
:  :  :  :  :  :                       :           +- CometFilter (33)
:  :  :  :  :  :                       :              +- CometScan parquet spark_catalog.default.time_dim (32)
:  :  :  :  :  :                       +- ReusedExchange (38)
:  :  :  :  :  +- BroadcastExchange (66)
:  :  :  :  :     +- * HashAggregate (65)
:  :  :  :  :        +- Exchange (64)
:  :  :  :  :           +- * ColumnarToRow (63)
:  :  :  :  :              +- CometHashAggregate (62)
:  :  :  :  :                 +- CometProject (61)
:  :  :  :  :                    +- CometBroadcastHashJoin (60)
:  :  :  :  :                       :- CometProject (58)
:  :  :  :  :                       :  +- CometBroadcastHashJoin (57)
:  :  :  :  :                       :     :- CometProject (52)
:  :  :  :  :                       :     :  +- CometBroadcastHashJoin (51)
:  :  :  :  :                       :     :     :- CometProject (49)
:  :  :  :  :                       :     :     :  +- CometFilter (48)
:  :  :  :  :                       :     :     :     +- CometScan parquet spark_catalog.default.store_sales (47)
:  :  :  :  :                       :     :     +- ReusedExchange (50)
:  :  :  :  :                       :     +- CometBroadcastExchange (56)
:  :  :  :  :                       :        +- CometProject (55)
:  :  :  :  :                       :           +- CometFilter (54)
:  :  :  :  :                       :              +- CometScan parquet spark_catalog.default.time_dim (53)
:  :  :  :  :                       +- ReusedExchange (59)
:  :  :  :  +- BroadcastExchange (87)
:  :  :  :     +- * HashAggregate (86)
:  :  :  :        +- Exchange (85)
:  :  :  :           +- * ColumnarToRow (84)
:  :  :  :              +- CometHashAggregate (83)
:  :  :  :                 +- CometProject (82)
:  :  :  :                    +- CometBroadcastHashJoin (81)
:  :  :  :                       :- CometProject (79)
:  :  :  :                       :  +- CometBroadcastHashJoin (78)
:  :  :  :                       :     :- CometProject (73)
:  :  :  :                       :     :  +- CometBroadcastHashJoin (72)
:  :  :  :                       :     :     :- CometProject (70)
:  :  :  :                       :     :     :  +- CometFilter (69)
:  :  :  :                       :     :     :     +- CometScan parquet spark_catalog.default.store_sales (68)
:  :  :  :                       :     :     +- ReusedExchange (71)
:  :  :  :                       :     +- CometBroadcastExchange (77)
:  :  :  :                       :        +- CometProject (76)
:  :  :  :                       :           +- CometFilter (75)
:  :  :  :                       :              +- CometScan parquet spark_catalog.default.time_dim (74)
:  :  :  :                       +- ReusedExchange (80)
:  :  :  +- BroadcastExchange (108)
:  :  :     +- * HashAggregate (107)
:  :  :        +- Exchange (106)
:  :  :           +- * ColumnarToRow (105)
:  :  :              +- CometHashAggregate (104)
:  :  :                 +- CometProject (103)
:  :  :                    +- CometBroadcastHashJoin (102)
:  :  :                       :- CometProject (100)
:  :  :                       :  +- CometBroadcastHashJoin (99)
:  :  :                       :     :- CometProject (94)
:  :  :                       :     :  +- CometBroadcastHashJoin (93)
:  :  :                       :     :     :- CometProject (91)
:  :  :                       :     :     :  +- CometFilter (90)
:  :  :                       :     :     :     +- CometScan parquet spark_catalog.default.store_sales (89)
:  :  :                       :     :     +- ReusedExchange (92)
:  :  :                       :     +- CometBroadcastExchange (98)
:  :  :                       :        +- CometProject (97)
:  :  :                       :           +- CometFilter (96)
:  :  :                       :              +- CometScan parquet spark_catalog.default.time_dim (95)
:  :  :                       +- ReusedExchange (101)
:  :  +- BroadcastExchange (129)
:  :     +- * HashAggregate (128)
:  :        +- Exchange (127)
:  :           +- * ColumnarToRow (126)
:  :              +- CometHashAggregate (125)
:  :                 +- CometProject (124)
:  :                    +- CometBroadcastHashJoin (123)
:  :                       :- CometProject (121)
:  :                       :  +- CometBroadcastHashJoin (120)
:  :                       :     :- CometProject (115)
:  :                       :     :  +- CometBroadcastHashJoin (114)
:  :                       :     :     :- CometProject (112)
:  :                       :     :     :  +- CometFilter (111)
:  :                       :     :     :     +- CometScan parquet spark_catalog.default.store_sales (110)
:  :                       :     :     +- ReusedExchange (113)
:  :                       :     +- CometBroadcastExchange (119)
:  :                       :        +- CometProject (118)
:  :                       :           +- CometFilter (117)
:  :                       :              +- CometScan parquet spark_catalog.default.time_dim (116)
:  :                       +- ReusedExchange (122)
:  +- BroadcastExchange (150)
:     +- * HashAggregate (149)
:        +- Exchange (148)
:           +- * ColumnarToRow (147)
:              +- CometHashAggregate (146)
:                 +- CometProject (145)
:                    +- CometBroadcastHashJoin (144)
:                       :- CometProject (142)
:                       :  +- CometBroadcastHashJoin (141)
:                       :     :- CometProject (136)
:                       :     :  +- CometBroadcastHashJoin (135)
:                       :     :     :- CometProject (133)
:                       :     :     :  +- CometFilter (132)
:                       :     :     :     +- CometScan parquet spark_catalog.default.store_sales (131)
:                       :     :     +- ReusedExchange (134)
:                       :     +- CometBroadcastExchange (140)
:                       :        +- CometProject (139)
:                       :           +- CometFilter (138)
:                       :              +- CometScan parquet spark_catalog.default.time_dim (137)
:                       +- ReusedExchange (143)
+- BroadcastExchange (171)
   +- * HashAggregate (170)
      +- Exchange (169)
         +- * ColumnarToRow (168)
            +- CometHashAggregate (167)
               +- CometProject (166)
                  +- CometBroadcastHashJoin (165)
                     :- CometProject (163)
                     :  +- CometBroadcastHashJoin (162)
                     :     :- CometProject (157)
                     :     :  +- CometBroadcastHashJoin (156)
                     :     :     :- CometProject (154)
                     :     :     :  +- CometFilter (153)
                     :     :     :     +- CometScan parquet spark_catalog.default.store_sales (152)
                     :     :     +- ReusedExchange (155)
                     :     +- CometBroadcastExchange (161)
                     :        +- CometProject (160)
                     :           +- CometFilter (159)
                     :              +- CometScan parquet spark_catalog.default.time_dim (158)
                     +- ReusedExchange (164)


(1) Scan parquet spark_catalog.default.store_sales
Output [4]: [ss_sold_time_sk#1, ss_hdemo_sk#2, ss_store_sk#3, ss_sold_date_sk#4]
Batched: true
Location [not included in comparison]/{warehouse_dir}/store_sales]
PushedFilters: [IsNotNull(ss_hdemo_sk), IsNotNull(ss_sold_time_sk), IsNotNull(ss_store_sk)]
ReadSchema: struct<ss_sold_time_sk:int,ss_hdemo_sk:int,ss_store_sk:int>

(2) CometFilter
Input [4]: [ss_sold_time_sk#1, ss_hdemo_sk#2, ss_store_sk#3, ss_sold_date_sk#4]
Condition : ((isnotnull(ss_hdemo_sk#2) AND isnotnull(ss_sold_time_sk#1)) AND isnotnull(ss_store_sk#3))

(3) CometProject
Input [4]: [ss_sold_time_sk#1, ss_hdemo_sk#2, ss_store_sk#3, ss_sold_date_sk#4]
Arguments: [ss_sold_time_sk#1, ss_hdemo_sk#2, ss_store_sk#3], [ss_sold_time_sk#1, ss_hdemo_sk#2, ss_store_sk#3]

(4) Scan parquet spark_catalog.default.household_demographics
Output [3]: [hd_demo_sk#5, hd_dep_count#6, hd_vehicle_count#7]
Batched: true
Location [not included in comparison]/{warehouse_dir}/household_demographics]
PushedFilters: [Or(Or(And(EqualTo(hd_dep_count,4),LessThanOrEqual(hd_vehicle_count,6)),And(EqualTo(hd_dep_count,2),LessThanOrEqual(hd_vehicle_count,4))),And(EqualTo(hd_dep_count,0),LessThanOrEqual(hd_vehicle_count,2))), IsNotNull(hd_demo_sk)]
ReadSchema: struct<hd_demo_sk:int,hd_dep_count:int,hd_vehicle_count:int>

(5) CometFilter
Input [3]: [hd_demo_sk#5, hd_dep_count#6, hd_vehicle_count#7]
Condition : (((((hd_dep_count#6 = 4) AND (hd_vehicle_count#7 <= 6)) OR ((hd_dep_count#6 = 2) AND (hd_vehicle_count#7 <= 4))) OR ((hd_dep_count#6 = 0) AND (hd_vehicle_count#7 <= 2))) AND isnotnull(hd_demo_sk#5))

(6) CometProject
Input [3]: [hd_demo_sk#5, hd_dep_count#6, hd_vehicle_count#7]
Arguments: [hd_demo_sk#5], [hd_demo_sk#5]

(7) CometBroadcastExchange
Input [1]: [hd_demo_sk#5]
Arguments: [hd_demo_sk#5]

(8) CometBroadcastHashJoin
Left output [3]: [ss_sold_time_sk#1, ss_hdemo_sk#2, ss_store_sk#3]
Right output [1]: [hd_demo_sk#5]
Arguments: [ss_hdemo_sk#2], [hd_demo_sk#5], Inner, BuildRight

(9) CometProject
Input [4]: [ss_sold_time_sk#1, ss_hdemo_sk#2, ss_store_sk#3, hd_demo_sk#5]
Arguments: [ss_sold_time_sk#1, ss_store_sk#3], [ss_sold_time_sk#1, ss_store_sk#3]

(10) Scan parquet spark_catalog.default.time_dim
Output [3]: [t_time_sk#8, t_hour#9, t_minute#10]
Batched: true
Location [not included in comparison]/{warehouse_dir}/time_dim]
PushedFilters: [IsNotNull(t_hour), IsNotNull(t_minute), EqualTo(t_hour,8), GreaterThanOrEqual(t_minute,30), IsNotNull(t_time_sk)]
ReadSchema: struct<t_time_sk:int,t_hour:int,t_minute:int>

(11) CometFilter
Input [3]: [t_time_sk#8, t_hour#9, t_minute#10]
Condition : ((((isnotnull(t_hour#9) AND isnotnull(t_minute#10)) AND (t_hour#9 = 8)) AND (t_minute#10 >= 30)) AND isnotnull(t_time_sk#8))

(12) CometProject
Input [3]: [t_time_sk#8, t_hour#9, t_minute#10]
Arguments: [t_time_sk#8], [t_time_sk#8]

(13) CometBroadcastExchange
Input [1]: [t_time_sk#8]
Arguments: [t_time_sk#8]

(14) CometBroadcastHashJoin
Left output [2]: [ss_sold_time_sk#1, ss_store_sk#3]
Right output [1]: [t_time_sk#8]
Arguments: [ss_sold_time_sk#1], [t_time_sk#8], Inner, BuildRight

(15) CometProject
Input [3]: [ss_sold_time_sk#1, ss_store_sk#3, t_time_sk#8]
Arguments: [ss_store_sk#3], [ss_store_sk#3]

(16) Scan parquet spark_catalog.default.store
Output [2]: [s_store_sk#11, s_store_name#12]
Batched: true
Location [not included in comparison]/{warehouse_dir}/store]
PushedFilters: [IsNotNull(s_store_name), EqualTo(s_store_name,ese), IsNotNull(s_store_sk)]
ReadSchema: struct<s_store_sk:int,s_store_name:string>

(17) CometFilter
Input [2]: [s_store_sk#11, s_store_name#12]
Condition : ((isnotnull(s_store_name#12) AND (s_store_name#12 = ese)) AND isnotnull(s_store_sk#11))

(18) CometProject
Input [2]: [s_store_sk#11, s_store_name#12]
Arguments: [s_store_sk#11], [s_store_sk#11]

(19) CometBroadcastExchange
Input [1]: [s_store_sk#11]
Arguments: [s_store_sk#11]

(20) CometBroadcastHashJoin
Left output [1]: [ss_store_sk#3]
Right output [1]: [s_store_sk#11]
Arguments: [ss_store_sk#3], [s_store_sk#11], Inner, BuildRight

(21) CometProject
Input [2]: [ss_store_sk#3, s_store_sk#11]

(22) CometHashAggregate
Input: []
Keys: []
Functions [1]: [partial_count(1)]

(23) ColumnarToRow [codegen id : 1]
Input [1]: [count#13]

(24) Exchange
Input [1]: [count#13]
Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=1]

(25) HashAggregate [codegen id : 16]
Input [1]: [count#13]
Keys: []
Functions [1]: [count(1)]
Aggregate Attributes [1]: [count(1)#14]
Results [1]: [count(1)#14 AS h8_30_to_9#15]

(26) Scan parquet spark_catalog.default.store_sales
Output [4]: [ss_sold_time_sk#16, ss_hdemo_sk#17, ss_store_sk#18, ss_sold_date_sk#19]
Batched: true
Location [not included in comparison]/{warehouse_dir}/store_sales]
PushedFilters: [IsNotNull(ss_hdemo_sk), IsNotNull(ss_sold_time_sk), IsNotNull(ss_store_sk)]
ReadSchema: struct<ss_sold_time_sk:int,ss_hdemo_sk:int,ss_store_sk:int>

(27) CometFilter
Input [4]: [ss_sold_time_sk#16, ss_hdemo_sk#17, ss_store_sk#18, ss_sold_date_sk#19]
Condition : ((isnotnull(ss_hdemo_sk#17) AND isnotnull(ss_sold_time_sk#16)) AND isnotnull(ss_store_sk#18))

(28) CometProject
Input [4]: [ss_sold_time_sk#16, ss_hdemo_sk#17, ss_store_sk#18, ss_sold_date_sk#19]
Arguments: [ss_sold_time_sk#16, ss_hdemo_sk#17, ss_store_sk#18], [ss_sold_time_sk#16, ss_hdemo_sk#17, ss_store_sk#18]

(29) ReusedExchange [Reuses operator id: 7]
Output [1]: [hd_demo_sk#20]

(30) CometBroadcastHashJoin
Left output [3]: [ss_sold_time_sk#16, ss_hdemo_sk#17, ss_store_sk#18]
Right output [1]: [hd_demo_sk#20]
Arguments: [ss_hdemo_sk#17], [hd_demo_sk#20], Inner, BuildRight

(31) CometProject
Input [4]: [ss_sold_time_sk#16, ss_hdemo_sk#17, ss_store_sk#18, hd_demo_sk#20]
Arguments: [ss_sold_time_sk#16, ss_store_sk#18], [ss_sold_time_sk#16, ss_store_sk#18]

(32) Scan parquet spark_catalog.default.time_dim
Output [3]: [t_time_sk#21, t_hour#22, t_minute#23]
Batched: true
Location [not included in comparison]/{warehouse_dir}/time_dim]
PushedFilters: [IsNotNull(t_hour), IsNotNull(t_minute), EqualTo(t_hour,9), LessThan(t_minute,30), IsNotNull(t_time_sk)]
ReadSchema: struct<t_time_sk:int,t_hour:int,t_minute:int>

(33) CometFilter
Input [3]: [t_time_sk#21, t_hour#22, t_minute#23]
Condition : ((((isnotnull(t_hour#22) AND isnotnull(t_minute#23)) AND (t_hour#22 = 9)) AND (t_minute#23 < 30)) AND isnotnull(t_time_sk#21))

(34) CometProject
Input [3]: [t_time_sk#21, t_hour#22, t_minute#23]
Arguments: [t_time_sk#21], [t_time_sk#21]

(35) CometBroadcastExchange
Input [1]: [t_time_sk#21]
Arguments: [t_time_sk#21]

(36) CometBroadcastHashJoin
Left output [2]: [ss_sold_time_sk#16, ss_store_sk#18]
Right output [1]: [t_time_sk#21]
Arguments: [ss_sold_time_sk#16], [t_time_sk#21], Inner, BuildRight

(37) CometProject
Input [3]: [ss_sold_time_sk#16, ss_store_sk#18, t_time_sk#21]
Arguments: [ss_store_sk#18], [ss_store_sk#18]

(38) ReusedExchange [Reuses operator id: 19]
Output [1]: [s_store_sk#24]

(39) CometBroadcastHashJoin
Left output [1]: [ss_store_sk#18]
Right output [1]: [s_store_sk#24]
Arguments: [ss_store_sk#18], [s_store_sk#24], Inner, BuildRight

(40) CometProject
Input [2]: [ss_store_sk#18, s_store_sk#24]

(41) CometHashAggregate
Input: []
Keys: []
Functions [1]: [partial_count(1)]

(42) ColumnarToRow [codegen id : 2]
Input [1]: [count#25]

(43) Exchange
Input [1]: [count#25]
Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=2]

(44) HashAggregate [codegen id : 3]
Input [1]: [count#25]
Keys: []
Functions [1]: [count(1)]
Aggregate Attributes [1]: [count(1)#26]
Results [1]: [count(1)#26 AS h9_to_9_30#27]

(45) BroadcastExchange
Input [1]: [h9_to_9_30#27]
Arguments: IdentityBroadcastMode, [plan_id=3]

(46) BroadcastNestedLoopJoin [codegen id : 16]
Join type: Inner
Join condition: None

(47) Scan parquet spark_catalog.default.store_sales
Output [4]: [ss_sold_time_sk#28, ss_hdemo_sk#29, ss_store_sk#30, ss_sold_date_sk#31]
Batched: true
Location [not included in comparison]/{warehouse_dir}/store_sales]
PushedFilters: [IsNotNull(ss_hdemo_sk), IsNotNull(ss_sold_time_sk), IsNotNull(ss_store_sk)]
ReadSchema: struct<ss_sold_time_sk:int,ss_hdemo_sk:int,ss_store_sk:int>

(48) CometFilter
Input [4]: [ss_sold_time_sk#28, ss_hdemo_sk#29, ss_store_sk#30, ss_sold_date_sk#31]
Condition : ((isnotnull(ss_hdemo_sk#29) AND isnotnull(ss_sold_time_sk#28)) AND isnotnull(ss_store_sk#30))

(49) CometProject
Input [4]: [ss_sold_time_sk#28, ss_hdemo_sk#29, ss_store_sk#30, ss_sold_date_sk#31]
Arguments: [ss_sold_time_sk#28, ss_hdemo_sk#29, ss_store_sk#30], [ss_sold_time_sk#28, ss_hdemo_sk#29, ss_store_sk#30]

(50) ReusedExchange [Reuses operator id: 7]
Output [1]: [hd_demo_sk#32]

(51) CometBroadcastHashJoin
Left output [3]: [ss_sold_time_sk#28, ss_hdemo_sk#29, ss_store_sk#30]
Right output [1]: [hd_demo_sk#32]
Arguments: [ss_hdemo_sk#29], [hd_demo_sk#32], Inner, BuildRight

(52) CometProject
Input [4]: [ss_sold_time_sk#28, ss_hdemo_sk#29, ss_store_sk#30, hd_demo_sk#32]
Arguments: [ss_sold_time_sk#28, ss_store_sk#30], [ss_sold_time_sk#28, ss_store_sk#30]

(53) Scan parquet spark_catalog.default.time_dim
Output [3]: [t_time_sk#33, t_hour#34, t_minute#35]
Batched: true
Location [not included in comparison]/{warehouse_dir}/time_dim]
PushedFilters: [IsNotNull(t_hour), IsNotNull(t_minute), EqualTo(t_hour,9), GreaterThanOrEqual(t_minute,30), IsNotNull(t_time_sk)]
ReadSchema: struct<t_time_sk:int,t_hour:int,t_minute:int>

(54) CometFilter
Input [3]: [t_time_sk#33, t_hour#34, t_minute#35]
Condition : ((((isnotnull(t_hour#34) AND isnotnull(t_minute#35)) AND (t_hour#34 = 9)) AND (t_minute#35 >= 30)) AND isnotnull(t_time_sk#33))

(55) CometProject
Input [3]: [t_time_sk#33, t_hour#34, t_minute#35]
Arguments: [t_time_sk#33], [t_time_sk#33]

(56) CometBroadcastExchange
Input [1]: [t_time_sk#33]
Arguments: [t_time_sk#33]

(57) CometBroadcastHashJoin
Left output [2]: [ss_sold_time_sk#28, ss_store_sk#30]
Right output [1]: [t_time_sk#33]
Arguments: [ss_sold_time_sk#28], [t_time_sk#33], Inner, BuildRight

(58) CometProject
Input [3]: [ss_sold_time_sk#28, ss_store_sk#30, t_time_sk#33]
Arguments: [ss_store_sk#30], [ss_store_sk#30]

(59) ReusedExchange [Reuses operator id: 19]
Output [1]: [s_store_sk#36]

(60) CometBroadcastHashJoin
Left output [1]: [ss_store_sk#30]
Right output [1]: [s_store_sk#36]
Arguments: [ss_store_sk#30], [s_store_sk#36], Inner, BuildRight

(61) CometProject
Input [2]: [ss_store_sk#30, s_store_sk#36]

(62) CometHashAggregate
Input: []
Keys: []
Functions [1]: [partial_count(1)]

(63) ColumnarToRow [codegen id : 4]
Input [1]: [count#37]

(64) Exchange
Input [1]: [count#37]
Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=4]

(65) HashAggregate [codegen id : 5]
Input [1]: [count#37]
Keys: []
Functions [1]: [count(1)]
Aggregate Attributes [1]: [count(1)#38]
Results [1]: [count(1)#38 AS h9_30_to_10#39]

(66) BroadcastExchange
Input [1]: [h9_30_to_10#39]
Arguments: IdentityBroadcastMode, [plan_id=5]

(67) BroadcastNestedLoopJoin [codegen id : 16]
Join type: Inner
Join condition: None

(68) Scan parquet spark_catalog.default.store_sales
Output [4]: [ss_sold_time_sk#40, ss_hdemo_sk#41, ss_store_sk#42, ss_sold_date_sk#43]
Batched: true
Location [not included in comparison]/{warehouse_dir}/store_sales]
PushedFilters: [IsNotNull(ss_hdemo_sk), IsNotNull(ss_sold_time_sk), IsNotNull(ss_store_sk)]
ReadSchema: struct<ss_sold_time_sk:int,ss_hdemo_sk:int,ss_store_sk:int>

(69) CometFilter
Input [4]: [ss_sold_time_sk#40, ss_hdemo_sk#41, ss_store_sk#42, ss_sold_date_sk#43]
Condition : ((isnotnull(ss_hdemo_sk#41) AND isnotnull(ss_sold_time_sk#40)) AND isnotnull(ss_store_sk#42))

(70) CometProject
Input [4]: [ss_sold_time_sk#40, ss_hdemo_sk#41, ss_store_sk#42, ss_sold_date_sk#43]
Arguments: [ss_sold_time_sk#40, ss_hdemo_sk#41, ss_store_sk#42], [ss_sold_time_sk#40, ss_hdemo_sk#41, ss_store_sk#42]

(71) ReusedExchange [Reuses operator id: 7]
Output [1]: [hd_demo_sk#44]

(72) CometBroadcastHashJoin
Left output [3]: [ss_sold_time_sk#40, ss_hdemo_sk#41, ss_store_sk#42]
Right output [1]: [hd_demo_sk#44]
Arguments: [ss_hdemo_sk#41], [hd_demo_sk#44], Inner, BuildRight

(73) CometProject
Input [4]: [ss_sold_time_sk#40, ss_hdemo_sk#41, ss_store_sk#42, hd_demo_sk#44]
Arguments: [ss_sold_time_sk#40, ss_store_sk#42], [ss_sold_time_sk#40, ss_store_sk#42]

(74) Scan parquet spark_catalog.default.time_dim
Output [3]: [t_time_sk#45, t_hour#46, t_minute#47]
Batched: true
Location [not included in comparison]/{warehouse_dir}/time_dim]
PushedFilters: [IsNotNull(t_hour), IsNotNull(t_minute), EqualTo(t_hour,10), LessThan(t_minute,30), IsNotNull(t_time_sk)]
ReadSchema: struct<t_time_sk:int,t_hour:int,t_minute:int>

(75) CometFilter
Input [3]: [t_time_sk#45, t_hour#46, t_minute#47]
Condition : ((((isnotnull(t_hour#46) AND isnotnull(t_minute#47)) AND (t_hour#46 = 10)) AND (t_minute#47 < 30)) AND isnotnull(t_time_sk#45))

(76) CometProject
Input [3]: [t_time_sk#45, t_hour#46, t_minute#47]
Arguments: [t_time_sk#45], [t_time_sk#45]

(77) CometBroadcastExchange
Input [1]: [t_time_sk#45]
Arguments: [t_time_sk#45]

(78) CometBroadcastHashJoin
Left output [2]: [ss_sold_time_sk#40, ss_store_sk#42]
Right output [1]: [t_time_sk#45]
Arguments: [ss_sold_time_sk#40], [t_time_sk#45], Inner, BuildRight

(79) CometProject
Input [3]: [ss_sold_time_sk#40, ss_store_sk#42, t_time_sk#45]
Arguments: [ss_store_sk#42], [ss_store_sk#42]

(80) ReusedExchange [Reuses operator id: 19]
Output [1]: [s_store_sk#48]

(81) CometBroadcastHashJoin
Left output [1]: [ss_store_sk#42]
Right output [1]: [s_store_sk#48]
Arguments: [ss_store_sk#42], [s_store_sk#48], Inner, BuildRight

(82) CometProject
Input [2]: [ss_store_sk#42, s_store_sk#48]

(83) CometHashAggregate
Input: []
Keys: []
Functions [1]: [partial_count(1)]

(84) ColumnarToRow [codegen id : 6]
Input [1]: [count#49]

(85) Exchange
Input [1]: [count#49]
Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=6]

(86) HashAggregate [codegen id : 7]
Input [1]: [count#49]
Keys: []
Functions [1]: [count(1)]
Aggregate Attributes [1]: [count(1)#50]
Results [1]: [count(1)#50 AS h10_to_10_30#51]

(87) BroadcastExchange
Input [1]: [h10_to_10_30#51]
Arguments: IdentityBroadcastMode, [plan_id=7]

(88) BroadcastNestedLoopJoin [codegen id : 16]
Join type: Inner
Join condition: None

(89) Scan parquet spark_catalog.default.store_sales
Output [4]: [ss_sold_time_sk#52, ss_hdemo_sk#53, ss_store_sk#54, ss_sold_date_sk#55]
Batched: true
Location [not included in comparison]/{warehouse_dir}/store_sales]
PushedFilters: [IsNotNull(ss_hdemo_sk), IsNotNull(ss_sold_time_sk), IsNotNull(ss_store_sk)]
ReadSchema: struct<ss_sold_time_sk:int,ss_hdemo_sk:int,ss_store_sk:int>

(90) CometFilter
Input [4]: [ss_sold_time_sk#52, ss_hdemo_sk#53, ss_store_sk#54, ss_sold_date_sk#55]
Condition : ((isnotnull(ss_hdemo_sk#53) AND isnotnull(ss_sold_time_sk#52)) AND isnotnull(ss_store_sk#54))

(91) CometProject
Input [4]: [ss_sold_time_sk#52, ss_hdemo_sk#53, ss_store_sk#54, ss_sold_date_sk#55]
Arguments: [ss_sold_time_sk#52, ss_hdemo_sk#53, ss_store_sk#54], [ss_sold_time_sk#52, ss_hdemo_sk#53, ss_store_sk#54]

(92) ReusedExchange [Reuses operator id: 7]
Output [1]: [hd_demo_sk#56]

(93) CometBroadcastHashJoin
Left output [3]: [ss_sold_time_sk#52, ss_hdemo_sk#53, ss_store_sk#54]
Right output [1]: [hd_demo_sk#56]
Arguments: [ss_hdemo_sk#53], [hd_demo_sk#56], Inner, BuildRight

(94) CometProject
Input [4]: [ss_sold_time_sk#52, ss_hdemo_sk#53, ss_store_sk#54, hd_demo_sk#56]
Arguments: [ss_sold_time_sk#52, ss_store_sk#54], [ss_sold_time_sk#52, ss_store_sk#54]

(95) Scan parquet spark_catalog.default.time_dim
Output [3]: [t_time_sk#57, t_hour#58, t_minute#59]
Batched: true
Location [not included in comparison]/{warehouse_dir}/time_dim]
PushedFilters: [IsNotNull(t_hour), IsNotNull(t_minute), EqualTo(t_hour,10), GreaterThanOrEqual(t_minute,30), IsNotNull(t_time_sk)]
ReadSchema: struct<t_time_sk:int,t_hour:int,t_minute:int>

(96) CometFilter
Input [3]: [t_time_sk#57, t_hour#58, t_minute#59]
Condition : ((((isnotnull(t_hour#58) AND isnotnull(t_minute#59)) AND (t_hour#58 = 10)) AND (t_minute#59 >= 30)) AND isnotnull(t_time_sk#57))

(97) CometProject
Input [3]: [t_time_sk#57, t_hour#58, t_minute#59]
Arguments: [t_time_sk#57], [t_time_sk#57]

(98) CometBroadcastExchange
Input [1]: [t_time_sk#57]
Arguments: [t_time_sk#57]

(99) CometBroadcastHashJoin
Left output [2]: [ss_sold_time_sk#52, ss_store_sk#54]
Right output [1]: [t_time_sk#57]
Arguments: [ss_sold_time_sk#52], [t_time_sk#57], Inner, BuildRight

(100) CometProject
Input [3]: [ss_sold_time_sk#52, ss_store_sk#54, t_time_sk#57]
Arguments: [ss_store_sk#54], [ss_store_sk#54]

(101) ReusedExchange [Reuses operator id: 19]
Output [1]: [s_store_sk#60]

(102) CometBroadcastHashJoin
Left output [1]: [ss_store_sk#54]
Right output [1]: [s_store_sk#60]
Arguments: [ss_store_sk#54], [s_store_sk#60], Inner, BuildRight

(103) CometProject
Input [2]: [ss_store_sk#54, s_store_sk#60]

(104) CometHashAggregate
Input: []
Keys: []
Functions [1]: [partial_count(1)]

(105) ColumnarToRow [codegen id : 8]
Input [1]: [count#61]

(106) Exchange
Input [1]: [count#61]
Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=8]

(107) HashAggregate [codegen id : 9]
Input [1]: [count#61]
Keys: []
Functions [1]: [count(1)]
Aggregate Attributes [1]: [count(1)#62]
Results [1]: [count(1)#62 AS h10_30_to_11#63]

(108) BroadcastExchange
Input [1]: [h10_30_to_11#63]
Arguments: IdentityBroadcastMode, [plan_id=9]

(109) BroadcastNestedLoopJoin [codegen id : 16]
Join type: Inner
Join condition: None

(110) Scan parquet spark_catalog.default.store_sales
Output [4]: [ss_sold_time_sk#64, ss_hdemo_sk#65, ss_store_sk#66, ss_sold_date_sk#67]
Batched: true
Location [not included in comparison]/{warehouse_dir}/store_sales]
PushedFilters: [IsNotNull(ss_hdemo_sk), IsNotNull(ss_sold_time_sk), IsNotNull(ss_store_sk)]
ReadSchema: struct<ss_sold_time_sk:int,ss_hdemo_sk:int,ss_store_sk:int>

(111) CometFilter
Input [4]: [ss_sold_time_sk#64, ss_hdemo_sk#65, ss_store_sk#66, ss_sold_date_sk#67]
Condition : ((isnotnull(ss_hdemo_sk#65) AND isnotnull(ss_sold_time_sk#64)) AND isnotnull(ss_store_sk#66))

(112) CometProject
Input [4]: [ss_sold_time_sk#64, ss_hdemo_sk#65, ss_store_sk#66, ss_sold_date_sk#67]
Arguments: [ss_sold_time_sk#64, ss_hdemo_sk#65, ss_store_sk#66], [ss_sold_time_sk#64, ss_hdemo_sk#65, ss_store_sk#66]

(113) ReusedExchange [Reuses operator id: 7]
Output [1]: [hd_demo_sk#68]

(114) CometBroadcastHashJoin
Left output [3]: [ss_sold_time_sk#64, ss_hdemo_sk#65, ss_store_sk#66]
Right output [1]: [hd_demo_sk#68]
Arguments: [ss_hdemo_sk#65], [hd_demo_sk#68], Inner, BuildRight

(115) CometProject
Input [4]: [ss_sold_time_sk#64, ss_hdemo_sk#65, ss_store_sk#66, hd_demo_sk#68]
Arguments: [ss_sold_time_sk#64, ss_store_sk#66], [ss_sold_time_sk#64, ss_store_sk#66]

(116) Scan parquet spark_catalog.default.time_dim
Output [3]: [t_time_sk#69, t_hour#70, t_minute#71]
Batched: true
Location [not included in comparison]/{warehouse_dir}/time_dim]
PushedFilters: [IsNotNull(t_hour), IsNotNull(t_minute), EqualTo(t_hour,11), LessThan(t_minute,30), IsNotNull(t_time_sk)]
ReadSchema: struct<t_time_sk:int,t_hour:int,t_minute:int>

(117) CometFilter
Input [3]: [t_time_sk#69, t_hour#70, t_minute#71]
Condition : ((((isnotnull(t_hour#70) AND isnotnull(t_minute#71)) AND (t_hour#70 = 11)) AND (t_minute#71 < 30)) AND isnotnull(t_time_sk#69))

(118) CometProject
Input [3]: [t_time_sk#69, t_hour#70, t_minute#71]
Arguments: [t_time_sk#69], [t_time_sk#69]

(119) CometBroadcastExchange
Input [1]: [t_time_sk#69]
Arguments: [t_time_sk#69]

(120) CometBroadcastHashJoin
Left output [2]: [ss_sold_time_sk#64, ss_store_sk#66]
Right output [1]: [t_time_sk#69]
Arguments: [ss_sold_time_sk#64], [t_time_sk#69], Inner, BuildRight

(121) CometProject
Input [3]: [ss_sold_time_sk#64, ss_store_sk#66, t_time_sk#69]
Arguments: [ss_store_sk#66], [ss_store_sk#66]

(122) ReusedExchange [Reuses operator id: 19]
Output [1]: [s_store_sk#72]

(123) CometBroadcastHashJoin
Left output [1]: [ss_store_sk#66]
Right output [1]: [s_store_sk#72]
Arguments: [ss_store_sk#66], [s_store_sk#72], Inner, BuildRight

(124) CometProject
Input [2]: [ss_store_sk#66, s_store_sk#72]

(125) CometHashAggregate
Input: []
Keys: []
Functions [1]: [partial_count(1)]

(126) ColumnarToRow [codegen id : 10]
Input [1]: [count#73]

(127) Exchange
Input [1]: [count#73]
Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=10]

(128) HashAggregate [codegen id : 11]
Input [1]: [count#73]
Keys: []
Functions [1]: [count(1)]
Aggregate Attributes [1]: [count(1)#74]
Results [1]: [count(1)#74 AS h11_to_11_30#75]

(129) BroadcastExchange
Input [1]: [h11_to_11_30#75]
Arguments: IdentityBroadcastMode, [plan_id=11]

(130) BroadcastNestedLoopJoin [codegen id : 16]
Join type: Inner
Join condition: None

(131) Scan parquet spark_catalog.default.store_sales
Output [4]: [ss_sold_time_sk#76, ss_hdemo_sk#77, ss_store_sk#78, ss_sold_date_sk#79]
Batched: true
Location [not included in comparison]/{warehouse_dir}/store_sales]
PushedFilters: [IsNotNull(ss_hdemo_sk), IsNotNull(ss_sold_time_sk), IsNotNull(ss_store_sk)]
ReadSchema: struct<ss_sold_time_sk:int,ss_hdemo_sk:int,ss_store_sk:int>

(132) CometFilter
Input [4]: [ss_sold_time_sk#76, ss_hdemo_sk#77, ss_store_sk#78, ss_sold_date_sk#79]
Condition : ((isnotnull(ss_hdemo_sk#77) AND isnotnull(ss_sold_time_sk#76)) AND isnotnull(ss_store_sk#78))

(133) CometProject
Input [4]: [ss_sold_time_sk#76, ss_hdemo_sk#77, ss_store_sk#78, ss_sold_date_sk#79]
Arguments: [ss_sold_time_sk#76, ss_hdemo_sk#77, ss_store_sk#78], [ss_sold_time_sk#76, ss_hdemo_sk#77, ss_store_sk#78]

(134) ReusedExchange [Reuses operator id: 7]
Output [1]: [hd_demo_sk#80]

(135) CometBroadcastHashJoin
Left output [3]: [ss_sold_time_sk#76, ss_hdemo_sk#77, ss_store_sk#78]
Right output [1]: [hd_demo_sk#80]
Arguments: [ss_hdemo_sk#77], [hd_demo_sk#80], Inner, BuildRight

(136) CometProject
Input [4]: [ss_sold_time_sk#76, ss_hdemo_sk#77, ss_store_sk#78, hd_demo_sk#80]
Arguments: [ss_sold_time_sk#76, ss_store_sk#78], [ss_sold_time_sk#76, ss_store_sk#78]

(137) Scan parquet spark_catalog.default.time_dim
Output [3]: [t_time_sk#81, t_hour#82, t_minute#83]
Batched: true
Location [not included in comparison]/{warehouse_dir}/time_dim]
PushedFilters: [IsNotNull(t_hour), IsNotNull(t_minute), EqualTo(t_hour,11), GreaterThanOrEqual(t_minute,30), IsNotNull(t_time_sk)]
ReadSchema: struct<t_time_sk:int,t_hour:int,t_minute:int>

(138) CometFilter
Input [3]: [t_time_sk#81, t_hour#82, t_minute#83]
Condition : ((((isnotnull(t_hour#82) AND isnotnull(t_minute#83)) AND (t_hour#82 = 11)) AND (t_minute#83 >= 30)) AND isnotnull(t_time_sk#81))

(139) CometProject
Input [3]: [t_time_sk#81, t_hour#82, t_minute#83]
Arguments: [t_time_sk#81], [t_time_sk#81]

(140) CometBroadcastExchange
Input [1]: [t_time_sk#81]
Arguments: [t_time_sk#81]

(141) CometBroadcastHashJoin
Left output [2]: [ss_sold_time_sk#76, ss_store_sk#78]
Right output [1]: [t_time_sk#81]
Arguments: [ss_sold_time_sk#76], [t_time_sk#81], Inner, BuildRight

(142) CometProject
Input [3]: [ss_sold_time_sk#76, ss_store_sk#78, t_time_sk#81]
Arguments: [ss_store_sk#78], [ss_store_sk#78]

(143) ReusedExchange [Reuses operator id: 19]
Output [1]: [s_store_sk#84]

(144) CometBroadcastHashJoin
Left output [1]: [ss_store_sk#78]
Right output [1]: [s_store_sk#84]
Arguments: [ss_store_sk#78], [s_store_sk#84], Inner, BuildRight

(145) CometProject
Input [2]: [ss_store_sk#78, s_store_sk#84]

(146) CometHashAggregate
Input: []
Keys: []
Functions [1]: [partial_count(1)]

(147) ColumnarToRow [codegen id : 12]
Input [1]: [count#85]

(148) Exchange
Input [1]: [count#85]
Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=12]

(149) HashAggregate [codegen id : 13]
Input [1]: [count#85]
Keys: []
Functions [1]: [count(1)]
Aggregate Attributes [1]: [count(1)#86]
Results [1]: [count(1)#86 AS h11_30_to_12#87]

(150) BroadcastExchange
Input [1]: [h11_30_to_12#87]
Arguments: IdentityBroadcastMode, [plan_id=13]

(151) BroadcastNestedLoopJoin [codegen id : 16]
Join type: Inner
Join condition: None

(152) Scan parquet spark_catalog.default.store_sales
Output [4]: [ss_sold_time_sk#88, ss_hdemo_sk#89, ss_store_sk#90, ss_sold_date_sk#91]
Batched: true
Location [not included in comparison]/{warehouse_dir}/store_sales]
PushedFilters: [IsNotNull(ss_hdemo_sk), IsNotNull(ss_sold_time_sk), IsNotNull(ss_store_sk)]
ReadSchema: struct<ss_sold_time_sk:int,ss_hdemo_sk:int,ss_store_sk:int>

(153) CometFilter
Input [4]: [ss_sold_time_sk#88, ss_hdemo_sk#89, ss_store_sk#90, ss_sold_date_sk#91]
Condition : ((isnotnull(ss_hdemo_sk#89) AND isnotnull(ss_sold_time_sk#88)) AND isnotnull(ss_store_sk#90))

(154) CometProject
Input [4]: [ss_sold_time_sk#88, ss_hdemo_sk#89, ss_store_sk#90, ss_sold_date_sk#91]
Arguments: [ss_sold_time_sk#88, ss_hdemo_sk#89, ss_store_sk#90], [ss_sold_time_sk#88, ss_hdemo_sk#89, ss_store_sk#90]

(155) ReusedExchange [Reuses operator id: 7]
Output [1]: [hd_demo_sk#92]

(156) CometBroadcastHashJoin
Left output [3]: [ss_sold_time_sk#88, ss_hdemo_sk#89, ss_store_sk#90]
Right output [1]: [hd_demo_sk#92]
Arguments: [ss_hdemo_sk#89], [hd_demo_sk#92], Inner, BuildRight

(157) CometProject
Input [4]: [ss_sold_time_sk#88, ss_hdemo_sk#89, ss_store_sk#90, hd_demo_sk#92]
Arguments: [ss_sold_time_sk#88, ss_store_sk#90], [ss_sold_time_sk#88, ss_store_sk#90]

(158) Scan parquet spark_catalog.default.time_dim
Output [3]: [t_time_sk#93, t_hour#94, t_minute#95]
Batched: true
Location [not included in comparison]/{warehouse_dir}/time_dim]
PushedFilters: [IsNotNull(t_hour), IsNotNull(t_minute), EqualTo(t_hour,12), LessThan(t_minute,30), IsNotNull(t_time_sk)]
ReadSchema: struct<t_time_sk:int,t_hour:int,t_minute:int>

(159) CometFilter
Input [3]: [t_time_sk#93, t_hour#94, t_minute#95]
Condition : ((((isnotnull(t_hour#94) AND isnotnull(t_minute#95)) AND (t_hour#94 = 12)) AND (t_minute#95 < 30)) AND isnotnull(t_time_sk#93))

(160) CometProject
Input [3]: [t_time_sk#93, t_hour#94, t_minute#95]
Arguments: [t_time_sk#93], [t_time_sk#93]

(161) CometBroadcastExchange
Input [1]: [t_time_sk#93]
Arguments: [t_time_sk#93]

(162) CometBroadcastHashJoin
Left output [2]: [ss_sold_time_sk#88, ss_store_sk#90]
Right output [1]: [t_time_sk#93]
Arguments: [ss_sold_time_sk#88], [t_time_sk#93], Inner, BuildRight

(163) CometProject
Input [3]: [ss_sold_time_sk#88, ss_store_sk#90, t_time_sk#93]
Arguments: [ss_store_sk#90], [ss_store_sk#90]

(164) ReusedExchange [Reuses operator id: 19]
Output [1]: [s_store_sk#96]

(165) CometBroadcastHashJoin
Left output [1]: [ss_store_sk#90]
Right output [1]: [s_store_sk#96]
Arguments: [ss_store_sk#90], [s_store_sk#96], Inner, BuildRight

(166) CometProject
Input [2]: [ss_store_sk#90, s_store_sk#96]

(167) CometHashAggregate
Input: []
Keys: []
Functions [1]: [partial_count(1)]

(168) ColumnarToRow [codegen id : 14]
Input [1]: [count#97]

(169) Exchange
Input [1]: [count#97]
Arguments: SinglePartition, ENSURE_REQUIREMENTS, [plan_id=14]

(170) HashAggregate [codegen id : 15]
Input [1]: [count#97]
Keys: []
Functions [1]: [count(1)]
Aggregate Attributes [1]: [count(1)#98]
Results [1]: [count(1)#98 AS h12_to_12_30#99]

(171) BroadcastExchange
Input [1]: [h12_to_12_30#99]
Arguments: IdentityBroadcastMode, [plan_id=15]

(172) BroadcastNestedLoopJoin [codegen id : 16]
Join type: Inner
Join condition: None

