== Physical Plan ==
TakeOrderedAndProject (33)
+- * Project (32)
   +- * CometColumnarToRow (31)
      +- CometBroadcastHashJoin (30)
         :- CometBroadcastExchange (26)
         :  +- CometProject (25)
         :     +- CometBroadcastHashJoin (24)
         :        :- CometProject (19)
         :        :  +- CometBroadcastHashJoin (18)
         :        :     :- CometProject (14)
         :        :     :  +- CometBroadcastHashJoin (13)
         :        :     :     :- CometProject (9)
         :        :     :     :  +- CometBroadcastHashJoin (8)
         :        :     :     :     :- CometProject (3)
         :        :     :     :     :  +- CometFilter (2)
         :        :     :     :     :     +- CometScan [native_iceberg_compat] parquet spark_catalog.default.customer (1)
         :        :     :     :     +- CometBroadcastExchange (7)
         :        :     :     :        +- CometProject (6)
         :        :     :     :           +- CometFilter (5)
         :        :     :     :              +- CometScan [native_iceberg_compat] parquet spark_catalog.default.customer_address (4)
         :        :     :     +- CometBroadcastExchange (12)
         :        :     :        +- CometFilter (11)
         :        :     :           +- CometScan [native_iceberg_compat] parquet spark_catalog.default.customer_demographics (10)
         :        :     +- CometBroadcastExchange (17)
         :        :        +- CometFilter (16)
         :        :           +- CometScan [native_iceberg_compat] parquet spark_catalog.default.household_demographics (15)
         :        +- CometBroadcastExchange (23)
         :           +- CometProject (22)
         :              +- CometFilter (21)
         :                 +- CometScan [native_iceberg_compat] parquet spark_catalog.default.income_band (20)
         +- CometProject (29)
            +- CometFilter (28)
               +- CometScan [native_iceberg_compat] parquet spark_catalog.default.store_returns (27)


(1) CometScan [native_iceberg_compat] parquet spark_catalog.default.customer
Output [6]: [c_customer_id#1, c_current_cdemo_sk#2, c_current_hdemo_sk#3, c_current_addr_sk#4, c_first_name#5, c_last_name#6]
Batched: true
Location [not included in comparison]/{warehouse_dir}/customer]
PushedFilters: [IsNotNull(c_current_addr_sk), IsNotNull(c_current_cdemo_sk), IsNotNull(c_current_hdemo_sk)]
ReadSchema: struct<c_customer_id:string,c_current_cdemo_sk:int,c_current_hdemo_sk:int,c_current_addr_sk:int,c_first_name:string,c_last_name:string>

