== Physical Plan ==
* Project (47)
+- * 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.web_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.web_page (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.web_sales (26)
                        :     :     +- ReusedExchange (29)
                        :     +- CometBroadcastExchange (35)
                        :        +- CometProject (34)
                        :           +- CometFilter (33)
                        :              +- CometScan parquet spark_catalog.default.time_dim (32)
                        +- ReusedExchange (38)


(1) Scan parquet spark_catalog.default.web_sales
Output [4]: [ws_sold_time_sk#1, ws_ship_hdemo_sk#2, ws_web_page_sk#3, ws_sold_date_sk#4]
Batched: true
Location [not included in comparison]/{warehouse_dir}/web_sales]
PushedFilters: [IsNotNull(ws_ship_hdemo_sk), IsNotNull(ws_sold_time_sk), IsNotNull(ws_web_page_sk)]
ReadSchema: struct<ws_sold_time_sk:int,ws_ship_hdemo_sk:int,ws_web_page_sk:int>

(2) CometFilter
Input [4]: [ws_sold_time_sk#1, ws_ship_hdemo_sk#2, ws_web_page_sk#3, ws_sold_date_sk#4]
Condition : ((isnotnull(ws_ship_hdemo_sk#2) AND isnotnull(ws_sold_time_sk#1)) AND isnotnull(ws_web_page_sk#3))

(3) CometProject
Input [4]: [ws_sold_time_sk#1, ws_ship_hdemo_sk#2, ws_web_page_sk#3, ws_sold_date_sk#4]
Arguments: [ws_sold_time_sk#1, ws_ship_hdemo_sk#2, ws_web_page_sk#3], [ws_sold_time_sk#1, ws_ship_hdemo_sk#2, ws_web_page_sk#3]

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

(5) CometFilter
Input [2]: [hd_demo_sk#5, hd_dep_count#6]
Condition : ((isnotnull(hd_dep_count#6) AND (hd_dep_count#6 = 6)) AND isnotnull(hd_demo_sk#5))

(6) CometProject
Input [2]: [hd_demo_sk#5, hd_dep_count#6]
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]: [ws_sold_time_sk#1, ws_ship_hdemo_sk#2, ws_web_page_sk#3]
Right output [1]: [hd_demo_sk#5]
Arguments: [ws_ship_hdemo_sk#2], [hd_demo_sk#5], Inner, BuildRight

(9) CometProject
Input [4]: [ws_sold_time_sk#1, ws_ship_hdemo_sk#2, ws_web_page_sk#3, hd_demo_sk#5]
Arguments: [ws_sold_time_sk#1, ws_web_page_sk#3], [ws_sold_time_sk#1, ws_web_page_sk#3]

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

(11) CometFilter
Input [2]: [t_time_sk#7, t_hour#8]
Condition : (((isnotnull(t_hour#8) AND (t_hour#8 >= 8)) AND (t_hour#8 <= 9)) AND isnotnull(t_time_sk#7))

(12) CometProject
Input [2]: [t_time_sk#7, t_hour#8]
Arguments: [t_time_sk#7], [t_time_sk#7]

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

(14) CometBroadcastHashJoin
Left output [2]: [ws_sold_time_sk#1, ws_web_page_sk#3]
Right output [1]: [t_time_sk#7]
Arguments: [ws_sold_time_sk#1], [t_time_sk#7], Inner, BuildRight

(15) CometProject
Input [3]: [ws_sold_time_sk#1, ws_web_page_sk#3, t_time_sk#7]
Arguments: [ws_web_page_sk#3], [ws_web_page_sk#3]

(16) Scan parquet spark_catalog.default.web_page
Output [2]: [wp_web_page_sk#9, wp_char_count#10]
Batched: true
Location [not included in comparison]/{warehouse_dir}/web_page]
PushedFilters: [IsNotNull(wp_char_count), GreaterThanOrEqual(wp_char_count,5000), LessThanOrEqual(wp_char_count,5200), IsNotNull(wp_web_page_sk)]
ReadSchema: struct<wp_web_page_sk:int,wp_char_count:int>

(17) CometFilter
Input [2]: [wp_web_page_sk#9, wp_char_count#10]
Condition : (((isnotnull(wp_char_count#10) AND (wp_char_count#10 >= 5000)) AND (wp_char_count#10 <= 5200)) AND isnotnull(wp_web_page_sk#9))

(18) CometProject
Input [2]: [wp_web_page_sk#9, wp_char_count#10]
Arguments: [wp_web_page_sk#9], [wp_web_page_sk#9]

(19) CometBroadcastExchange
Input [1]: [wp_web_page_sk#9]
Arguments: [wp_web_page_sk#9]

(20) CometBroadcastHashJoin
Left output [1]: [ws_web_page_sk#3]
Right output [1]: [wp_web_page_sk#9]
Arguments: [ws_web_page_sk#3], [wp_web_page_sk#9], Inner, BuildRight

(21) CometProject
Input [2]: [ws_web_page_sk#3, wp_web_page_sk#9]

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

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

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

(25) HashAggregate [codegen id : 4]
Input [1]: [count#11]
Keys: []
Functions [1]: [count(1)]
Aggregate Attributes [1]: [count(1)#12]
Results [1]: [count(1)#12 AS amc#13]

(26) Scan parquet spark_catalog.default.web_sales
Output [4]: [ws_sold_time_sk#14, ws_ship_hdemo_sk#15, ws_web_page_sk#16, ws_sold_date_sk#17]
Batched: true
Location [not included in comparison]/{warehouse_dir}/web_sales]
PushedFilters: [IsNotNull(ws_ship_hdemo_sk), IsNotNull(ws_sold_time_sk), IsNotNull(ws_web_page_sk)]
ReadSchema: struct<ws_sold_time_sk:int,ws_ship_hdemo_sk:int,ws_web_page_sk:int>

(27) CometFilter
Input [4]: [ws_sold_time_sk#14, ws_ship_hdemo_sk#15, ws_web_page_sk#16, ws_sold_date_sk#17]
Condition : ((isnotnull(ws_ship_hdemo_sk#15) AND isnotnull(ws_sold_time_sk#14)) AND isnotnull(ws_web_page_sk#16))

(28) CometProject
Input [4]: [ws_sold_time_sk#14, ws_ship_hdemo_sk#15, ws_web_page_sk#16, ws_sold_date_sk#17]
Arguments: [ws_sold_time_sk#14, ws_ship_hdemo_sk#15, ws_web_page_sk#16], [ws_sold_time_sk#14, ws_ship_hdemo_sk#15, ws_web_page_sk#16]

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

(30) CometBroadcastHashJoin
Left output [3]: [ws_sold_time_sk#14, ws_ship_hdemo_sk#15, ws_web_page_sk#16]
Right output [1]: [hd_demo_sk#18]
Arguments: [ws_ship_hdemo_sk#15], [hd_demo_sk#18], Inner, BuildRight

(31) CometProject
Input [4]: [ws_sold_time_sk#14, ws_ship_hdemo_sk#15, ws_web_page_sk#16, hd_demo_sk#18]
Arguments: [ws_sold_time_sk#14, ws_web_page_sk#16], [ws_sold_time_sk#14, ws_web_page_sk#16]

(32) Scan parquet spark_catalog.default.time_dim
Output [2]: [t_time_sk#19, t_hour#20]
Batched: true
Location [not included in comparison]/{warehouse_dir}/time_dim]
PushedFilters: [IsNotNull(t_hour), GreaterThanOrEqual(t_hour,19), LessThanOrEqual(t_hour,20), IsNotNull(t_time_sk)]
ReadSchema: struct<t_time_sk:int,t_hour:int>

(33) CometFilter
Input [2]: [t_time_sk#19, t_hour#20]
Condition : (((isnotnull(t_hour#20) AND (t_hour#20 >= 19)) AND (t_hour#20 <= 20)) AND isnotnull(t_time_sk#19))

(34) CometProject
Input [2]: [t_time_sk#19, t_hour#20]
Arguments: [t_time_sk#19], [t_time_sk#19]

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

(36) CometBroadcastHashJoin
Left output [2]: [ws_sold_time_sk#14, ws_web_page_sk#16]
Right output [1]: [t_time_sk#19]
Arguments: [ws_sold_time_sk#14], [t_time_sk#19], Inner, BuildRight

(37) CometProject
Input [3]: [ws_sold_time_sk#14, ws_web_page_sk#16, t_time_sk#19]
Arguments: [ws_web_page_sk#16], [ws_web_page_sk#16]

(38) ReusedExchange [Reuses operator id: 19]
Output [1]: [wp_web_page_sk#21]

(39) CometBroadcastHashJoin
Left output [1]: [ws_web_page_sk#16]
Right output [1]: [wp_web_page_sk#21]
Arguments: [ws_web_page_sk#16], [wp_web_page_sk#21], Inner, BuildRight

(40) CometProject
Input [2]: [ws_web_page_sk#16, wp_web_page_sk#21]

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

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

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

(44) HashAggregate [codegen id : 3]
Input [1]: [count#22]
Keys: []
Functions [1]: [count(1)]
Aggregate Attributes [1]: [count(1)#23]
Results [1]: [count(1)#23 AS pmc#24]

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

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

(47) Project [codegen id : 4]
Output [1]: [(cast(amc#13 as decimal(15,4)) / cast(pmc#24 as decimal(15,4))) AS am_pm_ratio#25]
Input [2]: [amc#13, pmc#24]

