avro schema reader ignores iceberg-field-name property — returns sanitized names from java manifests
Nobody has claimed this yet.
Assessment
- Difficulty
- 2/5
- Estimated time
- 1-3 hours
- Newbie friendliness
- 72/100
- Issue type
- Bug
- Clarity
- Clearly specified
- Activity status
- Quiet
- Tech stack
- rust
- Domain
- data-engineering
Research direction
Start in crates/iceberg/src/avro/schema.rs, focusing on avro_schema_to_schema and how each Avro field's name is read. Compare the documented iceberg-field-name property with Java's ICEBERG_FIELD_NAME_PROP convention, then verify that Java-written manifests expose the original partition field name rather than the sanitized Avro name.
Written by the indexing model from the issue text.
Description
problem
when java writes manifests with partition field names that violate avro naming rules, it sanitizes them (e.g. 815d3b... → _815d3b...) and stores the original in an iceberg-field-name avro field property. iceberg-rust's avro reader uses the avro field name directly without checking this property, so it returns the sanitized name instead of the original.
this causes field name mismatches when reading java-written manifests — the partition field name in the manifest entry won't match the partition field name in the table's partition spec.
relevant code
crates/iceberg/src/avro/schema.rs — avro_schema_to_schema reads &avro_field.name without checking for iceberg-field-name custom property.
java's read path resolves fields by field-id (integer), but also provides the original name via ICEBERG_FIELD_NAME_PROP:
public static final String ICEBERG_FIELD_NAME_PROP = "iceberg-field-name";
reproduction
- create a table in java with a partition field name starting with a digit
- write data (java produces manifests with sanitized avro field names +
iceberg-field-nameproperty) - read the manifest in iceberg-rust — field names will be the sanitized form, not the original
expected behavior
when reading avro schemas from manifests, check each field for the iceberg-field-name property. if present, use that as the iceberg field name instead of the avro field name.
notes
- iceberg resolves fields by
field-idin most paths, so the impact is limited to code that uses field names from manifest entries - this is a well-established convention in the java implementation (since 2019)
- pyiceberg implements its own avro reader that bypasses name validation entirely
- Dominant language
- Rust
- Stars
- 1.4k
- Forks
- 574
- Avg merge
- 1d 18h
- Merged PRs (30d)
- 84
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from apache/iceberg-rust
-
enhancement
Difficulty 2/5 1-3 hours Newbie friendliness 72/100
apache/iceberg-rust#3234 · 1 reaction ·
-
bug
Difficulty 2/5 1-3 hours Newbie friendliness 72/100
apache/iceberg-rust#3229 ·
-
Difficulty 2/5 1-3 hours Newbie friendliness 72/100
apache/iceberg-rust#3222 · 1 comment ·
-
bug
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
apache/iceberg-rust#2929 · 1 comment ·
-
bug
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
apache/iceberg-rust#2923 · 1 comment · 2 reactions ·
All issues in apache/iceberg-rust
Similar issues
-
bug
Difficulty 2/5 1-3 hours Newbie friendliness 68/100
gitbutlerapp/gitbutler#15998 · 1 comment ·
-
bug triage:deciding
Difficulty 1/5 Under an hour Newbie friendliness 88/100
open-telemetry/otel-arrow#4132 ·
-
Difficulty 2/5 1-3 hours Newbie friendliness 88/100
-
Difficulty 2/5 1-3 hours Newbie friendliness 84/100
-
Difficulty 2/5 1-3 hours Newbie friendliness 76/100
bitcoindevkit/bdk-ffi#1125 ·