Apache Iceberg
Apache Iceberg is an open table format for large analytic datasets stored as files in object storage or a distributed file system. It tracks which files belong to a table through versioned metadata so engines can read and write the same tables with atomic commits, schema and partition evolution, and time travel.
itData engineering and analytics | OpenSkills.info
Course pathWalk it in order
Look it upDip in anytime
Go furtherLeaves this page
Don't Panic
Don't Panic — Apache Iceberg
Apache Iceberg is what you reach for when a pile of Parquet files needs to behave like a real table. Not a warehouse you log into. Not the object store itself. A contract: engines agree on which files are in, which snapshot is current, and how a commit becomes visible without a prayer and a directory listing.
Before this sort of format, many lakes treated a table as folders plus a metastore that remembered partition paths. That worked until cloud buckets, huge partition counts, and concurrent writers showed up. Listings got expensive. Consistency got weird. Two jobs could disagree about what "the table" contained. Iceberg's answer is blunt: put the truth in a metadata tree, hang it off a catalog pointer, and swap that pointer atomically.
Three ideas carry almost everything else.
First, a snapshot is the whole table at one commit. Readers pick one and stick to it. They do not watch files appear mid-query like weather.
Second, hidden partitioning means you filter the columns you care about. Iceberg derives partition values with transforms such as day or bucket, then skips files that cannot match. When the layout needs to change, new data can use a new spec without forcing every old query to learn a new path convention.
Third, field IDs make schema changes boring in the good way. Add, drop, rename, and widen are metadata moves. They are not an invitation for a renamed column to inherit someone else's values because a name got recycled.
The surprise for many newcomers is operational, not conceptual. Iceberg will happily accept a streaming job that commits every minute. It will not quietly tidy the resulting small files, delete-file debt, and snapshot pile. Compaction, snapshot expiration, and orphan cleanup are part of running the system. Skip them and the demos still pass while planning latency and storage bills rehearse a mutiny.
Branches and tags are useful for write-audit-publish on a single table. They are not a multi-table git monorepo by themselves. If that is what you need, the catalog layer has more to say.
Read the Course intro when you want the architecture in full sentences. The Cheatsheet is the dense map of layers, write modes, and maintenance procedures. Practice and the exercise are for making a local spark-sql catalog do something irreversible-looking (in a warehouse directory you can delete). Field Notes is where the maintenance bill gets specific.
If you leave with only one sentence: Iceberg makes file collections into shared, versioned tables by committing metadata, not by hoping the bucket listing is telling the truth.
Where this skill leads
Relevant careers
See how this topic contributes to broader role-level skill maps.
Sources
- https://iceberg.apache.org/docs/latest/
Supports
- Iceberg as an open table format for huge analytic datasets used by Spark, Trino, Flink, Hive, Impala, and related engines
- Schema evolution, hidden partitioning, partition evolution, time travel, and version rollback as user-facing capabilities
- Scan planning via metadata and column-level stats without requiring a distributed SQL engine to discover files
- https://iceberg.apache.org/spec/
Supports
- Format versions 1 through 4 scope (v1 analytic tables; v2 delete files; v3 extended capabilities; v4 metadata restructuring)
- Snapshots, manifests, manifest lists, data files, and delete files as core metadata concepts
- Position deletes and equality deletes for row-level deletes on immutable data files
- https://iceberg.apache.org/docs/latest/reliability/
Supports
- Problems of Hive-style metastore plus directory listing on eventually consistent object stores
- Atomic metadata-pointer swap as the basis for serializable isolation
- Optimistic concurrency with retry after conflicting commits
- O(1) RPC planning start versus O(n) partition listings
- https://iceberg.apache.org/docs/latest/evolution/
Supports
- Supported schema evolution operations and field-ID correctness guarantees
- Partition evolution without rewriting old data files or rewriting queries
- Sort order evolution behavior for new writes
- https://iceberg.apache.org/docs/latest/spark-getting-started/
Supports
- Spark runtime package configuration and Hadoop catalog warehouse setup
- CREATE TABLE, INSERT, MERGE INTO, and metadata table queries such as snapshots
- Iceberg 1.11.0 as the documented latest version at authoring time
- https://iceberg.apache.org/docs/latest/spark-writes/
Supports
- INSERT, MERGE INTO, DELETE, UPDATE, and DataFrameWriterV2 write paths
- Branch-targeted writes and write-audit-publish configuration via spark.wap.branch
- Write distribution modes none, hash, and range
- https://iceberg.apache.org/docs/latest/spark-procedures/
Supports
- CALL procedures for rollback, rewrite_data_files, rewrite_manifests, expire_snapshots, and remove_orphan_files
- Snapshot management and maintenance entry points used in operations
- https://iceberg.apache.org/docs/latest/configuration/
Supports
- Table properties for write modes copy-on-write and merge-on-read
- Snapshot retention defaults and orphan-related garbage-collection flags
- format-version defaulting to 2 since Iceberg 1.4.0
- https://iceberg.apache.org/multi-engine-support/
Supports
- Multi-engine design goal and per-engine runtime jar versioning
- Spark and Flink maintained versus end-of-life version matrices
- https://iceberg.apache.org/rest-catalog-spec/
Supports
- REST Catalog protocol goals: cross-language clients, change-based commits, credential vending
- https://iceberg.apache.org/releases/
Supports
- Release dates and themes for 0.14.0, 1.0.0, 1.1.0, and 1.4.0
- https://incubator.apache.org/projects/iceberg.html
Supports
- Incubation entry 2018-11-16, specification migration 2019-06-23, 0.7.0-incubating 2019-10-25, graduation 2020-05-20
- https://news.apache.org/foundation/entry/asf-project-spotlight-apache-iceberg
Supports
- Netflix origin and 2018 contribution to the ASF
- https://github.com/apache/iceberg/releases/tag/apache-iceberg-1.0.0
Supports
- Apache Iceberg 1.0.0 published 2022-11-03
- https://www.i-programmer.info/news/197-data-mining/15669-apache-iceberg-improves-spark-support.html
Supports
- 0.14 REST catalog client and related feature summary contemporaneous with the release
- https://tabular.medium.com/whats-new-in-iceberg-1-1-b83c2772a6eb
Supports
- 1.1 engine-facing branch and tag read/write capabilities
- https://medium.com/guidewire-engineering-blog/scaling-apache-iceberg-best-practices-for-reliable-table-maintenance-e0ac2c62f6ab
Supports
- Production maintenance ordering, metrics to watch, and orphan cleanup races under concurrent writes
- https://lakeops.dev/blog/iceberg-table-health-maintenance
Supports
- Mistake of compacting before expiring snapshots and orphan accumulation impact
- https://iomete.com/resources/blog/iceberg-maintenance-operations
Supports
- Distinction between shipped procedures and the operational work of running them safely at scale
