DataAIHub
DataAIHubNews · Research · Tools · Learning
Data Engineering

Lakehouse Guide

How lakehouse architecture unifies data lakes and warehouses - open table formats (Delta Lake, Apache Iceberg), ACID transactions on object storage, and patterns for analytics and ML at scale.

8 min readIntermediateUpdated Jul 6, 2026

Quick Summary

A lakehouse stores cheap raw files like a lake but queries them with warehouse reliability using open table formats.

One Analogy

A lakehouse is a library with a card catalog on top of a warehouse floor - you keep everything in one building, but you can find and update books without rebuilding the shelves.

Engineering Rule

Pick one open table format per domain and enforce it at write time - mixed formats on the same data lake become an integration tax.

TL;DR

  • A lakehouse combines lake economics with warehouse semantics - cheap object storage (S3, ADLS, GCS) plus ACID transactions, schema enforcement, and fast SQL/analytics engines.

  • Open table formats are the enabling layer - Delta Lake, Apache Iceberg, and Apache Hudi add metadata, versioning, and time travel on top of Parquet/ORC files.

  • You stop maintaining two copies of truth - no more ETL from raw lake → curated warehouse for every pipeline; bronze/silver/gold layers live on the same storage with different table policies.

  • ML and BI share one catalog - feature stores, RAG document indexes, and dashboards can read from the same governed tables instead of forked extracts.

  • The hard parts are governance, compaction, and format choice - not spinning up Spark.

Production lakehouses fail on orphaned small files, schema drift, and teams writing incompatible formats side by side.

Why This Matters

For a decade, data teams ran two systems: a data lake for cheap storage of raw JSON, logs, and events, and a data warehouse for reliable SQL, BI, and SLA-backed dashboards. Keeping them in sync meant duplicate pipelines, stale warehouse copies, and angry analysts when the lake had fresher data than Snowflake.

Lakehouse architecture collapses that split. Raw and curated data live on object storage. Table formats provide transactions, schema evolution, and partition pruning so Spark, Trino, DuckDB, and even LLM feature pipelines query the same files with predictable behavior.

If you build AI products, lakehouses matter twice: training data and embeddings often originate in the lake, while product analytics still need warehouse-grade correctness. One storage layer reduces cost and data drift.

The Problem Lakehouses Solve

Pain in split lake + warehouse Lakehouse response
Two copies of every dataset Single source of truth on object storage
No ACID on lake writes Table formats provide atomic commits
Expensive warehouse storage for raw data Keep raw Parquet cheap; query in place
ML teams bypass governance Shared catalog + row/column policies
Slow schema changes in warehouse Evolution without full table rewrites (format-dependent)

Lakehouses do not eliminate warehouses entirely. Snowflake, BigQuery, and Redshift increasingly read Iceberg/Delta tables externally. The architecture shift is: storage and table semantics are open; compute is interchangeable.

What Is a Lakehouse?

A lakehouse is an architectural pattern where:

  1. Storage is object storage (S3-compatible) holding open file formats (typically Parquet).

  2. Table layer adds database-like guarantees via an open table format.

  3. Compute engines (Spark, Flink, Trino, Presto, Databricks SQL, Snowflake external tables) read/write through that table layer.

  4. Catalog (Hive Metastore, Unity Catalog, AWS Glue, Polaris) tracks table locations, schemas, and permissions.

The name was popularized by Databricks, but the idea is vendor-neutral: decouple storage from compute while keeping warehouse features.

How Lakehouses Work

RAG couples a dense vector index of external knowledge with a sequence-to-sequence generator. At query time, the retriever selects relevant passages and the generator conditions its answer on that evidence.

Write path

An engine writes new data files, then atomically commits metadata (a new snapshot). Readers never see partial writes. On failure, uncommitted files are garbage-collected.

Read path

The engine reads the latest snapshot (or a historical version for time travel), applies partition and file-level pruning using metadata statistics, and scans only relevant Parquet files.

Medallion architecture (common pattern)

Layer Contents Typical consumers
Bronze Raw ingested data, minimal transforms Data engineers, replay jobs
Silver Cleaned, conformed, deduplicated Analytics, feature engineering
Gold Business aggregates, metrics tables BI, executives, ML serving

All three layers can be Iceberg/Delta tables on the same bucket with different retention and compaction policies.

Open Table Formats Compared

Capability Delta Lake Apache Iceberg Apache Hudi
ACID commits Yes Yes Yes
Time travel Yes Yes Yes
Engine support Spark-first; growing elsewhere Broad (Spark, Flink, Trino, Snowflake…) Spark-first; strong upserts
Upserts / CDC MERGE Row-level deletes/updates (v2) Native upsert focus
Hidden partitioning No Yes (partition evolution) No
Typical sweet spot Databricks / Spark shops Multi-engine, vendor-neutral High-churn CDC tables

Important

Format wars are real. Switching formats later requires rewrite jobs. Standardize early per data domain, not per team preference.

Delta Lake

Transaction log (_delta_log) in JSON + checkpoint files. Deep integration with Spark and Databricks. Unity Catalog provides enterprise governance. Good default when your stack is already Spark-centric.

Apache Iceberg

Spec-driven, engine-neutral metadata tree. Hidden partitioning and partition evolution reduce operational pain as data grows. Strong choice when Trino, Flink, Snowflake external tables, and Spark must coexist.

Apache Hudi

