Skip to content

[fix](iceberg) Align scan schema carrier names by field id - #69382

Merged
Gabriel39 merged 3 commits into
apache:masterfrom
hubgeter:fix/iceberg-scan-schema-carrier-by-field-id
Oct 22, 2026
Merged

Gabriel39 merged 3 commits into
apache:masterfrom
hubgeter:fix/iceberg-scan-schema-carrier-by-field-id

Conversation

@hubgeter

@hubgeter hubgeter commented Oct 21, 2026 •

Copy link
Copy Markdown
Contributor

What problem does this PR solve?

Issue Number: N/A

Problem Summary:
Iceberg scan carriers could use inconsistent top-level name casing or schema generations, especially for full-schema, Top-N, and snapshot-pinned partition scans. Build all carriers from one authoritative scan schema and resolve partition columns by Iceberg field id.

Release note

Fix mixed-case and time-travel Iceberg reads by keeping scan-schema carrier names consistent.

Check List (For Author)

  • Test

    • Regression test
    • Unit Test
    • Manual test (add detailed scripts or steps below)
    • No need to test or manual test. Explain why:
      • This is a refactor/code format and no logic has been changed.
      • Previous test can cover this change.
      • No code files have been changed.
      • Other reason

    Regression test: test_iceberg_scan_schema_carrier_names passed twice, including normal output comparison.
    Unit tests: Iceberg connector suite passed (1478 tests, 0 failures, 1 skipped).
    Manual test: verified mixed-case ORC, Top-N, pinned snapshot partition rename/filter, and count pushdown with Spark, Iceberg REST, and Doris.

  • Behavior changed:

    • No.
    • Yes.
  • Does this need documentation?

    • No.
    • Yes.

Check List (For Reviewer who merge this PR)

  • Confirm the release note
  • Confirm test cases
  • Confirm document
  • Add branch pick label

### What problem does this PR solve?

Issue Number: None

Problem Summary:
Iceberg full-schema dictionaries lowercased top-level fields while scan slots preserved their Iceberg names. Snapshot-pinned partition carriers also resolved names from the latest table schema instead of the query schema. Mixed-case, time-travel, Top-N, partition evolution and equality-delete scans could therefore send internally inconsistent FE/BE schemas.

Build every carrier from one authoritative scan schema and resolve partition keys by stable Iceberg field id. Preserve case only for top-level fields; nested struct names keep the existing Doris lowercase contract. Thread the same schema through batch, streaming, and count-pushdown range planning.

### Release note

Fix mixed-case and time-travel Iceberg reads by keeping scan-slot and partition-carrier names consistent.

### Check List (For Author)

- Test: Unit Test
    - ICEBERG connector module: 1478 tests, 0 failures, 1 skipped live test
    - Checkstyle and connector import gates passed
- Behavior changed: Yes. Mixed-case top-level dictionary names now match scan-slot names, and pinned partition carriers use the pinned schema generation.
- Does this need documentation: No
@hello-stephen

Copy link
Copy Markdown
Contributor

Thank you for your contribution to Apache Doris.
Don't know what should be done next? See How to process your PR.

