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


(1) CometScan [native_iceberg_compat] parquet spark_catalog.default.store_sales
Output [3]: [ss_store_sk#1, ss_net_profit#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_store_sk)]
ReadSchema: struct<ss_store_sk:int,ss_net_profit:decimal(7,2)>

(2) CometFilter
Input [3]: [ss_store_sk#1, ss_net_profit#2, ss_sold_date_sk#3]
Condition : isnotnull(ss_store_sk#1)

(3) CometScan [native_iceberg_compat] parquet spark_catalog.default.date_dim
Output [3]: [d_date_sk#5, d_year#6, d_qoy#7]
Batched: true
Location [not included in comparison]/{warehouse_dir}/date_dim]
PushedFilters: [IsNotNull(d_qoy), IsNotNull(d_year), EqualTo(d_qoy,2), EqualTo(d_year,1998), IsNotNull(d_date_sk)]
ReadSchema: struct<d_date_sk:int,d_year:int,d_qoy:int>

(4) CometFilter
Input [3]: [d_date_sk#5, d_year#6, d_qoy#7]
Condition : ((((isnotnull(d_qoy#7) AND isnotnull(d_year#6)) AND (d_qoy#7 = 2)) AND (d_year#6 = 1998)) AND isnotnull(d_date_sk#5))

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

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

(7) CometBroadcastHashJoin
Left output [3]: [ss_store_sk#1, ss_net_profit#2, ss_sold_date_sk#3]
Right output [1]: [d_date_sk#5]
Arguments: [ss_sold_date_sk#3], [d_date_sk#5], Inner, BuildRight

(8) CometProject
Input [4]: [ss_store_sk#1, ss_net_profit#2, ss_sold_date_sk#3, d_date_sk#5]
Arguments: [ss_store_sk#1, ss_net_profit#2], [ss_store_sk#1, ss_net_profit#2]

(9) CometScan [native_iceberg_compat] parquet spark_catalog.default.store
Output [3]: [s_store_sk#8, s_store_name#9, s_zip#10]
Batched: true
Location [not included in comparison]/{warehouse_dir}/store]
PushedFilters: [IsNotNull(s_store_sk)]
ReadSchema: struct<s_store_sk:int,s_store_name:string,s_zip:string>

(10) CometFilter
Input [3]: [s_store_sk#8, s_store_name#9, s_zip#10]
Condition : (isnotnull(s_store_sk#8) AND isnotnull(staticinvoke(class org.apache.spark.sql.catalyst.util.CharVarcharCodegenUtils, StringType, readSidePadding, s_zip#10, 10, true, false, true)))

(11) CometProject
Input [3]: [s_store_sk#8, s_store_name#9, s_zip#10]
Arguments: [s_store_sk#8, s_store_name#9, s_zip#11], [s_store_sk#8, s_store_name#9, staticinvoke(class org.apache.spark.sql.catalyst.util.CharVarcharCodegenUtils, StringType, readSidePadding, s_zip#10, 10, true, false, true) AS s_zip#11]

(12) CometBroadcastExchange
Input [3]: [s_store_sk#8, s_store_name#9, s_zip#11]
Arguments: [s_store_sk#8, s_store_name#9, s_zip#11]

(13) CometBroadcastHashJoin
Left output [2]: [ss_store_sk#1, ss_net_profit#2]
Right output [3]: [s_store_sk#8, s_store_name#9, s_zip#11]
Arguments: [ss_store_sk#1], [s_store_sk#8], Inner, BuildRight

(14) CometProject
Input [5]: [ss_store_sk#1, ss_net_profit#2, s_store_sk#8, s_store_name#9, s_zip#11]
Arguments: [ss_net_profit#2, s_store_name#9, s_zip#11], [ss_net_profit#2, s_store_name#9, s_zip#11]

(15) CometScan [native_iceberg_compat] parquet spark_catalog.default.customer_address
Output [1]: [ca_zip#12]
Batched: true
Location [not included in comparison]/{warehouse_dir}/customer_address]
ReadSchema: struct<ca_zip:string>

(16) CometFilter
Input [1]: [ca_zip#12]
Condition : (substr(staticinvoke(class org.apache.spark.sql.catalyst.util.CharVarcharCodegenUtils, StringType, readSidePadding, ca_zip#12, 10, true, false, true), 1, 5) INSET 10144, 10336, 10390, 10445, 10516, 10567, 11101, 11356, 11376, 11489, 11634, 11928, 12305, 13354, 13375, 13376, 13394, 13595, 13695, 13955, 14060, 14089, 14171, 14328, 14663, 14867, 14922, 15126, 15146, 15371, 15455, 15559, 15723, 15734, 15765, 15798, 15882, 16021, 16725, 16807, 17043, 17183, 17871, 17879, 17920, 18119, 18270, 18376, 18383, 18426, 18652, 18767, 18799, 18840, 18842, 18845, 18906, 19430, 19505, 19512, 19515, 19736, 19769, 19849, 20004, 20260, 20548, 21076, 21195, 21286, 21309, 21337, 21756, 22152, 22245, 22246, 22351, 22437, 22461, 22685, 22744, 22752, 22927, 23006, 23470, 23932, 23968, 24128, 24206, 24317, 24610, 24671, 24676, 24996, 25003, 25103, 25280, 25486, 25631, 25733, 25782, 25858, 25989, 26065, 26105, 26231, 26233, 26653, 26689, 26859, 27068, 27156, 27385, 27700, 28286, 28488, 28545, 28577, 28587, 28709, 28810, 28898, 28915, 29178, 29741, 29839, 30010, 30122, 30431, 30450, 30469, 30625, 30903, 31016, 31029, 31387, 31671, 31880, 32213, 32754, 33123, 33282, 33515, 33786, 34102, 34322, 34425, 35258, 35458, 35474, 35576, 35850, 35942, 36233, 36420, 36446, 36495, 36634, 37125, 37126, 37930, 38122, 38193, 38415, 38607, 38935, 39127, 39192, 39371, 39516, 39736, 39861, 39972, 40081, 40162, 40558, 40604, 41248, 41367, 41368, 41766, 41918, 42029, 42666, 42961, 43285, 43848, 43933, 44165, 44438, 45200, 45266, 45375, 45549, 45692, 45721, 45748, 46081, 46136, 46820, 47305, 47537, 47770, 48033, 48425, 48583, 49130, 49156, 49448, 50016, 50298, 50308, 50412, 51061, 51103, 51200, 51211, 51622, 51649, 51650, 51798, 51949, 52867, 53179, 53268, 53535, 53672, 54364, 54601, 54917, 55253, 55307, 55565, 56240, 56458, 56529, 56571, 56575, 56616, 56691, 56910, 57047, 57647, 57665, 57834, 57855, 58048, 58058, 58078, 58263, 58470, 58943, 59166, 59402, 60099, 60279, 60576, 61265, 61547, 61810, 61860, 62377, 62496, 62878, 62971, 63089, 63193, 63435, 63792, 63837, 63981, 64034, 64147, 64457, 64528, 64544, 65084, 65164, 66162, 66708, 66864, 67030, 67301, 67467, 67473, 67853, 67875, 67897, 68014, 68100, 68101, 68309, 68341, 68621, 68786, 68806, 68880, 68893, 68908, 69035, 69399, 69913, 69952, 70372, 70466, 70738, 71256, 71286, 71791, 71954, 72013, 72151, 72175, 72305, 72325, 72425, 72550, 72823, 73134, 73171, 73241, 73273, 73520, 73650, 74351, 75691, 76107, 76231, 76232, 76614, 76638, 76698, 77191, 77556, 77610, 77721, 78451, 78567, 78668, 78890, 79077, 79777, 79994, 81019, 81096, 81312, 81426, 82136, 82276, 82636, 83041, 83144, 83444, 83849, 83921, 83926, 83933, 84093, 84935, 85816, 86057, 86198, 86284, 86379, 87343, 87501, 87816, 88086, 88190, 88424, 88885, 89091, 89360, 90225, 90257, 90578, 91068, 91110, 91137, 91393, 92712, 94167, 94627, 94898, 94945, 94983, 96451, 96576, 96765, 96888, 96976, 97189, 97789, 98025, 98235, 98294, 98359, 98569, 99076, 99543 AND isnotnull(substr(staticinvoke(class org.apache.spark.sql.catalyst.util.CharVarcharCodegenUtils, StringType, readSidePadding, ca_zip#12, 10, true, false, true), 1, 5)))

(17) CometProject
Input [1]: [ca_zip#12]
Arguments: [ca_zip#13], [substr(staticinvoke(class org.apache.spark.sql.catalyst.util.CharVarcharCodegenUtils, StringType, readSidePadding, ca_zip#12, 10, true, false, true), 1, 5) AS ca_zip#13]

(18) CometScan [native_iceberg_compat] parquet spark_catalog.default.customer_address
Output [2]: [ca_address_sk#14, ca_zip#15]
Batched: true
Location [not included in comparison]/{warehouse_dir}/customer_address]
PushedFilters: [IsNotNull(ca_address_sk)]
ReadSchema: struct<ca_address_sk:int,ca_zip:string>

(19) CometFilter
Input [2]: [ca_address_sk#14, ca_zip#15]
Condition : isnotnull(ca_address_sk#14)

(20) CometProject
Input [2]: [ca_address_sk#14, ca_zip#15]
Arguments: [ca_address_sk#14, ca_zip#16], [ca_address_sk#14, staticinvoke(class org.apache.spark.sql.catalyst.util.CharVarcharCodegenUtils, StringType, readSidePadding, ca_zip#15, 10, true, false, true) AS ca_zip#16]

(21) CometScan [native_iceberg_compat] parquet spark_catalog.default.customer
Output [2]: [c_current_addr_sk#17, c_preferred_cust_flag#18]
Batched: true
Location [not included in comparison]/{warehouse_dir}/customer]
PushedFilters: [IsNotNull(c_current_addr_sk)]
ReadSchema: struct<c_current_addr_sk:int,c_preferred_cust_flag:string>

(22) CometFilter
Input [2]: [c_current_addr_sk#17, c_preferred_cust_flag#18]
Condition : ((staticinvoke(class org.apache.spark.sql.catalyst.util.CharVarcharCodegenUtils, StringType, readSidePadding, c_preferred_cust_flag#18, 1, true, false, true) = Y) AND isnotnull(c_current_addr_sk#17))

(23) CometProject
Input [2]: [c_current_addr_sk#17, c_preferred_cust_flag#18]
Arguments: [c_current_addr_sk#17], [c_current_addr_sk#17]

(24) CometBroadcastExchange
Input [1]: [c_current_addr_sk#17]
Arguments: [c_current_addr_sk#17]

(25) CometBroadcastHashJoin
Left output [2]: [ca_address_sk#14, ca_zip#16]
Right output [1]: [c_current_addr_sk#17]
Arguments: [ca_address_sk#14], [c_current_addr_sk#17], Inner, BuildRight

(26) CometProject
Input [3]: [ca_address_sk#14, ca_zip#16, c_current_addr_sk#17]
Arguments: [ca_zip#16], [ca_zip#16]

(27) CometHashAggregate
Input [1]: [ca_zip#16]
Keys [1]: [ca_zip#16]
Functions [1]: [partial_count(1)]

(28) CometExchange
Input [2]: [ca_zip#16, count#19]
Arguments: hashpartitioning(ca_zip#16, 5), ENSURE_REQUIREMENTS, CometNativeShuffle, [plan_id=1]

(29) CometHashAggregate
Input [2]: [ca_zip#16, count#19]
Keys [1]: [ca_zip#16]
Functions [1]: [count(1)]

(30) CometFilter
Input [2]: [ca_zip#20, cnt#21]
Condition : (cnt#21 > 10)

(31) CometProject
Input [2]: [ca_zip#20, cnt#21]
Arguments: [ca_zip#20], [ca_zip#20]

(32) CometBroadcastExchange
Input [1]: [ca_zip#20]
Arguments: [ca_zip#20]

(33) CometBroadcastHashJoin
Left output [1]: [ca_zip#13]
Right output [1]: [ca_zip#20]
Arguments: [coalesce(ca_zip#13, ), isnull(ca_zip#13)], [coalesce(ca_zip#20, ), isnull(ca_zip#20)], LeftSemi, BuildRight

(34) CometHashAggregate
Input [1]: [ca_zip#13]
Keys [1]: [ca_zip#13]
Functions: []

(35) CometExchange
Input [1]: [ca_zip#13]
Arguments: hashpartitioning(ca_zip#13, 5), ENSURE_REQUIREMENTS, CometNativeShuffle, [plan_id=2]

(36) CometHashAggregate
Input [1]: [ca_zip#13]
Keys [1]: [ca_zip#13]
Functions: []

(37) CometBroadcastExchange
Input [1]: [ca_zip#13]
Arguments: [ca_zip#13]

(38) CometBroadcastHashJoin
Left output [3]: [ss_net_profit#2, s_store_name#9, s_zip#11]
Right output [1]: [ca_zip#13]
Arguments: [substr(s_zip#11, 1, 2)], [substr(ca_zip#13, 1, 2)], Inner, BuildRight

(39) CometProject
Input [4]: [ss_net_profit#2, s_store_name#9, s_zip#11, ca_zip#13]
Arguments: [ss_net_profit#2, s_store_name#9], [ss_net_profit#2, s_store_name#9]

(40) CometHashAggregate
Input [2]: [ss_net_profit#2, s_store_name#9]
Keys [1]: [s_store_name#9]
Functions [1]: [partial_sum(UnscaledValue(ss_net_profit#2))]

(41) CometExchange
Input [2]: [s_store_name#9, sum#22]
Arguments: hashpartitioning(s_store_name#9, 5), ENSURE_REQUIREMENTS, CometNativeShuffle, [plan_id=3]

(42) CometHashAggregate
Input [2]: [s_store_name#9, sum#22]
Keys [1]: [s_store_name#9]
Functions [1]: [sum(UnscaledValue(ss_net_profit#2))]

(43) CometTakeOrderedAndProject
Input [2]: [s_store_name#9, sum(ss_net_profit)#23]
Arguments: TakeOrderedAndProject(limit=100, orderBy=[s_store_name#9 ASC NULLS FIRST], output=[s_store_name#9,sum(ss_net_profit)#23]), [s_store_name#9, sum(ss_net_profit)#23], 100, 0, [s_store_name#9 ASC NULLS FIRST], [s_store_name#9, sum(ss_net_profit)#23]

(44) CometColumnarToRow [codegen id : 1]
Input [2]: [s_store_name#9, sum(ss_net_profit)#23]

===== Subqueries =====

Subquery:1 Hosting operator id = 1 Hosting Expression = ss_sold_date_sk#3 IN dynamicpruning#4
BroadcastExchange (49)
+- * CometColumnarToRow (48)
   +- CometProject (47)
      +- CometFilter (46)
         +- CometScan [native_iceberg_compat] parquet spark_catalog.default.date_dim (45)


(45) CometScan [native_iceberg_compat] parquet spark_catalog.default.date_dim
Output [3]: [d_date_sk#5, d_year#6, d_qoy#7]
Batched: true
Location [not included in comparison]/{warehouse_dir}/date_dim]
PushedFilters: [IsNotNull(d_qoy), IsNotNull(d_year), EqualTo(d_qoy,2), EqualTo(d_year,1998), IsNotNull(d_date_sk)]
ReadSchema: struct<d_date_sk:int,d_year:int,d_qoy:int>

(46) CometFilter
Input [3]: [d_date_sk#5, d_year#6, d_qoy#7]
Condition : ((((isnotnull(d_qoy#7) AND isnotnull(d_year#6)) AND (d_qoy#7 = 2)) AND (d_year#6 = 1998)) AND isnotnull(d_date_sk#5))

(47) CometProject
Input [3]: [d_date_sk#5, d_year#6, d_qoy#7]
Arguments: [d_date_sk#5], [d_date_sk#5]

(48) CometColumnarToRow [codegen id : 1]
Input [1]: [d_date_sk#5]

(49) BroadcastExchange
Input [1]: [d_date_sk#5]
Arguments: HashedRelationBroadcastMode(List(cast(input[0, int, true] as bigint)),false), [plan_id=4]


