👨🏻 Brother Talk — Phase 09, Off the Record

The lakehouse — the thing that made the data lake a real database. Let me tell you what's genuinely transformative here and what'll bite you.


Brother, I've been doing this long enough to remember the before. Before table formats, a data lake was a swamp of Parquet files under S3 prefixes, and "the table" was a gentleman's agreement about which files counted. You couldn't safely have two jobs write at once. You couldn't delete a row without rewriting whole partitions and praying nothing read mid-rewrite. You couldn't time-travel. A failed job could leave the table in a half-written, corrupt state that someone discovered three queries downstream. It was stressful in a way that's hard to convey now. So when I tell you Iceberg/Delta/Hudi are transformative, I mean it from scar tissue: they took the most anxiety-inducing part of data engineering — "is the table even in a valid state right now?" — and made it a solved problem. Appreciate that. You're learning the thing that fixed the swamp.

Here's the mental unlock that makes all of it click: the table is a pointer, and a commit is swapping the pointer. That's it. That's the whole magic. The table isn't "the files in this directory" — it's "whatever the current metadata file says the files are," and committing is atomically swapping which metadata file is current. Once you see it that way, everything follows effortlessly: time travel is just keeping the old metadata files around; rollback is swapping the pointer back; concurrent writes are two people racing to swap the pointer, and the loser retries. The lab makes you build this pointer-swap, and when you do, the entire lakehouse stops being a collection of features to memorize and becomes one simple idea you understand.

Now the two things that'll bite you, because they bite everyone.

First: maintenance is not optional, and the lakehouse won't nag you. A table format will happily let you stream a tiny file every five seconds forever, accumulating a million little files and a thousand snapshots, getting slower and more expensive every day, and it will never complain. The ACID and time travel work perfectly right up until your queries are crawling and your storage bill is absurd. The fix — compaction and snapshot expiry — has to be scheduled, by you, as a deliberate maintenance job (P13). The teams that love their lakehouse run compaction nightly and expire snapshots on a retention policy. The teams that hate it forgot, and now have a swamp with extra metadata. Set up the maintenance the day you create the table, not the day it's already slow.

Second — and this one is a genuine compliance landmine: time travel and "delete" are in tension. A junior runs DELETE FROM users WHERE id = 123, sees the row gone from a SELECT, and reports "done, GDPR-compliant." They're wrong, and it's a serious wrong. The row is gone from the current snapshot, but every old snapshot still points at the data file that contains it, so anyone with time-travel access can read it right back. The data is not actually gone until you expire every snapshot that references it and vacuum the orphaned files. So a real erasure is: delete from current, then expire the referencing snapshots, then remove orphan files. The very immutability that gives you beautiful time travel is the thing that makes deletion a two-step dance — and the person who forgets step two has a privacy incident waiting (P14). Internalize this now; it's the kind of subtle correctness bug that doesn't show up in any test but shows up in an audit.

On the Iceberg-vs-Delta-vs-Hudi religious war: don't enlist. They all do ACID, time travel, and compaction. The honest differences are ecosystem and write pattern. Iceberg is the open, multi-engine bet — if you want Spark and Flink and Trino and Athena all reading and writing the same table without one vendor's gravity, Iceberg. Delta if you're living in Spark/Databricks and want its mature MERGE and OPTIMIZE. Hudi if your life is upserts and CDC and you need fast writes (Merge-on-Read). When someone tries to drag you into "X is objectively best," the senior move is "best for what workload and what ecosystem?" and an ADR on those axes. Tribalism about formats is a junior tell.

The genuinely exciting thing — the reason this phase matters strategically — is one table for streaming and batch. For a decade we maintained the Lambda architecture: a fast, approximate streaming path and a slow, correct batch path, two codebases computing the same thing, forever drifting apart. The lakehouse kills that. A Flink job writes the table with exactly-once commits (your P04 two-phase-commit sink committing a snapshot), batch jobs read consistent snapshots and backfill, and it's one table, one source of truth. When you can architect that — end the streaming/batch split — you're delivering exactly the "unified platform" the JD's mission statement asks for. That's a principal-level outcome, and it rests on understanding this phase deeply.

Career note: lakehouse expertise is the hot, marketable skill in data infrastructure right now, precisely because it's the convergence point of everything — storage (P08), streaming (P04), batch (P06), query (P10), governance (P14). The engineer who can stand up an Iceberg platform with proper maintenance, exactly-once streaming writes, and compliant deletion is doing the most strategically central work on the team. Build the table format by hand. Make the optimistic-concurrency conflict-and-retry work. Then come to P10, where we make the queries that read all of this fast and cheap.

— your brother 👨🏻