You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Type casting error when reading files persisted with old schema for complex type #2617
When a table's struct (or nested list/map) column has gained fields over time via schema evolution, reading data files written under the older schema fails with an Arrow cast error such as Cast error: Casting from Utf8 to Struct(...). The record-batch transformer reconciles a file's nested children to the table schema by position within the struct rather than by Iceberg field id, so once a nested struct adds a field, the children no longer line up and a mismatched cast is attempted (e.g. casting a string child into a struct slot). Files are valid and readable by Iceberg-Java/Spark.
e.g. struct goes from a, c to a, b, c -> when reading old file with only a, c it tries to cast c to type of b
To Reproduce
Create a table with a column s struct<a: string> (plus other columns).
Write a data file.
Evolve the schema to s struct<a: string, b: long> (add a nested field), keeping field ids stable.
Read the table (the older file still has s with only a).
The scan errors with Cast error: Casting from Utf8 to Struct(...).
Expected behavior
Nested struct/list/map children are reconciled to the table schema by field id (recursively), and fields present in the table schema but absent from the file are materialized as typed NULLs — matching Iceberg's column-projection-by-id semantics. The read should succeed.
changed the title [-]Reading a struct column that gained fields fails with "Cast error: Casting from Utf8 to Struct"[/-][+]Type casting error when reading files persisted with old schema for complex type[/+]on Jun 10, 2026
I hit this error as well (using Spark + Datafusion Comet) and could really use the fix - I'd be happy to do the legwork to revive the PR and try to get it merged in
Activity
[-]Reading a struct column that gained fields fails with "Cast error: Casting from Utf8 to Struct"[/-][+]Type casting error when reading files persisted with old schema for complex type[/+]fix(arrow): reconcile evolved nested structs by field id, not position
fix(arrow): reconcile evolved nested structs by field id, not position
fix(arrow): reconcile evolved nested structs by field id, not position
fix(arrow): reconcile evolved nested structs by field id, not position
ewoodbury commentedon Sep 20, 2026
I hit this error as well (using Spark + Datafusion Comet) and could really use the fix - I'd be happy to do the legwork to revive the PR and try to get it merged in
ewoodbury commentedon Sep 20, 2026
Revived #2647 as #3255, rebased onto current
main.This is @jordepic's original patch (authorship preserved) plus a small append-case unit test
fix: fall back from the native Iceberg scan when a nested field was a…
fix: fall back from the native Iceberg scan when a nested field was a…
fix(arrow): reconcile evolved nested structs by field id, not position (