== Physical Plan ==
* CometColumnarToRow (47)
+- CometSort (46)
   +- CometColumnarExchange (45)
      +- CometBroadcastHashJoin (44)
         :- CometProject (23)
         :  +- CometFilter (22)
         :     +- CometHashAggregate (21)
         :        +- CometExchange (20)
         :           +- CometHashAggregate (19)
         :              +- CometProject (18)
         :                 +- CometBroadcastHashJoin (17)
         :                    :- CometProject (12)
         :                    :  +- CometBroadcastHashJoin (11)
         :                    :     :- CometProject (7)
         :                    :     :  +- CometBroadcastHashJoin (6)
         :                    :     :     :- CometFilter (2)
         :                    :     :     :  +- CometScan [native_iceberg_compat] parquet spark_catalog.default.inventory (1)
         :                    :     :     +- CometBroadcastExchange (5)
         :                    :     :        +- CometFilter (4)
         :                    :     :           +- CometScan [native_iceberg_compat] parquet spark_catalog.default.item (3)
         :                    :     +- CometBroadcastExchange (10)
         :                    :        +- CometFilter (9)
         :                    :           +- CometScan [native_iceberg_compat] parquet spark_catalog.default.warehouse (8)
         :                    +- CometBroadcastExchange (16)
         :                       +- CometProject (15)
         :                          +- CometFilter (14)
         :                             +- CometScan [native_iceberg_compat] parquet spark_catalog.default.date_dim (13)
         +- CometBroadcastExchange (43)
            +- CometProject (42)
               +- CometFilter (41)
                  +- CometHashAggregate (40)
                     +- CometExchange (39)
                        +- CometHashAggregate (38)
                           +- CometProject (37)
                              +- CometBroadcastHashJoin (36)
                                 :- CometProject (31)
                                 :  +- CometBroadcastHashJoin (30)
                                 :     :- CometProject (28)
                                 :     :  +- CometBroadcastHashJoin (27)
                                 :     :     :- CometFilter (25)
                                 :     :     :  +- CometScan [native_iceberg_compat] parquet spark_catalog.default.inventory (24)
                                 :     :     +- ReusedExchange (26)
                                 :     +- ReusedExchange (29)
                                 +- CometBroadcastExchange (35)
                                    +- CometProject (34)
                                       +- CometFilter (33)
                                          +- CometScan [native_iceberg_compat] parquet spark_catalog.default.date_dim (32)


