Free Interactive Course · Apache Iceberg

Apache Iceberg — The Lakehouse Handbook

Learn Apache Iceberg free — no signup, no paywall. Run editable Spark SQL live in your browser and understand the whole table format end to end: create a table, write data, time-travel across snapshots, MERGE and upsert, evolve the schema and the partitioning, then keep it healthy with compaction. Plain-English, one topic at a time.

The tables

Every example in this course runs against the same tiny retail lakehouse: one customers table and one orders table. Learn them once; you'll see them everywhere — appended to, upserted with MERGE, partitioned, time-travelled, and evolved.

customerscustomer_id, name, country, tier, signup_date
ordersorder_id, customer_id, product, category, amount, qty, status, order_date
0.0

Why this course — and why it's free

Most Iceberg material is either a vendor's marketing page, a dense spec, or a $200 course you watch once and forget. You don't need any of them. This is the whole Apache Iceberg table format — creating tables, writing, time travel, MERGE, schema and partition evolution, maintenance and tuning — 100% free, no signup, no paywall.

Free isn't the hook — running it is. Iceberg is usually taught as slides. Here the Spark SQL runs live in your browser (real output, instantly, nothing sent to a server) against the same two tiny tables every module. Where a feature is Iceberg-only — snapshots, time travel, MERGE, hidden partitioning — you see a faithful before → command → after table so the mechanics are concrete, not hand-wavy. By the capstone you chain the whole thing into one pipeline from memory.

Treat it as a handbook you keep coming back to. Googled "iceberg time travel" or "iceberg merge into example"? Land on the exact topic, get a plain-English definition, the command syntax, and the N ways to actually use it — then stay and learn the module around it. Start below, or jump to any module in the contents on the left.

0.1

The problem Iceberg solves

For years, a "table" on a data lake was really just a directory of files plus a Hive metastore entry pointing at it. That worked until it didn't. The Hive-table model has four expensive problems:

1. No atomic commits. A job that writes 500 files can be seen half-finished by a reader — there's no single moment where the change becomes visible. 2. Slow, unreliable listing. To plan a query the engine has to LIST directories on object storage, which is slow and eventually consistent on S3. 3. Unsafe schema changes. Renaming or reordering a column can silently corrupt reads, because columns are matched by name or position in the files. 4. Partitioning is rigid and leaky. You physically lay data out as dt=2025-01-01/ and every query must know to filter on that column, or it scans everything.

Iceberg keeps your data in ordinary Parquet / ORC / Avro files — it doesn't invent a new file format. What it adds is a metadata layer that tracks exactly which files make up the table right now, so a commit is a single atomic pointer swap, planning needs no directory listing, columns are tracked by immutable ID, and partitioning becomes a property of the table rather than a folder convention.
0.2

What Iceberg actually is

Apache Iceberg is an open table format: a specification for the metadata that turns a pile of data files into a real, versioned, transactional table. Any engine that implements the spec — Spark, Flink, Trino, Dremio, Snowflake, DuckDB, StarRocks — reads and writes the same table with consistent results. No single vendor owns it.

Table format vs file format

A file format (Parquet) decides how one file is encoded. A table format (Iceberg) decides how many files become one table — which files are current, what the schema is, how it's partitioned, and what every past version looked like. Iceberg sits above Parquet, not instead of it.

0.3

The metadata tree — how it works

This is the one diagram worth memorising. Everything Iceberg does — atomic commits, time travel, hidden partitioning, cheap schema changes — falls out of this four-level tree. A read or write walks it top to bottom:

Syntax
catalog                      → points to the CURRENT metadata file for the table
  metadata.json              → schema, partition spec, snapshot list, current snapshot
    manifest list (avro)     → one entry per manifest, with partition range stats
      manifest (avro)        → one entry per data file, with per-column stats
        data files (parquet) → the actual rows

A commit is a pointer swap. When you write, Iceberg creates new data files, a new manifest, a new manifest list, and a new metadata.json that references them — then atomically tells the catalog "the current version is now this one." Readers already running keep using the old version; new readers get the new one. Nobody ever sees a half-written table.

Because every version's metadata.json is kept, "the table as of last Tuesday" is just an older pointer — that's time travel, for free. Because the manifest and manifest list carry per-column and per-partition stats, the engine skips whole files without listing directories — that's fast planning and hidden partitioning. Because the schema stores a stable field ID for each column, renaming one is a metadata edit, not a data rewrite — that's safe schema evolution.
0.4

Engines and catalogs

Two moving parts sit around an Iceberg table. The engine is what runs your query (this course uses Spark SQL, the most common). The catalog is what stores the pointer to each table's current metadata — so the engine can find it and commits stay atomic.

Common catalogs: Hive metastore, Hadoop (pointer file on the filesystem), REST (the modern open standard), AWS Glue, and Nessie (which adds Git-like branches across many tables). You'll pick one in Module 9; for now just know the catalog is the thing that says "the current version of db.orders is this metadata file."

0.5

Setup — Iceberg on Spark

To follow along on a real cluster later, you add the Iceberg runtime and configure a catalog. In a Spark shell that's one --packages flag plus a few configs wiring the built-in spark_catalog to Iceberg:

Spark SQL
spark-shell \
  --packages org.apache.iceberg:iceberg-spark-runtime-3.5_2.12:1.5.0 \
  --conf spark.sql.extensions=org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions \
  --conf spark.sql.catalog.spark_catalog=org.apache.iceberg.spark.SparkSessionCatalog \
  --conf spark.sql.catalog.spark_catalog.type=hive
That IcebergSparkSessionExtensions line is what unlocks the Iceberg-only SQL you'll use all course — MERGE INTO, ALTER TABLE … ADD PARTITION FIELD, the CALL maintenance procedures, and VERSION AS OF. Forget it and those commands fail to parse. It's the #1 setup mistake.

You don't need any of that to learn here, though. The cells below run a tiny SQL engine inside your browser so you see real output instantly. The Spark SQL shown on top is exactly what you'd run against Iceberg.

0.6

Meet the tables

Here are the two tables every module uses. Run this to see the orders we'll be creating, writing, upserting and time-travelling as an Iceberg table — edit it and press Run:

Spark SQL
-- The orders we'll manage as an Iceberg table all course long
SELECT order_id, customer_id, product, category, amount, qty, status, order_date
FROM orders
ORDER BY order_id;
Run it live in the browser — edit the SQL and press Run
SQL
⌘/Ctrl + Enter

And the customers they belong to — five customers across four countries, each with a loyalty tier we'll use for joins and upserts:

Spark SQL
SELECT * FROM customers ORDER BY customer_id;
Run it live in the browser — edit the SQL and press Run
SQL
⌘/Ctrl + Enter
Next up: Creating Tables & Writing Data — you'll turn these into a real USING iceberg table with CREATE TABLE, CTAS, and INSERT, then read it back.

Frequently asked questions

Is this Apache Iceberg course really free?
Yes — completely free, with no signup, no login, and no paywall. Every module and every runnable example is open, and the Spark SQL executes live in your browser so nothing is sent to a server. There is no upsell or 'first lessons free' gate: the entire table format is covered end to end at no cost.
What is Apache Iceberg in simple terms?
Apache Iceberg is an open table format — a metadata layer that turns a directory of Parquet, ORC or Avro files into a real, versioned, transactional table. It adds atomic commits, time travel across snapshots, safe schema and partition evolution, and fast query planning without listing directories. Engines like Spark, Flink, Trino, Dremio and Snowflake all read and write the same Iceberg table.
What is the difference between Iceberg and Parquet?
Parquet is a file format: it defines how one file is encoded. Iceberg is a table format: it defines how many files become a single table — which files are current, what the schema and partitioning are, and what every past version looked like. Iceberg stores your data in Parquet (or ORC/Avro) files and adds a metadata tree above them; they work together rather than competing.
How does Iceberg do time travel and atomic commits?
Every write produces a new metadata file (metadata.json) that references a new set of data files, and the catalog atomically swaps its pointer to that new version. Old versions are kept, so reading 'the table as of an earlier snapshot' is just following an older pointer — that is time travel. Because the swap is a single atomic operation, readers never see a half-written table.
Do I need to install Spark or Iceberg to use this course?
No. Every example runs live in your browser — the Spark SQL is shown on top and an equivalent query executes instantly against an in-browser engine, with Iceberg-only features (snapshots, MERGE, time travel, partition evolution) shown as before → command → after tables. To run the exact SQL on a cluster later you only need the Iceberg Spark runtime package and a catalog config, both shown in the Setup section.

Ready for the full data stack?

Iceberg is the table format at the heart of the lakehouse. When you want the pipelines, Spark, Kafka, and orchestration around it — plus a full end-to-end project — the Data Engineering course is free too.

Explore Data Engineering →

Comments

0

Join the conversation. Sign in to leave a comment — questions and feedback welcome.