Optimized for incremental upserts and streaming ingestion with record-level indexing. Common for CDC from databases into the lake when update-heavy workloads dominate.

Architecture Decisions

Decision Option A Option B When to choose
Format Delta Lake Iceberg Delta in Databricks-native stacks; Iceberg for multi-engine neutrality
Ingestion Batch (Spark) Streaming (Flink/Kafka) Streaming when freshness SLA < 1 hour
File size target 128–512 MB Many small files Larger files for scan performance; compact regularly
Catalog Glue / Hive Unity / Polaris Match your cloud IAM and fine-grained ACL needs
Compute Spark clusters Serverless SQL (Trino) Spark for heavy transforms; Trino for interactive SQL

⚠ Common Mistakes

  1. Millions of tiny files - Streaming micro-batches without compaction destroys query performance. Schedule compaction jobs.

  2. No partition strategy - Full table scans on petabyte lakes are expensive. Partition by date or tenant; use Iceberg hidden partitions where helpful.

  3. Schema chaos in bronze - Allow evolution, but validate silver with contracts (e.g., Great Expectations, dbt tests).

  4. Mixing formats in one pipeline - Delta writers and Iceberg readers on the same logical table is a support nightmare.

  5. Ignoring time travel retention - Old snapshots accumulate storage cost. Set retention policies explicitly.

  6. Treating the lake as a dump - Without catalog and ownership, you recreate the "data swamp" problem lakehouses were meant to fix.

Where It Breaks Down

Lakehouses excel at analytical and batch ML workloads. They are weaker for:

  • Sub-second OLTP - Use a transactional database; don't force MERGE-heavy patterns for high-QPS row updates.

  • Unstructured-only corpora - PDFs and images still need object storage + search indexes; table formats help metadata, not blob content.

  • Tiny teams with tiny data - Postgres + dbt may be simpler until you hit real scale or multi-team contention.

Latency-sensitive serving layers (vector DBs for RAG) often sync from the lakehouse rather than querying it directly at request time.

Real Production Example

A fintech company ingests 2 TB/day of events into bronze Iceberg tables on S3. Flink streaming jobs deduplicate and write silver tables. dbt on Spark builds gold metrics. Trino serves analyst SQL; Snowflake reads gold via external Iceberg catalog for executive dashboards.

ML team exports silver transaction features to a feature store nightly. The RAG pipeline indexes compliance PDFs separately, but document metadata (owner, effective date, jurisdiction) lives in a gold Iceberg table joined at retrieval time via metadata filtering.

-- Time travel: audit what the customers table looked like yesterday
SELECT *
FROM prod.silver.customers
FOR SYSTEM_TIME AS OF TIMESTAMP '2026-07-05 00:00:00'
WHERE country = 'US';

Production Checklist

Area Check
Format standard One open format per domain; documented exception process
Compaction Scheduled job for small files; target file size documented
Schema governance Bronze allows drift; silver has enforced contracts and alerts
Access control Row/column policies via catalog; no public buckets
Snapshot retention Time travel window defined; VACUUM/expiry automated
Monitoring Table growth, commit latency, failed writes, query scan bytes
Disaster recovery Cross-region replication or backup for critical gold tables
Cost attribution Tags per team/domain on storage and compute
Lineage Pipeline ownership in catalog; PII columns classified
Consumer SLAs Freshness metrics per layer (bronze vs gold) published

Important

A lakehouse without compaction, catalog discipline, and access policies is just an expensive data swamp with better marketing.

Ecosystem

  • Formats: Delta Lake, Apache Iceberg, Apache Hudi

  • Engines: Apache Spark, Apache Flink, Trino, Presto, Databricks SQL, Snowflake Iceberg tables

  • Catalogs: AWS Glue, Hive Metastore, Apache Polaris, Unity Catalog, Nessie (git-for-data)

  • Orchestration: Airflow, Dagster, dbt - often writing silver/gold layers

  • AI connection: Feature stores (Feast, Tecton), offline training sets, and document metadata for RAG pipelines

FAQs

Is a lakehouse the same as a data lake?

No. A data lake is storage. A lakehouse adds table semantics (ACID, schema, time travel) on top of that storage via open formats.

Delta Lake vs Iceberg - which should I pick?

Pick Delta if you're all-in on Databricks/Spark. Pick Iceberg if you need multiple query engines and long-term vendor neutrality. Both are production-proven.

Do I still need a data warehouse?

Many teams use both: lakehouse for open storage and heavy transforms, warehouse for governed BI and familiar SQL UX - often reading the same Iceberg tables.

How does this relate to AI and RAG?

Training data and feature tables often live in the lakehouse. RAG document chunks typically sync to a vector DB, but governance metadata (tenant, ACL, doc type) frequently originates from lakehouse gold tables.

What causes lakehouse query slowdowns?

Too many small files, missing partition pruning, stale table statistics, and wide tables without column pruning. Run compaction and analyze metadata regularly.

References

Further Reading

Summary

  • Lakehouses unify cheap object storage with warehouse-grade table semantics.
  • Open table formats (Delta, Iceberg, Hudi) are the core abstraction - choose deliberately.
  • Medallion layers (bronze/silver/gold) organize raw-to-trusted data without duplicate systems.
  • Production success depends on compaction, catalog governance, and format consistency - not just picking Spark.
  • AI pipelines benefit from a single governed source of truth; serving layers still specialize for latency.

Next Topics

Learning Path

Continue Learning