(2) CometFilter
Input [6]: [c_customer_id#1, c_current_cdemo_sk#2, c_current_hdemo_sk#3, c_current_addr_sk#4, c_first_name#5, c_last_name#6]
Condition : ((isnotnull(c_current_addr_sk#4) AND isnotnull(c_current_cdemo_sk#2)) AND isnotnull(c_current_hdemo_sk#3))

(3) CometProject
Input [6]: [c_customer_id#1, c_current_cdemo_sk#2, c_current_hdemo_sk#3, c_current_addr_sk#4, c_first_name#5, c_last_name#6]
Arguments: [c_customer_id#7, c_current_cdemo_sk#2, c_current_hdemo_sk#3, c_current_addr_sk#4, c_first_name#8, c_last_name#9], [static_invoke(CharVarcharCodegenUtils.readSidePadding(c_customer_id#1, 16)) AS c_customer_id#7, c_current_cdemo_sk#2, c_current_hdemo_sk#3, c_current_addr_sk#4, static_invoke(CharVarcharCodegenUtils.readSidePadding(c_first_name#5, 20)) AS c_first_name#8, static_invoke(CharVarcharCodegenUtils.readSidePadding(c_last_name#6, 30)) AS c_last_name#9]

(4) CometScan [native_iceberg_compat] parquet spark_catalog.default.customer_address
Output [2]: [ca_address_sk#10, ca_city#11]
Batched: true
Location [not included in comparison]/{warehouse_dir}/customer_address]
PushedFilters: [IsNotNull(ca_city), EqualTo(ca_city,Edgewood), IsNotNull(ca_address_sk)]
ReadSchema: struct<ca_address_sk:int,ca_city:string>

(5) CometFilter
Input [2]: [ca_address_sk#10, ca_city#11]
Condition : ((isnotnull(ca_city#11) AND (ca_city#11 = Edgewood)) AND isnotnull(ca_address_sk#10))

(6) CometProject
Input [2]: [ca_address_sk#10, ca_city#11]
Arguments: [ca_address_sk#10], [ca_address_sk#10]

(7) CometBroadcastExchange
Input [1]: [ca_address_sk#10]
Arguments: [ca_address_sk#10]

(8) CometBroadcastHashJoin
Left output [6]: [c_customer_id#7, c_current_cdemo_sk#2, c_current_hdemo_sk#3, c_current_addr_sk#4, c_first_name#8, c_last_name#9]
Right output [1]: [ca_address_sk#10]
Arguments: [c_current_addr_sk#4], [ca_address_sk#10], Inner, BuildRight

(9) CometProject
Input [7]: [c_customer_id#7, c_current_cdemo_sk#2, c_current_hdemo_sk#3, c_current_addr_sk#4, c_first_name#8, c_last_name#9, ca_address_sk#10]
Arguments: [c_customer_id#7, c_current_cdemo_sk#2, c_current_hdemo_sk#3, c_first_name#8, c_last_name#9], [c_customer_id#7, c_current_cdemo_sk#2, c_current_hdemo_sk#3, c_first_name#8, c_last_name#9]

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

(11) CometFilter
Input [1]: [cd_demo_sk#12]
Condition : isnotnull(cd_demo_sk#12)

(12) CometBroadcastExchange
Input [1]: [cd_demo_sk#12]
Arguments: [cd_demo_sk#12]

(13) CometBroadcastHashJoin
Left output [5]: [c_customer_id#7, c_current_cdemo_sk#2, c_current_hdemo_sk#3, c_first_name#8, c_last_name#9]
Right output [1]: [cd_demo_sk#12]
Arguments: [c_current_cdemo_sk#2], [cd_demo_sk#12], Inner, BuildRight

(14) CometProject
Input [6]: [c_customer_id#7, c_current_cdemo_sk#2, c_current_hdemo_sk#3, c_first_name#8, c_last_name#9, cd_demo_sk#12]
Arguments: [c_customer_id#7, c_current_hdemo_sk#3, c_first_name#8, c_last_name#9, cd_demo_sk#12], [c_customer_id#7, c_current_hdemo_sk#3, c_first_name#8, c_last_name#9, cd_demo_sk#12]

(15) CometScan [native_iceberg_compat] parquet spark_catalog.default.household_demographics
Output [2]: [hd_demo_sk#13, hd_income_band_sk#14]
Batched: true
Location [not included in comparison]/{warehouse_dir}/household_demographics]
PushedFilters: [IsNotNull(hd_demo_sk), IsNotNull(hd_income_band_sk)]
ReadSchema: struct<hd_demo_sk:int,hd_income_band_sk:int>

(16) CometFilter
Input [2]: [hd_demo_sk#13, hd_income_band_sk#14]
Condition : (isnotnull(hd_demo_sk#13) AND isnotnull(hd_income_band_sk#14))

(17) CometBroadcastExchange
Input [2]: [hd_demo_sk#13, hd_income_band_sk#14]
Arguments: [hd_demo_sk#13, hd_income_band_sk#14]

(18) CometBroadcastHashJoin
Left output [5]: [c_customer_id#7, c_current_hdemo_sk#3, c_first_name#8, c_last_name#9, cd_demo_sk#12]
Right output [2]: [hd_demo_sk#13, hd_income_band_sk#14]
Arguments: [c_current_hdemo_sk#3], [hd_demo_sk#13], Inner, BuildRight

(19) CometProject
Input [7]: [c_customer_id#7, c_current_hdemo_sk#3, c_first_name#8, c_last_name#9, cd_demo_sk#12, hd_demo_sk#13, hd_income_band_sk#14]
Arguments: [c_customer_id#7, c_first_name#8, c_last_name#9, cd_demo_sk#12, hd_income_band_sk#14], [c_customer_id#7, c_first_name#8, c_last_name#9, cd_demo_sk#12, hd_income_band_sk#14]

(20) CometScan [native_iceberg_compat] parquet spark_catalog.default.income_band
Output [3]: [ib_income_band_sk#15, ib_lower_bound#16, ib_upper_bound#17]
Batched: true
Location [not included in comparison]/{warehouse_dir}/income_band]
PushedFilters: [IsNotNull(ib_lower_bound), IsNotNull(ib_upper_bound), GreaterThanOrEqual(ib_lower_bound,38128), LessThanOrEqual(ib_upper_bound,88128), IsNotNull(ib_income_band_sk)]
ReadSchema: struct<ib_income_band_sk:int,ib_lower_bound:int,ib_upper_bound:int>

(21) CometFilter
Input [3]: [ib_income_band_sk#15, ib_lower_bound#16, ib_upper_bound#17]
Condition : ((((isnotnull(ib_lower_bound#16) AND isnotnull(ib_upper_bound#17)) AND (ib_lower_bound#16 >= 38128)) AND (ib_upper_bound#17 <= 88128)) AND isnotnull(ib_income_band_sk#15))

(22) CometProject
Input [3]: [ib_income_band_sk#15, ib_lower_bound#16, ib_upper_bound#17]
Arguments: [ib_income_band_sk#15], [ib_income_band_sk#15]

(23) CometBroadcastExchange
Input [1]: [ib_income_band_sk#15]
Arguments: [ib_income_band_sk#15]

(24) CometBroadcastHashJoin
Left output [5]: [c_customer_id#7, c_first_name#8, c_last_name#9, cd_demo_sk#12, hd_income_band_sk#14]
Right output [1]: [ib_income_band_sk#15]
Arguments: [hd_income_band_sk#14], [ib_income_band_sk#15], Inner, BuildRight

(25) CometProject
Input [6]: [c_customer_id#7, c_first_name#8, c_last_name#9, cd_demo_sk#12, hd_income_band_sk#14, ib_income_band_sk#15]
Arguments: [c_customer_id#7, c_first_name#8, c_last_name#9, cd_demo_sk#12], [c_customer_id#7, c_first_name#8, c_last_name#9, cd_demo_sk#12]

(26) CometBroadcastExchange
Input [4]: [c_customer_id#7, c_first_name#8, c_last_name#9, cd_demo_sk#12]
Arguments: [c_customer_id#7, c_first_name#8, c_last_name#9, cd_demo_sk#12]

(27) CometScan [native_iceberg_compat] parquet spark_catalog.default.store_returns
Output [2]: [sr_cdemo_sk#18, sr_returned_date_sk#19]
Batched: true
Location [not included in comparison]/{warehouse_dir}/store_returns]
PushedFilters: [IsNotNull(sr_cdemo_sk)]
ReadSchema: struct<sr_cdemo_sk:int>

(28) CometFilter
Input [2]: [sr_cdemo_sk#18, sr_returned_date_sk#19]
Condition : isnotnull(sr_cdemo_sk#18)

(29) CometProject
Input [2]: [sr_cdemo_sk#18, sr_returned_date_sk#19]
Arguments: [sr_cdemo_sk#18], [sr_cdemo_sk#18]

(30) CometBroadcastHashJoin
Left output [4]: [c_customer_id#7, c_first_name#8, c_last_name#9, cd_demo_sk#12]
Right output [1]: [sr_cdemo_sk#18]
Arguments: [cd_demo_sk#12], [sr_cdemo_sk#18], Inner, BuildLeft

(31) CometColumnarToRow [codegen id : 1]
Input [5]: [c_customer_id#7, c_first_name#8, c_last_name#9, cd_demo_sk#12, sr_cdemo_sk#18]

(32) Project [codegen id : 1]
Output [3]: [c_customer_id#7 AS customer_id#20, concat(c_last_name#9, , , c_first_name#8) AS customername#21, c_customer_id#7]
Input [5]: [c_customer_id#7, c_first_name#8, c_last_name#9, cd_demo_sk#12, sr_cdemo_sk#18]

(33) TakeOrderedAndProject
Input [3]: [customer_id#20, customername#21, c_customer_id#7]
Arguments: 100, [c_customer_id#7 ASC NULLS FIRST], [customer_id#20, customername#21]

