
September 12, 2026
13 min read
By Kokil Thapa | Last reviewed: September 2026
Teams outgrow siloed lakes and expensive warehouses at the same time. Data lakehouse architecture explained in plain terms means one platform on cheap object storage that still runs SQL, enforces schema, and supports BI plus machine learning without copying data everywhere. If you already ship web apps and APIs, the same discipline applies here: define boundaries early, version schemas, and treat pipelines like production code. This guide walks through layers, open table formats, ingestion patterns, and practical trade-offs so you can design or evaluate a lakehouse in 2026. For broader pipeline context, see our overview of data engineering for DevOps teams.
What is data lakehouse architecture and how is it different from a warehouse or data lake?
A data lakehouse merges the low-cost, schema-flexible storage of a data lake with the reliability and SQL performance of a data warehouse. Files sit on S3, Azure Data Lake Storage, or GCS. An open table format layer turns those files into transactional tables. Compute engines read the same tables for dashboards, ad hoc SQL, and feature stores.
A classic data warehouse loads structured data into proprietary columnar storage. Pipelines are rigid. Storage cost scales fast. A raw data lake accepts JSON, logs, and CSV cheaply but often becomes a swamp without governance. The lakehouse adds metadata, ACID commits, and schema enforcement on top of the lake.
| Dimension | Data warehouse | Data lake | Data lakehouse |
|---|---|---|---|
| Storage | Proprietary columnar (Snowflake, BigQuery native) | Object storage (Parquet, JSON, Avro files) | Object storage + open table format |
| Transactions | Full ACID | Append-only, eventual consistency | ACID via Delta Lake, Iceberg, or Hudi |
| Schema | Schema-on-write, strict | Schema-on-read, often messy | Evolution with enforcement in silver/gold layers |
| Cost model | Compute + storage bundled or premium | Very cheap at scale | Cheap storage; pay for compute separately |
| Best fit | BI-centric, mature dimensional models | Log archives, raw ML feature dumps | Mixed SQL, streaming, and ML on shared tables |
The term was popularised by Databricks, but the pattern is now vendor-neutral. Apache Iceberg, Delta Lake, and Apache Hudi are the three dominant open table formats. Each adds a transaction log, snapshot isolation, and metadata files beside your Parquet objects. That is the technical heart of any serious lakehouse design.
How do open table formats enable ACID transactions on object storage?
Object stores like Amazon S3 are eventually consistent and do not natively support row-level updates. Open table formats solve this with a write-ahead log and manifest files. When you insert or merge rows, the format writes new data files plus a commit entry. Readers always resolve a consistent snapshot from the log.
Delta Lake stores a _delta_log directory with JSON commit files. Apache Iceberg uses metadata.json and manifest lists. Apache Hudi uses a timeline of instants. All three support time travel: query table state as of an earlier version. That matters for audits, replays, and fixing bad batch loads without restoring entire buckets.
Minimal Delta Lake table creation on S3
# Spark shell with Delta Lake packages
spark-shell --packages io.delta:delta-spark_2.12:3.2.0
# Create a managed Delta table
spark.sql("""
CREATE TABLE IF NOT EXISTS sales_bronze (
order_id STRING,
customer_id STRING,
amount DECIMAL(12,2),
event_time TIMESTAMP
)
USING DELTA
LOCATION 's3://analytics-lake/bronze/sales/'
""")
# Upsert with MERGE (idempotent loads)
spark.sql("""
MERGE INTO sales_silver AS t
USING sales_bronze AS s
ON t.order_id = s.order_id
WHEN MATCHED THEN UPDATE SET *
WHEN NOT MATCHED THEN INSERT *
""") Iceberg offers similar semantics with broader engine support. Trino, Flink, and Snowflake can read Iceberg tables via catalog integration. Pick the format your compute stack already supports. Mixing two formats on the same dataset creates operational debt. Standardise early, even if you start on a single cloud.
For a deeper storage foundation, our guide to building a data lake on S3 covers bucket layout, encryption, and lifecycle policies that lakehouse tables inherit.
What are the core layers in a production lakehouse stack?
Most production lakehouses follow a medallion or zone pattern. Bronze holds raw ingested data. Silver applies cleansing, deduplication, and typing. Gold exposes business-ready aggregates and dimensions. The catalog sits above all zones and registers table locations, columns, and lineage.
The ingestion layer pulls data in near-real-time or batch. Change Data Capture from operational databases is common. Tools like Debezium emit row-level changes to Kafka or directly to the lake. See our walkthrough on change data capture with Debezium for wiring MySQL or PostgreSQL into streaming pipelines.
The catalog is not optional at scale. Unity Catalog, AWS Glue, Hive Metastore, or Nessie provide table discovery, access control, and lineage. Without a catalog, every analyst hard-codes S3 paths. That pattern breaks the first time someone renames a folder.
Compute separates from storage. Spark clusters, Databricks SQL warehouses, Trino, DuckDB, or Flink jobs spin up against the same table definitions. You scale compute for heavy transforms and shrink it for idle periods. Storage cost stays flat on object tiers.
Reference layer checklist
- Ingestion: Airflow, Dagster, or managed orchestration for batch; Flink or Spark Structured Streaming for CDC.
- Storage: S3/GCS/ADLS with versioning, encryption at rest, and lifecycle rules for old snapshots.
- Table format: One primary format per domain (Iceberg or Delta Lake).
- Catalog: Central metadata with RBAC aligned to your identity provider.
- Transform: dbt, Spark SQL, or SQL mesh models versioned in Git.
- Serving: BI tools, REST APIs, or reverse ETL to operational apps.
On application projects I maintain, we treat analytics boundaries like API contracts. Column renames go through migration scripts. Breaking changes require a version bump in the gold layer. That discipline prevents dashboard outages when upstream schemas shift.
How do you build ingestion and transformation pipelines for a lakehouse?
Start with one high-value domain: orders, subscriptions, or support tickets. Map the source schema. Define the bronze table as append-only with ingestion timestamps. Build silver transforms as idempotent jobs keyed on natural or surrogate keys.
- Enable CDC or nightly exports from the source database with primary keys preserved.
- Land files in bronze with
_ingested_atand source metadata columns. - Run silver MERGE jobs to apply business rules and reject bad rows to a quarantine table.
- Materialise gold aggregates and expose them through the catalog to BI tools.
- Add data quality tests: null rates, referential checks, row-count deltas between runs.
- Schedule orchestration with retries, alerting, and SLA monitors on freshness.
Apache Airflow remains a common orchestrator for batch-heavy stacks. Our article on orchestrating data pipelines with Airflow shows DAG patterns that map directly to lakehouse stages. For SQL-centric teams, dbt transforms in the warehouse apply equally when dbt targets Spark, Databricks, or Snowflake with Iceberg external tables.
Example dbt model targeting a lakehouse silver table
# models/silver/orders.sql
{{ config(
materialized='incremental',
unique_key='order_id',
incremental_strategy='merge'
) }}
SELECT
order_id,
customer_id,
CAST(amount AS DECIMAL(12,2)) AS amount,
event_time,
CURRENT_TIMESTAMP() AS _silver_loaded_at
FROM {{ source('bronze', 'orders_raw') }}
WHERE event_time > (SELECT COALESCE(MAX(event_time), '1970-01-01') FROM {{ this }}) Version transforms in Git like application code. Run CI on pull requests with row-level diff checks against a staging catalog. Promote to production only after tests pass. This mirrors how mature web teams deploy Laravel or Symfony APIs through pipelines.
If your organisation spans multiple clouds, read multi-cloud architecture patterns before placing the lake in one region and compute in another. Egress fees can erase storage savings.
When should you choose a lakehouse over a warehouse or a raw lake?
Choose a lakehouse when you need one copy of data for SQL dashboards, data science notebooks, and streaming analytics. Choose a warehouse when your workload is pure BI, your team lacks Spark skills, and managed SQL is worth the premium. Choose a raw lake only for cheap archival or exploratory dumps without governance requirements.
Nepal-based companies with data residency concerns should map storage regions and encryption before landing PII. Our post on data residency and compliance for Nepali companies pairs well with lakehouse design reviews. Pair object-lock policies with column-level masking in silver tables for citizen ID or financial fields.
Cost math matters for budget-sensitive teams. Object storage might run Rs 2–4 per GB-month (~USD 0.015–0.03) on major clouds. Warehouse storage often costs several times more when bundled with compute credits. A lakehouse shifts spend to engineer time and cluster hours. For a five-person team, a fully managed warehouse can still win on total cost of ownership until data volume crosses tens of terabytes.
Hybrid paths exist. Snowflake external tables over Iceberg, BigQuery Omni, and Databricks Unity Catalog all blur the line. You can warehouse hot aggregates while keeping cold history on S3 under open formats. The architecture goal is fewer copies, not religious purity about labels.
What governance, security, and performance practices keep a lakehouse trustworthy?
Lineage tracking shows which dashboard column depends on which bronze file. Tools like OpenLineage or native catalog features emit events from Spark and Airflow runs. Access control should enforce row and column filters at the catalog or engine level, not by handing out raw bucket credentials.
Performance tuning starts with file layout. Target 128 MB–1 GB Parquet files. Too many small files choke listing operations and metadata merges. Run compaction jobs on a schedule. Z-order or sort keys on common filter columns cut scan costs for Delta and Iceberg alike.
Cache hot gold tables in SSD-backed clusters or use materialised views where the engine supports them. For interactive dashboards, pre-aggregate at daily or hourly grain in gold rather than scanning raw events every time.
Disaster recovery means catalog backups plus object versioning. Test restores quarterly. A lakehouse without tested restore paths is just a larger single point of failure. Align retention with legal hold requirements before you enable automatic snapshot expiry.
Application teams feeding the lake should expose stable APIs or CDC streams rather than ad hoc CSV drops. If you build custom ingestion services, treat them as enterprise application development with SLAs, not one-off scripts on a laptop.
Redis and similar engines still serve online low-latency reads. The lakehouse handles historical analytics. See Redis caching and data structures for where operational cache ends and batch analytics begins. Replication across regions adds complexity; our guide on data replication across clouds covers sync patterns that complement lakehouse DR.
External references anchor the open standards this architecture depends on. The Apache Iceberg documentation defines table spec and catalog interfaces. The Delta Lake protocol documentation describes transaction logs and time travel semantics. Databricks published the original medallion architecture pattern that most bronze-silver-gold designs follow today.
When validating pipeline configs or API payloads during build-out, a JSON formatter saves time debugging ingestion metadata files. Large directory or marketplace platforms like Gulfbizlist generate event streams that eventually belong in a governed analytics layer if product metrics matter to the business.
Key Takeaways
- A lakehouse stores data on object storage and adds ACID transactions through Delta Lake, Iceberg, or Hudi—not through proprietary warehouse disks alone.
- Medallion layers (bronze, silver, gold) plus a central catalog prevent the data swamp problem common in raw lakes.
- Standardise on one open table format per domain and version transforms in Git with automated quality tests.
- Use CDC and orchestration (Debezium, Airflow, dbt) to keep silver and gold tables fresh without duplicate ETL copies.
- Choose lakehouse when SQL, streaming, and ML share the same datasets; stay on a managed warehouse for BI-only teams with small data volumes.
- Plan compaction, encryption, lineage, and tested restores before production—not after the first bad batch load.
People Also Ask
Is Databricks required for a data lakehouse?
No. Databricks popularised the term and ships a strong managed lakehouse, but any stack with object storage, an open table format, a catalog, and Spark or Trino qualifies. AWS EMR, self-managed Spark on Kubernetes, or Starburst over Iceberg are valid paths.
What is the difference between Delta Lake and Apache Iceberg?
Both add ACID transactions and schema evolution on Parquet files. Delta Lake integrates tightly with Spark and Databricks. Iceberg emphasises engine neutrality and hidden partitioning. Pick based on your compute engines and catalog, not blog hype.
Can a lakehouse replace my data warehouse entirely?
Often partially, not always fully. Many teams keep a warehouse for executive BI while the lakehouse holds raw and ML data. Convergence is real—warehouses now read Iceberg externally—but migration is a multi-year journey for large enterprises.
How does a lakehouse support machine learning workflows?
Data scientists read the same gold and silver tables as analysts, using Spark, Python, or SQL feature stores. Training sets pull historical snapshots via time travel without exporting CSV copies from a separate lake path.
Build your analytics platform with clear architecture
Data lakehouse architecture explained comes down to governed open tables on cheap storage, reliable pipelines, and one catalog everyone trusts. Whether you are modernising reporting for a Nepali enterprise or designing ingestion for a global SaaS product, the same rules apply: one format, tested transforms, and explicit ownership of each medallion layer. Need help connecting operational apps, APIs, and analytics pipelines? Contact us to discuss custom software development and API development that feeds a lakehouse the right way—or explore more on the blog and homepage.
Frequently Asked Questions
0 Comments
Leave a comment
Your email is not published. Comments appear once they have been read. Sign in to have your details filled in.

