Skip to content

Build Not yet confirmed elsewhere1 publisher 2 min read Published

Iceberg 1.11.0 puts Spark, Flink and Hive file access behind one format registry

Iceberg 1.11.0 ships a File Format API that sends Spark, Flink, Hive and plain-Java reads and writes through one registry of format models. A dev.to walkthrough says the file format list stays fixed, so Vortex and Lance still need a change inside Iceberg.

The Engineer · Build desk

How we use AI Send a correction

Illustration accompanying Iceberg 1.11.0 puts Spark, Flink and Hive file access behind one format registry
Generated illustration
Registry reaches engines using Iceberg's readers Which engines and formats Iceberg's File Format API reaches. The story's only figures are version numbers, so no number chart is drawn.

Spark, Flink, Hive and plain Java reuse iceberg-core readers, so the registry reaches them. Trino uses Iceberg core for metadata, own readers for data. DuckDB, DataFusion, PyIceberg and Polars use Arrow readers; Lance and Vortex ship one. New formats need a change in Iceberg.

Registry reaches engines using Iceberg's readers
WhoHowKindClaim
Spark, Flink and HiveLink the iceberg-core jar and reuse its readers, so the registry reaches themcapability7
TrinoUses Iceberg's core for metadata and its own Parquet and ORC readers for datadecision9
Arrow-reading enginesDuckDB, DataFusion via iceberg-rust, PyIceberg and Polars use their own Arrow readersexposure8
Lance and VortexBoth ship an Arrow reader, which is all an Arrow engine needs for a new formatcapability10
New file formatsThe format list is fixed; a new format remains a change inside the Iceberg projectconstraint14

What happened

  • Before the API, Spark had SparkParquetReaders, Flink had FlinkParquetReaders and the generic Java API had GenericParquetReaders, each with its own path through read options and pushdown.
  • DuckDB, DataFusion through iceberg-rust, PyIceberg and Polars implement the spec with their own readers and read through Arrow, so the Java registry does not reach them.
  • Trino is Java too, but it takes metadata from Iceberg core and reads data with its own Parquet and ORC readers.
  • Multimodal support is arriving as Parquet column types: FILE shipped in parquet-format 2.14.0, VECTOR is at proposal stage, and both are to be mirrored into the next table spec.

Why it matters

  • contradiction The API was first framed as a way to try Vortex and Lance, formats built very differently from Parquet, but the shipped design fixes the format list and opens only the engine side.
  • constraint Engines that read through Arrow need only an Arrow reader for a new format, and Lance and Vortex already ship one, so those two formats do not depend on the registry.
  • capability A Java engine with its own row type can register a format model and read every Iceberg table through the shared builders.

The registry is a lookup table, and the code is short. The key is a pair of file format and row type. The value is the format model that reads and writes that combination [12]. It sits in iceberg-core [7]. Entries go in through `public static synchronized void register(FormatModel<?, ?> formatModel)`, and the key type is `Pair<FileFormat, Class<?>>` [13]. The excerpt and the grid in the walkthrough come from 1.12.0, not 1.11.0 [13].

The signature shows which side is open. The second half of the key is a Class, the engine's row type, and any engine can register its own [14]. Spark wants an InternalRow, Flink a RowData, the plain Java API an Iceberg Record, and the same Parquet file can be read into any of them [11]. The first half is a FileFormat. According to the walkthrough, that list is fixed, so a new format remains a change inside the Iceberg project [14].

Java needs a registry because it has three row types and no shared memory format [10]. Arrow plays that role in the other engines.

The account here comes from a single dev.to walkthrough. Its description of the builders is plain: every engine now goes through the same ReadBuilder and FileWriterBuilder, with delete-file siblings for the writer [5]. The grid still has one cell per format and row type [11]. The walkthrough does not say how much of a new type's work lands in shared code and how much in each cell.

That split decides whether a v3 type or a shredded variant column reaches Spark and Flink on the same day [3]. Under the old layout the work had to be redone per engine, and the walkthrough says new features tended to arrive elsewhere later or not at all [3]. We think the registry is the right design for three row types with no common memory format. We would not read it as a guarantee that a new type arrives in every engine at once.

What to watch

  • Whether the VECTOR type moves from proposal into a released parquet-format version and the next Iceberg table spec.
  • Iceberg documentation or release notes showing whether a new v3 type is added once in shared builders or separately in each format model.
  • Whether an engine that keeps its own readers today, such as Trino, registers a format model of its own.

Clarity's read

What the record supports and how the coverage leans. The claims behind it follow.

Reality

Evidence55
Adoption
Insufficient
Hype gap−10
Incentives
Insufficient
Confidence50
Why these scores

Claim ledger

Ranked by verification strength, evidence, and original report placement.

  1. [1]

    Apache Iceberg traditionally exposed its data files through three libraries, one each for Parquet, Avro and ORC, and each engine that spoke Iceberg had its own way of calling them.

    Reported SupportedView cited source
  2. [2]

    Spark had SparkParquetReaders, Flink had FlinkParquetReaders and the generic Java API had GenericParquetReaders, and each engine chose its own path through the format's read options, filter pushdown, split handling, encryption and metrics.

    Reported SupportedView cited source
  3. [3]

    A feature added to one format for one engine (a new v3 type, a default value, a shredded variant column) tended to arrive for the other engines later or not at all, because the work had to be redone per engine.

    Reported SupportedView cited source

Get this ledger inside ChatGPT. Ask about any of our stories and the answer brings its figure, each claim’s verdict and the sources. Free, no account.

Add to ChatGPTAdd to Claude

Sources

1 independent publisher whose own reporting we read for this story.

  1. dev.to

    1 article · October 13, 2026

    All About Iceberg's File Format API: simplifying the engine/format interface and Parquet's multimodal future

Share your take

Let Clarity write the post for you.

Signed-in readers get a short post drafted on this story in the register they choose — narrative, analytical, or a direct position — editable to the last word before it goes anywhere. The share buttons at the top of this story work without an account.

Topics and entities

Follow any of these and your For You feed starts watching them — no settings page required.

Loading related stories