Please clearly describe your PR:

  1. What problem was fixed (it's best to include specific error reporting information). How it was fixed.
  2. Which behaviors were modified. What was the previous behavior, what is it now, why was it modified, and what possible impacts might there be.
  3. What features were added. Why was this function added?
  4. Which code was refactored and why was this part of the code refactored?
  5. Which functions were optimized and what is the difference before and after the optimization?

@hubgeter

Copy link
Copy Markdown
Contributor Author

/review

### What problem does this PR solve?

Issue Number: N/A

Problem Summary:
Add an external Iceberg regression suite for mixed-case full-schema and snapshot-pinned scans. The suite covers Top-N, nested structs, partition schema evolution, partition predicates, and count pushdown.

### Release note

None

### Check List (For Author)

- Test: Regression test
    - test_iceberg_scan_schema_carrier_names
- Behavior changed: No
- Does this need documentation: No
@hubgeter

Copy link
Copy Markdown
Contributor Author

/review

@hubgeter

Copy link
Copy Markdown
Contributor Author

run buildall

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reviewed all 10 changed paths at commit 4e60704. One new P2 finding concerns repeated full-schema searches during per-file partition planning. No P0/P1 finding and no existing blocking inline comments were identified.

Critical checkpoint conclusions:

  1. Goal and correctness: preserved root names now agree with Doris scan slots; partition keys and per-file values resolve against the same pinned schema. The added unit and regression cases cover mixed case, historical renames, nested fields, Top-N carriers, eager/streaming ranges and counts. Static FE-to-BE tracing supports the intended correction.
  2. Scope and reuse: focused Iceberg carrier changes; parameter/comment renames match existing case-preserved handles. P2 below identifies an available indexed lookup that should be reused.
  3. Concurrency: no new threads, locks or shared mutable state. Streaming captures an immutable Schema and retains its existing single-consumer contract.
  4. Lifecycle: iterator ownership, close/error paths, count retries and one-file scratch lifetime remain intact. No new static initialization or ownership dependency.
  5. Configuration: no configuration items added or changed.
  6. Compatibility: existing schema transport and symbols are retained. V1 exact root lookup agrees with preserved slots; V2 resolves roots case-insensitively/by field ID. Nested names remain lowercase.
  7. Thrift/protobuf: no definitions, IDs or required fields changed.
  8. Parallel paths: eager, streaming, manifest-count representative, file-task count fallback, Top-N, equality-delete and system-table paths were inspected; schema propagation is consistent.
  9. Conditions and errors: existing empty-pin, system-table, binary/fixed partition and count safety gates remain. Missing requested columns and malformed schema carriers continue to fail explicitly; nested partition sources are excluded consistently.
  10. Test coverage: new JUnit cases and nine ORC regression queries exercise the changed naming contract. The SQL does not explicitly assert Top-N materialization plan activation; equality-delete runtime coverage and wide-table planning performance are not added here. No concrete correctness failure was found in those paths.
  11. Expected results: all nine output labels align with queries; sorted rows, nested values, historical/current row sets, limits and counts of 2/3 match the inserted data. Output generation and author-reported executions were not independently reproduced.
  12. Observability: existing schema/decode/planning errors remain adequate for this local carrier change; no new distributed operation requires metrics or logging.
  13. Transactions and persistence: no EditLog, transaction, replay, durability or failover behavior is changed.
  14. Writes and crash cleanup: production changes affect read planning only; no new data-write atomicity or cleanup requirement.
  15. FE-to-BE variables: no new protocol variable; existing schema-name and path-key/value carriers were traced through both native reader generations.
  16. Performance: P2 below adds work proportional to schema width for every file on identity-partitioned scans. The operation count follows directly from the loops; runtime latency was not measured.
  17. Other concerns and user focus: no extra user focus was supplied. Initial casing/equality and pinned-partition correctness risks were dismissed with concrete caller/reader evidence; the lookup performance issue is the sole accepted finding.

Validation was static only, as required: no builds, tests, source edits or mixed-version cluster execution. All changed paths and candidate dispositions are covered; no unresolved code candidate remains. The independent confirmation round and final sweep determine the convergence result recorded with this delivery.

Review converged after 2 round(s).


String columnName = table.schema().findColumnName(partitionField.sourceId());
String columnName =
topLevelSourceColumnName(scanSchema, partitionField.sourceId());

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[P2] Keep identity source lookup indexed on the per-file path

computePerFileInvariants calls this method for every distinct data file on eager and streaming scans. topLevelSourceColumnName scans all of scanSchema.columns() for each identity field, replacing the cached map lookup in Schema.findColumnName. For a 1,000-column table whose identity partition source is last, planning 1,000,000 files now performs about one billion field-ID comparisons even for a narrow projection; the scratch cache only saves repeated byte slices of the same file. Use the cached top-level lookup scanSchema.asStruct().field(sourceId), or a scan-scoped ID-to-name map, to preserve pinned names and nested-source exclusion without multiplying planning work by schema width.

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reviewed all ten changed files at 4e60704ac3b634d97c1d745af08663d6e42d8115. No new inline findings. The existing P2 identity-source lookup finding still applies: source-name lookup now scans the top-level schema for each identity field of each distinct data file. It is already covered and was not reposted. There are no existing P0/P1 findings to carry forward.

Review converged in 1 round: both complete-review subagents and the additional risk reviewer returned NO_NEW_VALUABLE_FINDINGS against the same empty new-comment set. All candidates and risk questions have evidence-based dispositions; no changed-path coverage gap or unresolved code candidate remains.

Critical checkpoint Conclusion
Goal and proof The implementation aligns full/equality schema root names with case-preserved scan slots and resolves partition names by stable field ID in the selected scan schema. Added unit cases inspect root/nested casing and pinned eager/streaming carriers; the ORC regression covers rename, filters, Top-N-shaped SQL and counts.
Scope, clarity and reuse Focused internal Iceberg changes with shared range builders; handle/range edits are comments, and helper parameter renames match the actual name contract.
Concurrency and locks The streaming source retains a final immutable schema reference and uses its existing serial consumption and per-source scratch. No new shared mutation, locks, lock ordering or thread entry.
Lifecycle and static initialization No new resource ownership or static initialization dependency. Existing iterator/task close and count try-with-resources paths remain intact.
Configuration No configuration changes.
Compatibility No shared SPI, function-symbol or storage-format changes. Corrected names use existing carriers; both legacy and current BE consumers were traced.
Thrift/protobuf IDs No definition changes; branch field-ID comparison is inapplicable.
Parallel paths Eager, streaming, manifest-count and file-count paths, including cache/SDK retries, consistently pass the scan schema. System tables remain separate; full pinned, Top-N and equality carriers preserve root names.
Conditions and errors Stable-ID lookup intentionally excludes absent/dropped/nested root sources; existing nonidentity/binary handling and tuple typing remain unchanged. Nested dictionary names still lowercase; missing requested fields still fail explicitly.
Test coverage and negative cases New tests cover the target carrier failures. Existing cases cover absent requested fields, nulls, spec evolution and equality drop/re-add histories. Builds and tests were not run under this static-review contract.
Expected results All nine new output blocks agree with the seeded rows, ordering, limits, nested values, two-row pinned snapshot and three-row current table; query/result labels match. Generation provenance was not independently verified.
Observability No new execution mode requiring additional metrics/logs; existing metadata error conversion, cache fallback warnings and scan metrics remain.
Transactions, persistence and failover Read-side planning changes only; no EditLog, commit/replay or failover change. Snapshot/schema selection remains the read visibility fence.
Data writes and crash atomicity No production data-write changes or new cleanup obligations.
FE/BE propagation Dictionary root names, path partition keys and per-range keys use the same selected schema; values/null flags remain paired. Top-N phase two copies the full schema params and preserves names/categories. No new wire variable.
Performance The existing P2 above is independently confirmed. No distinct additional regression was substantiated.
Other core invariants No native allocation or MoW/delete-bitmap changes. Equality dependencies continue to resolve stable IDs, including historical hidden keys.
User focus No additional user-provided focus was supplied.

Validation limits: this was a static review, with no builds, tests or source modifications. Author-reported executions were not reproduced. The new regression does not force a particular scanner version or lazy-materialization plan, and mixed-case equality-delete application was traced through both BE implementations rather than executed end to end. These execution limits do not leave an unresolved code candidate.

Review converged after 1 round(s).

### What problem does this PR solve?

Issue Number: N/A

Problem Summary:
Per-file identity partition planning searched every top-level schema column for each partition field. Resolve the field-id through Iceberg's top-level struct index so planning no longer scales with schema width.

### Release note

None

### Check List (For Author)

- Test: Unit Test
    - IcebergPartitionUtilsTest
    - IcebergScanPlanProviderTest
    - IcebergSchemaUtilsTest
- Behavior changed: No
- Does this need documentation: No
@hubgeter

Copy link
Copy Markdown
Contributor Author

run buildall

@hubgeter

Copy link
Copy Markdown
Contributor Author

/review

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No new actionable findings in PR #69382 at 4450fac. All 10 changed paths and 52 diff hunks were reviewed, including their relevant upstream/downstream consumers. The review converged in 1 round: both general reviewers and the separate risk reviewer returned NO_NEW_VALUABLE_FINDINGS against the same empty inline set.

Existing P2 thread 4334582627 is fixed at this head: topLevelSourceColumnName now calls asStruct().field(sourceId), which uses a cached direct-child ID map in Iceberg 1.12.0. It is not reposted. No existing P0/P1 applies. No additional user focus was supplied.

Critical checkpoint conclusions:

  1. Goal: the inspected code aligns top-level dictionary names, identity partition keys and per-file values with the selected scan schema. Added unit and regression cases target mixed-case and historical reads.
  2. Scope and reuse: the changes are focused on Iceberg name/schema propagation, reuse existing selectors, and cover internal signature plumbing without broad API changes.
  3. Concurrency and locks: no new threads or locks. Statement-frozen metadata and an immutable captured Schema keep naming stable; streaming scratch remains source-local.
  4. Lifecycle and initialization: existing iterable/iterator cleanup is preserved. The new schema reference follows split-source lifetime; no new resource cycle or static initialization dependency.
  5. Configuration: none added or changed; dynamic update requirements do not apply.
  6. Compatibility: no public SPI, function symbol or storage-format change. Existing carriers retain stable field IDs and now match case-preserved slots.
  7. Thrift/protobuf: no definitions, field IDs or enum values changed.
  8. Parallel paths: eager, streaming, both count strategies and cache fallbacks pass the selected schema; pinned, ref, equality-delete, Top-N and system-table paths were traced.
  9. Special conditions: identity-only/top-level source restrictions match engine slot classification. Dropped IDs cannot bind reused names; nested fields remain file-decoded and nested dictionary names remain lowercase.
  10. Test coverage: new tests inspect full-schema/equality case, historical partition names, Top-N dictionaries and eager/streaming carriers. Existing negative/evolution/count tests were inspected for the affected contracts.
  11. Expected results: all nine regression sections match their queries; ordering is deterministic, and rows, limits and pinned/current counts agree with setup by inspection.
  12. Observability: existing metadata errors and scan metrics remain sufficient for this local carrier correction; no new workflow needs instrumentation.
  13. Transactions/persistence/failover: no transaction, EditLog, commit or replay behavior changed. Existing snapshot selection is preserved; native MoW/version-write invariants are outside the change.
  14. Writes and atomicity: no data-write or recovery protocol change. The reused static-partition helper retains equivalent direct-root lookup semantics.
  15. FE/BE propagation: existing schema dictionaries and partition key/value carriers agree with slot names in both reader generations. Top-N refetch retains the source schema parameters.
  16. Performance and memory: no schema copy or growing per-file cache is introduced. Indexed source lookup removes the existing schema-width multiplier while retaining bounded scratch state.
  17. Other risks: rename/drop/reuse, schema-only commits, empty pins, nested source collisions, historical equality IDs and row-lineage paths were rechecked; no unresolved static correctness candidate remains.

Validation limits: this was a static-only review as required; no builds or tests were run. The author's reported test success and generated-output provenance were not independently reproduced. No physical Top-N plan or equality-delete read was observed at runtime; the new regression does not itself create equality-delete data. These are runtime validation limits, with no uncovered assigned static scope.

Review converged after 1 round(s).

@hello-stephen

Copy link
Copy Markdown
Contributor

FE UT Coverage Report

Increment line coverage `` 🎉
Increment coverage report
Complete coverage report

@hello-stephen

Copy link
Copy Markdown
Contributor
TPC-H: Total hot run time: 28824 ms
machine: 'aliyun_ecs.c7a.8xlarge_32C64G'
scripts: https://github.com/apache/doris/tree/master/tools/tpch-tools
Tpch sf100 test result on commit 4450fac0adbb09e56a5bde8b76e8f1249f538efb, data reload: false

------ Round 1 ----------------------------------
============================================
q1	17597	5082	5358	5082
q2	2150	319	278	278
q3	10185	1446	807	807
q4	4682	456	345	345
q5	7439	788	533	533
q6	182	181	152	152
q7	742	791	611	611
q8	9260	1389	1060	1060
q9	5653	4355	4181	4181
q10	6836	1285	1024	1024
q11	427	245	223	223
q12	668	392	287	287
q13	18071	3623	3072	3072
q14	268	273	255	255
q15	q16	719	722	649	649
q17	1211	752	594	594
q18	6939	6179	6111	6111
q19	1111	966	613	613
q20	375	329	227	227
q21	5030	2505	2436	2436
q22	393	346	284	284
Total cold run time: 99938 ms
Total hot run time: 28824 ms

----- Round 2, with runtime_filter_mode=off -----
============================================
q1	5978	5904	6137	5904
q2	744	641	578	578
q3	5640	5863	5232	5232
q4	1988	2130	1572	1572
q5	5633	5899	5529	5529
q6	231	206	148	148
q7	2191	2061	1737	1737
q8	2945	2622	2631	2622
q9	8049	7908	7476	7476
q10	3639	3585	3120	3120
q11	583	413	388	388
q12	674	654	542	542
q13	3237	3492	2955	2955
q14	278	283	262	262
q15	q16	651	675	620	620
q17	7677	7069	6779	6779
q18	12951	12161	12847	12161
q19	931	826	853	826
q20	2131	2097	1931	1931
q21	5546	4554	4733	4554
q22	494	480	448	448
Total cold run time: 72191 ms
Total hot run time: 65384 ms

@hello-stephen

Copy link
Copy Markdown
Contributor
TPC-DS: Total hot run time: 150949 ms
machine: 'aliyun_ecs.c7a.8xlarge_32C64G'
scripts: https://github.com/apache/doris/tree/master/tools/tpcds-tools
TPC-DS sf100 test result on commit 4450fac0adbb09e56a5bde8b76e8f1249f538efb, data reload: false

query5	4317	578	452	452
query6	427	204	191	191
query7	4816	446	228	228
query8	318	164	152	152
query9	8794	3107	3148	3107
query10	520	300	248	248
query11	6029	3844	3568	3568
query12	149	91	88	88
query13	1262	427	315	315
query14	6114	3957	3619	3619
query14_1	3376	3414	3394	3394
query15	209	200	180	180
query16	940	431	405	405
query17	819	638	521	521
query18	2423	441	315	315
query19	198	163	139	139
query20	85	83	84	83
query21	216	123	106	106
query22	12899	13113	12835	12835
query23	13428	12776	12472	12472
query23_1	12535	12472	12429	12429
query24	7373	841	472	472
query24_1	467	477	469	469
query25	543	418	360	360
query26	1261	263	141	141
query27	2754	443	272	272
query28	4627	1953	1939	1939
query29	1587	612	452	452
query30	308	221	189	189
query31	1030	934	825	825
query32	180	98	91	91
query33	553	311	250	250
query34	908	847	488	488
query35	721	763	645	645
query36	824	803	704	704
query37	117	100	85	85
query38	1793	1714	1666	1666
query39	807	812	738	738
query39_1	738	731	738	731
query40	223	135	99	99
query41	76	70	72	70
query42	89	84	86	84
query43	355	364	312	312
query44	1329	685	679	679
query45	182	177	166	166
query46	830	974	573	573
query47	2950	2971	2666	2666
query48	297	310	229	229
query49	581	409	294	294
query50	665	279	209	209
query51	10455	10734	10590	10590
query52	81	85	81	81
query53	185	212	153	153
query54	256	200	196	196
query55	73	72	70	70
query56	252	232	240	232
query57	1669	1625	1568	1568
query58	317	274	280	274
query59	2134	2135	1963	1963
query60	306	258	245	245
query61	178	178	196	178
query62	395	338	290	290
query63	195	165	161	161
query64	2775	1002	783	783
query65	3334	3298	3258	3258
query66	1789	434	317	317
query67	20154	20200	20025	20025
query68	2986	1000	604	604
query69	377	288	266	266
query70	842	822	756	756
query71	311	236	218	218
query72	2684	2593	2325	2325
query73	503	548	299	299
query74	4648	4516	4375	4375
query75	2348	2260	1925	1925
query76	2314	1010	608	608
query77	352	368	267	267
query78	9663	9768	9079	9079
query79	989	934	508	508
query80	788	422	353	353
query81	555	319	271	271
query82	1050	128	102	102
query83	282	196	181	181
query84	322	120	104	104
query85	953	432	371	371
query86	349	242	233	233
query87	1993	1926	1775	1775
query88	3667	2685	2652	2652
query89	335	282	244	244
query90	1749	174	168	168
query91	160	160	127	127
query92	102	88	90	88
query93	1037	1011	567	567
query94	488	303	272	272
query95	570	388	306	306
query96	670	477	234	234
query97	2441	2450	2345	2345
query98	162	151	144	144
query99	766	762	651	651
Total cold run time: 234743 ms
Total hot run time: 150949 ms

@hello-stephen

Copy link
Copy Markdown
Contributor
ClickBench: Total hot run time: 24.22 s
machine: 'aliyun_ecs.c7a.8xlarge_32C64G'
scripts: https://github.com/apache/doris/tree/master/tools/clickbench-tools
ClickBench test result on commit 4450fac0adbb09e56a5bde8b76e8f1249f538efb, data reload: false

query1	0.01	0.01	0.01
query2	0.09	0.05	0.05
query3	0.26	0.09	0.09
query4	1.60	0.10	0.10
query5	0.23	0.24	0.24
query6	1.17	0.68	0.67
query7	0.03	0.01	0.00
query8	0.06	0.04	0.04
query9	0.41	0.35	0.35
query10	0.58	0.59	0.58
query11	0.20	0.14	0.14
query12	0.20	0.14	0.14
query13	0.50	0.50	0.50
query14	1.03	1.02	0.99
query15	0.63	0.62	0.60
query16	0.35	0.33	0.35
query17	1.15	1.09	1.13
query18	0.20	0.19	0.19
query19	2.06	2.00	1.95
query20	0.02	0.01	0.02
query21	15.54	0.18	0.13
query22	5.05	0.05	0.06
query23	16.29	0.32	0.12
query24	2.96	0.77	0.37
query25	0.10	0.07	0.05
query26	1.54	0.22	0.15
query27	0.06	0.05	0.07
query28	3.05	0.72	0.35
query29	12.47	4.13	3.24
query30	0.28	0.13	0.09
query31	2.78	0.54	0.32
query32	3.22	0.59	0.49
query33	3.18	3.21	3.26
query34	15.46	3.99	3.42
query35	3.37	3.34	3.35
query36	0.55	0.45	0.42
query37	0.10	0.07	0.06
query38	0.06	0.03	0.03
query39	0.04	0.02	0.02
query40	0.17	0.15	0.15
query41	0.08	0.03	0.03
query42	0.03	0.03	0.03
query43	0.04	0.04	0.03
Total cold run time: 97.2 s
Total hot run time: 24.22 s

@hello-stephen

Copy link
Copy Markdown
Contributor

FE UT Coverage Report

Increment line coverage `` 🎉
Increment coverage report
Complete coverage report

@hello-stephen

Copy link
Copy Markdown
Contributor

FE Regression Coverage Report

Increment line coverage 100% (0/0) 🎉
Increment coverage report
Complete coverage report

@924060929 924060929 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reviewed scan-slot/schema-dictionary names, pinned-schema partition field IDs, eager/streaming/count paths and TopN/equality carriers at 4450fac. No blocking issue found. The indexed lookup addresses the earlier review comment. Static source review only; no local build or test execution. P0 Regression was pending when checked.

@Gabriel39
Gabriel39 merged commit aae5992 into apache:master Oct 22, 2026
36 checks passed
@github-actions

Copy link
Copy Markdown
Contributor

PR approved by anyone and no changes requested.

@github-actions github-actions Bot added the approved Indicates a PR has been approved by one committer. label Oct 22, 2026
@github-actions

Copy link
Copy Markdown
Contributor

PR approved by at least one committer and no changes requested.

morningman added a commit to laskoviymishka/doris that referenced this pull request Oct 22, 2026
Brings in apache#69382, which renamed IcebergScanPlanProvider#requestedLowerNames
to requestedColumnNames; the next commit moves the $labels planner onto it.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
morningman added a commit to laskoviymishka/doris that referenced this pull request Oct 22, 2026
…rename

### What problem does this PR solve?

Issue Number: apache#68916

Related PR: apache#69382

Problem Summary: apache#69382 replaced IcebergScanPlanProvider#requestedLowerNames
with requestedColumnNames, which keeps the case of the requested column
names. The $labels planner added by this PR still called the removed
helper, so the PR no longer compiled once merged into master
("cannot find symbol: method requestedLowerNames"). Call
requestedColumnNames like the other system-table path does. The labels
schema is all lower case, so the projected schema is unchanged.

### Release note

None

### Check List (For Author)

- Test: Unit Test, Regression test
    - All 1646 iceberg connector FE unit tests, the $labels ones included,
      pass on top of master (0 failures, 5 skipped).
    - test_iceberg_rest_labels passes.
- Behavior changed: No
- Does this need documentation: No

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
yiguolei pushed a commit that referenced this pull request Oct 28, 2026
#69382) (#69709)

pick #69382

4.2 still uses the legacy IcebergScanNode/IcebergUtils path. The fix
therefore resolves identity partition keys and values from the
query-pinned scan schema by Iceberg field id, so path_partition_keys,
schema info, and range partition metadata stay aligned. The master-only
fe-connector dictionary/lowercasing changes are not applicable to this
path.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

approved Indicates a PR has been approved by one committer. dev/4.2.0-merged reviewed

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants