GuideIntermediate

Lakehouse And Iceberg

Parquet is a file format, not a table format — and this guide shows you, using the same Kiosko case, four times that limit already hurt: the non-atomic overwrite-partition pattern from the basics, the `valid_from`/`valid_to` columns maintained by hand to track a product's history, the same technique automated with `dbt snapshot`, and Spark's folder-based partitioning. You'll learn Apache Iceberg, the table format that solves all of that from the storage layer up: real ACID transactions, an immutable snapshot on every write, time travel (`AS OF` a snapshot, with zero history columns declared anywhere), schema evolution without rewriting data, hidden partitioning and partition evolution, and native `MERGE INTO`/upserts. The main vehicle is PyIceberg — 100% Python, $0 (a local SQLite-backed catalog); Spark shows up exactly once, in the `MERGE INTO` module, to run real SQL against an Iceberg table. Delta Lake is named by contrast, without building a second parallel implementation. The thread you resolve end to end is a price change on a Kiosko product, recovered purely with time travel, with zero history columns.

64
lessons
8
modules
English · Spanish
available in
Yes
certificate
Free
access
NIEVA

Outcomes

What you'll be able to do

  • Name precisely the difference between a file format and a table format, and the four times plain Parquet already hit its ceiling in the Kiosko ecosystem
  • Install PyIceberg, create a local catalog (SQLite + filesystem), and load your first real Iceberg table from an existing Parquet file
  • Walk the anatomy of an Iceberg table: catalog → metadata file → manifest list → manifest files → data files
  • Use time travel (`AS OF` a `snapshot-id`) to recover a table's prior state, with no `valid_from`/`valid_to` declared anywhere
  • Evolve a table's schema (add, rename, drop columns) without rewriting a single existing data file
  • Contrast visible folder-based (Hive) partitioning with Iceberg's hidden partitioning, and evolve a partition scheme forward without rewriting existing data
  • Run native `MERGE INTO` with Spark SQL and PyIceberg's `table.upsert()` as a 100% Python alternative for the same problem
  • Name production catalogs (REST, AWS Glue, Unity Catalog, Polaris) and apply basic maintenance: compacting small files and safely expiring old snapshots
  • Decide with criteria when a lakehouse on Iceberg wins over a classic managed warehouse or over plain Parquet with nothing else

Before you start

What you need to bring

It's for you if...

  • Data engineers who've already written Parquet or built a dimensional warehouse and want to solve versioning/history at the table-format level, not by hand with columns
  • Devs evaluating whether their team needs Iceberg or Delta Lake, and want to understand the real difference (not just the trendy name)
  • Anyone preparing for roles where "Apache Iceberg or Delta Lake" shows up as an explicit job requirement
  • Data engineers who completed `data-modeling-for-analytics-guide`, `dbt-analytics-engineering-guide`, and/or `spark-and-distributed-processing-guide` and want to close the history thread those guides left open

Requirements and materials

  • Intermediate Python; comfortable reading and writing Parquet
  • Basic SQL (joins, `WHERE`, aggregations)
  • Ideally completed `data-modeling-for-analytics-guide` (the hand-historized `dim_product` problem) and `spark-and-distributed-processing-guide` (the partitioned Parquet this guide converts to Iceberg); Spark + Java 17 is only needed for the `MERGE INTO` module

Content

The syllabus, module by module

Open any of them to see its lessons.

Common questions

What people usually ask

Start whenever you like

Reviews

What students say

These reviews are from enrolled students who completed at least 50% of the course. We moderate reviews only on content grounds (spam, offensive language, personal data), never for being critical or negative.

No approved reviews yet.

Be the first to share your experience!