Databricks DE Β· Topic 1.1
One platform that combines the cheap, open storage of a data lake with the reliability and fast queries of a data warehouse β one copy of data for BI and ML.
βΈ click a tab to compare
| Warehouse | Lake | Lakehouse | |
|---|---|---|---|
| Storage cost | High | Low | Low |
| ACID / reliability | Yes | No | Yes |
| Fast BI SQL | Yes | Weak | Yes |
| ML on raw data | Weak | Yes | Yes |
| Governance | Strong | Weak | Strong (UC) |
Mechanism: classically you kept a lake (cheap, open, ML) and a separate warehouse (fast BI, ACID), with ETL copying lake β warehouse. Why it hurts: two copies, an extra ETL hop, staleness, drift, double cost/governance.
# The old two-system pain (what the lakehouse removes):
S3/ADLS lake (raw, ML) --nightly ETL copy--> Warehouse (BI)
^ one copy of truth ^ a second, stale copy
= extra pipeline, drift, double storage + double governance
Mechanism: keep data once in cheap object storage in an open table format (Parquet managed by Delta), and run both BI SQL and ML on it β no warehouse copy. Trade-off: you must adopt Delta + UC; plain files = just a lake.
-- One governed table in open format β BI and ML both read THIS, no copy. CREATE TABLE main.sales.orders ( order_id BIGINT, region STRING, amount DECIMAL(10,2), order_ts TIMESTAMP ) USING DELTA; -- Delta is the default format on Databricks
Mechanism: Delta wraps Parquet with a transaction log adding ACID, schema enforcement, and version history β lake storage that behaves like a warehouse table. Trade-off: the log enables time travel but old versions cost storage until VACUUM.
-- The transaction log gives reliability + time travel for free: DESCRIBE HISTORY main.sales.orders; -- every versioned commit SELECT * FROM main.sales.orders VERSION AS OF 3; -- read as of version 3
Mechanism: Unity Catalog governs every table/file/model with the 3-level namespace catalog.schema.table + lineage + grants. Compute is decoupled β Spark, Photon, SQL warehouses read the same data, scaled independently. Trade-off: set-up cost, but one model for the whole estate.
-- One governance model over the single copy; engines read the same table. GRANT SELECT ON TABLE main.sales.orders TO `analysts`; -- UC access control -- A SQL warehouse, a Spark job, and an ML notebook all query main.sales.orders.
Mechanism: the same governed Delta table serves a BI dashboard (SQL) and a model (DataFrame) β no export, no second system. Trade-off: analytical sweet spot β for high-frequency single-row OLTP use an operational store (e.g. Lakebase).
# BI: SELECT region, sum(amount) FROM main.sales.orders GROUP BY region # ML reads the SAME table β no copy into a separate system: df = spark.read.table("main.sales.orders") # one source of truth features = df.groupBy("region").sum("amount") # same data BI reports on
βΈ click each layer to expand
catalog.schema.table, with lineage and fine-grained access control.