(1) CometScan [native_iceberg_compat] parquet spark_catalog.default.inventory
Output [4]: [inv_item_sk#1, inv_warehouse_sk#2, inv_quantity_on_hand#3, inv_date_sk#4]
Batched: true
Location: InMemoryFileIndex []
PartitionFilters: [isnotnull(inv_date_sk#4), dynamicpruningexpression(inv_date_sk#4 IN dynamicpruning#5)]
PushedFilters: [IsNotNull(inv_item_sk), IsNotNull(inv_warehouse_sk)]
ReadSchema: struct<inv_item_sk:int,inv_warehouse_sk:int,inv_quantity_on_hand:int>

(2) CometFilter
Input [4]: [inv_item_sk#1, inv_warehouse_sk#2, inv_quantity_on_hand#3, inv_date_sk#4]
Condition : (isnotnull(inv_item_sk#1) AND isnotnull(inv_warehouse_sk#2))

(3) CometScan [native_iceberg_compat] parquet spark_catalog.default.item
Output [1]: [i_item_sk#6]
Batched: true
Location [not included in comparison]/{warehouse_dir}/item]
PushedFilters: [IsNotNull(i_item_sk)]
ReadSchema: struct<i_item_sk:int>

(4) CometFilter
Input [1]: [i_item_sk#6]
Condition : isnotnull(i_item_sk#6)

(5) CometBroadcastExchange
Input [1]: [i_item_sk#6]
Arguments: [i_item_sk#6]

(6) CometBroadcastHashJoin
Left output [4]: [inv_item_sk#1, inv_warehouse_sk#2, inv_quantity_on_hand#3, inv_date_sk#4]
Right output [1]: [i_item_sk#6]
Arguments: [inv_item_sk#1], [i_item_sk#6], Inner, BuildRight

(7) CometProject
Input [5]: [inv_item_sk#1, inv_warehouse_sk#2, inv_quantity_on_hand#3, inv_date_sk#4, i_item_sk#6]
Arguments: [inv_warehouse_sk#2, inv_quantity_on_hand#3, inv_date_sk#4, i_item_sk#6], [inv_warehouse_sk#2, inv_quantity_on_hand#3, inv_date_sk#4, i_item_sk#6]

(8) CometScan [native_iceberg_compat] parquet spark_catalog.default.warehouse
Output [2]: [w_warehouse_sk#7, w_warehouse_name#8]
Batched: true
Location [not included in comparison]/{warehouse_dir}/warehouse]
PushedFilters: [IsNotNull(w_warehouse_sk)]
ReadSchema: struct<w_warehouse_sk:int,w_warehouse_name:string>

(9) CometFilter
Input [2]: [w_warehouse_sk#7, w_warehouse_name#8]
Condition : isnotnull(w_warehouse_sk#7)

(10) CometBroadcastExchange
Input [2]: [w_warehouse_sk#7, w_warehouse_name#8]
Arguments: [w_warehouse_sk#7, w_warehouse_name#8]

(11) CometBroadcastHashJoin
Left output [4]: [inv_warehouse_sk#2, inv_quantity_on_hand#3, inv_date_sk#4, i_item_sk#6]
Right output [2]: [w_warehouse_sk#7, w_warehouse_name#8]
Arguments: [inv_warehouse_sk#2], [w_warehouse_sk#7], Inner, BuildRight

(12) CometProject
Input [6]: [inv_warehouse_sk#2, inv_quantity_on_hand#3, inv_date_sk#4, i_item_sk#6, w_warehouse_sk#7, w_warehouse_name#8]
Arguments: [inv_quantity_on_hand#3, inv_date_sk#4, i_item_sk#6, w_warehouse_sk#7, w_warehouse_name#8], [inv_quantity_on_hand#3, inv_date_sk#4, i_item_sk#6, w_warehouse_sk#7, w_warehouse_name#8]

(13) CometScan [native_iceberg_compat] parquet spark_catalog.default.date_dim
Output [3]: [d_date_sk#9, d_year#10, d_moy#11]
Batched: true
Location [not included in comparison]/{warehouse_dir}/date_dim]
PushedFilters: [IsNotNull(d_year), IsNotNull(d_moy), EqualTo(d_year,2001), EqualTo(d_moy,1), IsNotNull(d_date_sk)]
ReadSchema: struct<d_date_sk:int,d_year:int,d_moy:int>

(14) CometFilter
Input [3]: [d_date_sk#9, d_year#10, d_moy#11]
Condition : ((((isnotnull(d_year#10) AND isnotnull(d_moy#11)) AND (d_year#10 = 2001)) AND (d_moy#11 = 1)) AND isnotnull(d_date_sk#9))

(15) CometProject
Input [3]: [d_date_sk#9, d_year#10, d_moy#11]
Arguments: [d_date_sk#9, d_moy#11], [d_date_sk#9, d_moy#11]

(16) CometBroadcastExchange
Input [2]: [d_date_sk#9, d_moy#11]
Arguments: [d_date_sk#9, d_moy#11]

(17) CometBroadcastHashJoin
Left output [5]: [inv_quantity_on_hand#3, inv_date_sk#4, i_item_sk#6, w_warehouse_sk#7, w_warehouse_name#8]
Right output [2]: [d_date_sk#9, d_moy#11]
Arguments: [inv_date_sk#4], [d_date_sk#9], Inner, BuildRight

(18) CometProject
Input [7]: [inv_quantity_on_hand#3, inv_date_sk#4, i_item_sk#6, w_warehouse_sk#7, w_warehouse_name#8, d_date_sk#9, d_moy#11]
Arguments: [inv_quantity_on_hand#3, i_item_sk#6, w_warehouse_sk#7, w_warehouse_name#8, d_moy#11], [inv_quantity_on_hand#3, i_item_sk#6, w_warehouse_sk#7, w_warehouse_name#8, d_moy#11]

(19) CometHashAggregate
Input [5]: [inv_quantity_on_hand#3, i_item_sk#6, w_warehouse_sk#7, w_warehouse_name#8, d_moy#11]
Keys [4]: [w_warehouse_name#8, w_warehouse_sk#7, i_item_sk#6, d_moy#11]
Functions [2]: [partial_stddev_samp(cast(inv_quantity_on_hand#3 as double)), partial_avg(inv_quantity_on_hand#3)]

(20) CometExchange
Input [9]: [w_warehouse_name#8, w_warehouse_sk#7, i_item_sk#6, d_moy#11, n#12, avg#13, m2#14, sum#15, count#16]
Arguments: hashpartitioning(w_warehouse_name#8, w_warehouse_sk#7, i_item_sk#6, d_moy#11, 5), ENSURE_REQUIREMENTS, CometNativeShuffle, [plan_id=1]

(21) CometHashAggregate
Input [9]: [w_warehouse_name#8, w_warehouse_sk#7, i_item_sk#6, d_moy#11, n#12, avg#13, m2#14, sum#15, count#16]
Keys [4]: [w_warehouse_name#8, w_warehouse_sk#7, i_item_sk#6, d_moy#11]
Functions [2]: [stddev_samp(cast(inv_quantity_on_hand#3 as double)), avg(inv_quantity_on_hand#3)]

(22) CometFilter
Input [5]: [w_warehouse_sk#7, i_item_sk#6, d_moy#11, stdev#17, mean#18]
Condition : CASE WHEN (knownfloatingpointnormalized(normalizenanandzero(mean#18)) = 0.0) THEN false ELSE (knownfloatingpointnormalized(normalizenanandzero((stdev#17 / knownfloatingpointnormalized(normalizenanandzero(mean#18))))) > 1.0) END

(23) CometProject
Input [5]: [w_warehouse_sk#7, i_item_sk#6, d_moy#11, stdev#17, mean#18]
Arguments: [w_warehouse_sk#7, i_item_sk#6, d_moy#11, mean#18, cov#19], [w_warehouse_sk#7, i_item_sk#6, d_moy#11, mean#18, CASE WHEN (knownfloatingpointnormalized(normalizenanandzero(mean#18)) = 0.0) THEN null ELSE (stdev#17 / knownfloatingpointnormalized(normalizenanandzero(mean#18))) END AS cov#19]

(24) CometScan [native_iceberg_compat] parquet spark_catalog.default.inventory
Output [4]: [inv_item_sk#20, inv_warehouse_sk#21, inv_quantity_on_hand#22, inv_date_sk#23]
Batched: true
Location: InMemoryFileIndex []
PartitionFilters: [isnotnull(inv_date_sk#23), dynamicpruningexpression(inv_date_sk#23 IN dynamicpruning#24)]
PushedFilters: [IsNotNull(inv_item_sk), IsNotNull(inv_warehouse_sk)]
ReadSchema: struct<inv_item_sk:int,inv_warehouse_sk:int,inv_quantity_on_hand:int>

(25) CometFilter
Input [4]: [inv_item_sk#20, inv_warehouse_sk#21, inv_quantity_on_hand#22, inv_date_sk#23]
Condition : (isnotnull(inv_item_sk#20) AND isnotnull(inv_warehouse_sk#21))

(26) ReusedExchange [Reuses operator id: 5]
Output [1]: [i_item_sk#25]

(27) CometBroadcastHashJoin
Left output [4]: [inv_item_sk#20, inv_warehouse_sk#21, inv_quantity_on_hand#22, inv_date_sk#23]
Right output [1]: [i_item_sk#25]
Arguments: [inv_item_sk#20], [i_item_sk#25], Inner, BuildRight

(28) CometProject
Input [5]: [inv_item_sk#20, inv_warehouse_sk#21, inv_quantity_on_hand#22, inv_date_sk#23, i_item_sk#25]
Arguments: [inv_warehouse_sk#21, inv_quantity_on_hand#22, inv_date_sk#23, i_item_sk#25], [inv_warehouse_sk#21, inv_quantity_on_hand#22, inv_date_sk#23, i_item_sk#25]

(29) ReusedExchange [Reuses operator id: 10]
Output [2]: [w_warehouse_sk#26, w_warehouse_name#27]

(30) CometBroadcastHashJoin
Left output [4]: [inv_warehouse_sk#21, inv_quantity_on_hand#22, inv_date_sk#23, i_item_sk#25]
Right output [2]: [w_warehouse_sk#26, w_warehouse_name#27]
Arguments: [inv_warehouse_sk#21], [w_warehouse_sk#26], Inner, BuildRight

(31) CometProject
Input [6]: [inv_warehouse_sk#21, inv_quantity_on_hand#22, inv_date_sk#23, i_item_sk#25, w_warehouse_sk#26, w_warehouse_name#27]
Arguments: [inv_quantity_on_hand#22, inv_date_sk#23, i_item_sk#25, w_warehouse_sk#26, w_warehouse_name#27], [inv_quantity_on_hand#22, inv_date_sk#23, i_item_sk#25, w_warehouse_sk#26, w_warehouse_name#27]

(32) CometScan [native_iceberg_compat] parquet spark_catalog.default.date_dim
Output [3]: [d_date_sk#28, d_year#29, d_moy#30]
Batched: true
Location [not included in comparison]/{warehouse_dir}/date_dim]
PushedFilters: [IsNotNull(d_year), IsNotNull(d_moy), EqualTo(d_year,2001), EqualTo(d_moy,2), IsNotNull(d_date_sk)]
ReadSchema: struct<d_date_sk:int,d_year:int,d_moy:int>

(33) CometFilter
Input [3]: [d_date_sk#28, d_year#29, d_moy#30]
Condition : ((((isnotnull(d_year#29) AND isnotnull(d_moy#30)) AND (d_year#29 = 2001)) AND (d_moy#30 = 2)) AND isnotnull(d_date_sk#28))

(34) CometProject
Input [3]: [d_date_sk#28, d_year#29, d_moy#30]
Arguments: [d_date_sk#28, d_moy#30], [d_date_sk#28, d_moy#30]

(35) CometBroadcastExchange
Input [2]: [d_date_sk#28, d_moy#30]
Arguments: [d_date_sk#28, d_moy#30]

(36) CometBroadcastHashJoin
Left output [5]: [inv_quantity_on_hand#22, inv_date_sk#23, i_item_sk#25, w_warehouse_sk#26, w_warehouse_name#27]
Right output [2]: [d_date_sk#28, d_moy#30]
Arguments: [inv_date_sk#23], [d_date_sk#28], Inner, BuildRight

(37) CometProject
Input [7]: [inv_quantity_on_hand#22, inv_date_sk#23, i_item_sk#25, w_warehouse_sk#26, w_warehouse_name#27, d_date_sk#28, d_moy#30]
Arguments: [inv_quantity_on_hand#22, i_item_sk#25, w_warehouse_sk#26, w_warehouse_name#27, d_moy#30], [inv_quantity_on_hand#22, i_item_sk#25, w_warehouse_sk#26, w_warehouse_name#27, d_moy#30]

(38) CometHashAggregate
Input [5]: [inv_quantity_on_hand#22, i_item_sk#25, w_warehouse_sk#26, w_warehouse_name#27, d_moy#30]
Keys [4]: [w_warehouse_name#27, w_warehouse_sk#26, i_item_sk#25, d_moy#30]
Functions [2]: [partial_stddev_samp(cast(inv_quantity_on_hand#22 as double)), partial_avg(inv_quantity_on_hand#22)]

(39) CometExchange
Input [9]: [w_warehouse_name#27, w_warehouse_sk#26, i_item_sk#25, d_moy#30, n#31, avg#32, m2#33, sum#34, count#35]
Arguments: hashpartitioning(w_warehouse_name#27, w_warehouse_sk#26, i_item_sk#25, d_moy#30, 5), ENSURE_REQUIREMENTS, CometNativeShuffle, [plan_id=2]

(40) CometHashAggregate
Input [9]: [w_warehouse_name#27, w_warehouse_sk#26, i_item_sk#25, d_moy#30, n#31, avg#32, m2#33, sum#34, count#35]
Keys [4]: [w_warehouse_name#27, w_warehouse_sk#26, i_item_sk#25, d_moy#30]
Functions [2]: [stddev_samp(cast(inv_quantity_on_hand#22 as double)), avg(inv_quantity_on_hand#22)]

(41) CometFilter
Input [5]: [w_warehouse_sk#26, i_item_sk#25, d_moy#30, stdev#17, mean#18]
Condition : CASE WHEN (knownfloatingpointnormalized(normalizenanandzero(mean#18)) = 0.0) THEN false ELSE (knownfloatingpointnormalized(normalizenanandzero((stdev#17 / knownfloatingpointnormalized(normalizenanandzero(mean#18))))) > 1.0) END

(42) CometProject
Input [5]: [w_warehouse_sk#26, i_item_sk#25, d_moy#30, stdev#17, mean#18]
Arguments: [w_warehouse_sk#26, i_item_sk#25, d_moy#30, mean#36, cov#37], [w_warehouse_sk#26, i_item_sk#25, d_moy#30, mean#18 AS mean#36, CASE WHEN (knownfloatingpointnormalized(normalizenanandzero(mean#18)) = 0.0) THEN null ELSE (stdev#17 / knownfloatingpointnormalized(normalizenanandzero(mean#18))) END AS cov#37]

(43) CometBroadcastExchange
Input [5]: [w_warehouse_sk#26, i_item_sk#25, d_moy#30, mean#36, cov#37]
Arguments: [w_warehouse_sk#26, i_item_sk#25, d_moy#30, mean#36, cov#37]

(44) CometBroadcastHashJoin
Left output [5]: [w_warehouse_sk#7, i_item_sk#6, d_moy#11, mean#18, cov#19]
Right output [5]: [w_warehouse_sk#26, i_item_sk#25, d_moy#30, mean#36, cov#37]
Arguments: [i_item_sk#6, w_warehouse_sk#7], [i_item_sk#25, w_warehouse_sk#26], Inner, BuildRight

(45) CometColumnarExchange
Input [10]: [w_warehouse_sk#7, i_item_sk#6, d_moy#11, mean#18, cov#19, w_warehouse_sk#26, i_item_sk#25, d_moy#30, mean#36, cov#37]
Arguments: rangepartitioning(w_warehouse_sk#7 ASC NULLS FIRST, i_item_sk#6 ASC NULLS FIRST, d_moy#11 ASC NULLS FIRST, mean#18 ASC NULLS FIRST, cov#19 ASC NULLS FIRST, d_moy#30 ASC NULLS FIRST, mean#36 ASC NULLS FIRST, cov#37 ASC NULLS FIRST, 5), ENSURE_REQUIREMENTS, CometColumnarShuffle, [plan_id=3]

(46) CometSort
Input [10]: [w_warehouse_sk#7, i_item_sk#6, d_moy#11, mean#18, cov#19, w_warehouse_sk#26, i_item_sk#25, d_moy#30, mean#36, cov#37]
Arguments: [w_warehouse_sk#7, i_item_sk#6, d_moy#11, mean#18, cov#19, w_warehouse_sk#26, i_item_sk#25, d_moy#30, mean#36, cov#37], [w_warehouse_sk#7 ASC NULLS FIRST, i_item_sk#6 ASC NULLS FIRST, d_moy#11 ASC NULLS FIRST, mean#18 ASC NULLS FIRST, cov#19 ASC NULLS FIRST, d_moy#30 ASC NULLS FIRST, mean#36 ASC NULLS FIRST, cov#37 ASC NULLS FIRST]

(47) CometColumnarToRow [codegen id : 1]
Input [10]: [w_warehouse_sk#7, i_item_sk#6, d_moy#11, mean#18, cov#19, w_warehouse_sk#26, i_item_sk#25, d_moy#30, mean#36, cov#37]

===== Subqueries =====

Subquery:1 Hosting operator id = 1 Hosting Expression = inv_date_sk#4 IN dynamicpruning#5
BroadcastExchange (52)
+- * CometColumnarToRow (51)
   +- CometProject (50)
      +- CometFilter (49)
         +- CometScan [native_iceberg_compat] parquet spark_catalog.default.date_dim (48)


(48) CometScan [native_iceberg_compat] parquet spark_catalog.default.date_dim
Output [3]: [d_date_sk#9, d_year#10, d_moy#11]
Batched: true
Location [not included in comparison]/{warehouse_dir}/date_dim]
PushedFilters: [IsNotNull(d_year), IsNotNull(d_moy), EqualTo(d_year,2001), EqualTo(d_moy,1), IsNotNull(d_date_sk)]
ReadSchema: struct<d_date_sk:int,d_year:int,d_moy:int>

(49) CometFilter
Input [3]: [d_date_sk#9, d_year#10, d_moy#11]
Condition : ((((isnotnull(d_year#10) AND isnotnull(d_moy#11)) AND (d_year#10 = 2001)) AND (d_moy#11 = 1)) AND isnotnull(d_date_sk#9))

(50) CometProject
Input [3]: [d_date_sk#9, d_year#10, d_moy#11]
Arguments: [d_date_sk#9, d_moy#11], [d_date_sk#9, d_moy#11]

(51) CometColumnarToRow [codegen id : 1]
Input [2]: [d_date_sk#9, d_moy#11]

(52) BroadcastExchange
Input [2]: [d_date_sk#9, d_moy#11]
Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=4]

Subquery:2 Hosting operator id = 24 Hosting Expression = inv_date_sk#23 IN dynamicpruning#24
BroadcastExchange (57)
+- * CometColumnarToRow (56)
   +- CometProject (55)
      +- CometFilter (54)
         +- CometScan [native_iceberg_compat] parquet spark_catalog.default.date_dim (53)


(53) CometScan [native_iceberg_compat] parquet spark_catalog.default.date_dim
Output [3]: [d_date_sk#28, d_year#29, d_moy#30]
Batched: true
Location [not included in comparison]/{warehouse_dir}/date_dim]
PushedFilters: [IsNotNull(d_year), IsNotNull(d_moy), EqualTo(d_year,2001), EqualTo(d_moy,2), IsNotNull(d_date_sk)]
ReadSchema: struct<d_date_sk:int,d_year:int,d_moy:int>

(54) CometFilter
Input [3]: [d_date_sk#28, d_year#29, d_moy#30]
Condition : ((((isnotnull(d_year#29) AND isnotnull(d_moy#30)) AND (d_year#29 = 2001)) AND (d_moy#30 = 2)) AND isnotnull(d_date_sk#28))

(55) CometProject
Input [3]: [d_date_sk#28, d_year#29, d_moy#30]
Arguments: [d_date_sk#28, d_moy#30], [d_date_sk#28, d_moy#30]

(56) CometColumnarToRow [codegen id : 1]
Input [2]: [d_date_sk#28, d_moy#30]

(57) BroadcastExchange
Input [2]: [d_date_sk#28, d_moy#30]
Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=5]


