Kokil Thapa - Professional Web Developer in Nepal
Freelancer Web Developer in Nepal with 15+ Years of Experience

Kokil Thapa is an experienced full-stack web developer focused on building fast, secure, and scalable web applications. He helps businesses and individuals create SEO-friendly, user-focused digital platforms designed for long-term growth.

Data Lakehouse Architecture Explained

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.

Three Data Platform ModelsData WarehouseProprietary storageStrong SQL, high costData LakeCheap object storageFlexible, weak governanceLakehouseOpen tables on object storeACID + SQL + ML on one copyPain: ETL lock-inSeparate ML export pathsPain: Untrusted dataNo transactions on filesUnified analyticsOne governed source of truth
Data lakehouse architecture explained: how the lakehouse unifies warehouse SQL reliability with lake-scale object storage.
DimensionData warehouseData lakeData lakehouse
StorageProprietary columnar (Snowflake, BigQuery native)Object storage (Parquet, JSON, Avro files)Object storage + open table format
TransactionsFull ACIDAppend-only, eventual consistencyACID via Delta Lake, Iceberg, or Hudi
SchemaSchema-on-write, strictSchema-on-read, often messyEvolution with enforcement in silver/gold layers
Cost modelCompute + storage bundled or premiumVery cheap at scaleCheap storage; pay for compute separately
Best fitBI-centric, mature dimensional modelsLog archives, raw ML feature dumpsMixed 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.

Medallion Lakehouse LayersSources: DB CDC, APIs, app logs, SaaS exportsBronze — raw append, immutable historyParquet + open table formatSilver — cleaned, conformed, dedupedSCD rules, PII masking, quality checksGold — KPIs, star schemas, ML features
Medallion layers in data lakehouse architecture: bronze ingestion, silver conformance, gold consumption.

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.

Lakehouse Ingestion and Transform FlowOLTP DBMySQL / PGCDC / BatchDebezium, FivetranBronze TablesDelta / IcebergOrchestratorAirflow / DagsterSilver transforms — dbt or Spark SQL in GitTests, docs, lineage in pull requestsGold + consumptionBI, APIs, ML notebooks, reverse ETL
Typical lakehouse pipeline: CDC from operational databases through medallion layers to BI and ML consumers.
  1. Enable CDC or nightly exports from the source database with primary keys preserved.
  2. Land files in bronze with _ingested_at and source metadata columns.
  3. Run silver MERGE jobs to apply business rules and reject bad rows to a quarantine table.
  4. Materialise gold aggregates and expose them through the catalog to BI tools.
  5. Add data quality tests: null rates, referential checks, row-count deltas between runs.
  6. 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.

Lakehouse Platform Decision TreeNew analytics platform?ML + SQL mixedBI only, small teamChoose lakehouseManaged warehousePick Iceberg or DeltaObject store + catalogSnowflake / BigQueryArchive only? Raw lake OK
Decision guide for data lakehouse architecture explained: mixed workloads favour lakehouse; pure BI may stay on warehouse.

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

Raw and curated files on object storage, open table formats for ACID and time travel, a catalog for metadata, and shared compute for BI, streaming, and ML—one platform instead of separate lake and warehouse copies.

A data warehouse loads structured data into proprietary columnar storage with full ACID but premium cost and rigid pipelines. A raw data lake stores JSON, logs, and CSV cheaply on object storage but often lacks governance and becomes a swamp. A lakehouse keeps cheap object storage and adds open table formats for ACID transactions, schema enforcement, and SQL performance. One copy serves dashboards, ad hoc queries, streaming, and ML. The pattern was popularised by Databricks but is now vendor-neutral through Apache Iceberg, Delta Lake, and Apache Hudi.

Object stores like Amazon S3 are eventually consistent and do not support row-level updates natively. Open table formats solve this with a write-ahead log and manifest files. On insert or merge, the format writes new Parquet data files plus a commit entry; readers resolve a consistent snapshot from the log. Delta Lake uses a _delta_log directory with JSON commits. Iceberg uses metadata.json and manifest lists. Apache Hudi uses a timeline of instants. All three support time travel to query earlier table versions for audits, replays, and fixing bad batch loads without restoring entire buckets.

Most production lakehouses follow a medallion or zone pattern. Bronze holds raw ingested data with ingestion timestamps and source metadata. Silver applies cleansing, deduplication, typing, and business rules through idempotent MERGE jobs; bad rows go to quarantine tables. Gold exposes business-ready aggregates and dimensions for BI, APIs, and ML feature stores. A central catalog sits above all zones and registers table locations, columns, and lineage. Without it, analysts hard-code S3 paths and operations break on the first folder rename.

Both add ACID transactions, schema evolution, and time travel on Parquet files stored on object storage. Delta Lake integrates tightly with Spark and Databricks workflows. Apache Iceberg emphasises engine neutrality—Trino, Flink, and Snowflake can read Iceberg tables via catalog integration. Iceberg also offers hidden partitioning. The article recommends picking the format your compute stack already supports and standardising on one primary format per domain. Mixing two formats on the same dataset creates operational debt you will pay on every pipeline and dashboard.

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 as a lakehouse architecture.

Choose a lakehouse when SQL dashboards, data science notebooks, and streaming analytics need one copy of the same datasets. Choose a managed warehouse when workload is pure BI, the team lacks Spark skills, and managed SQL is worth the premium—often true for small teams until data crosses tens of terabytes. Choose a raw lake only for cheap archival or exploratory dumps without governance. Hybrid paths exist: Snowflake external tables over Iceberg, BigQuery Omni, and Databricks Unity Catalog let you warehouse hot aggregates while keeping cold history on S3 under open formats.

Object storage on major clouds runs roughly Rs 2–4 per GB-month, about USD 0.015–0.03. Warehouse storage often costs several times more when bundled with compute credits. A lakehouse shifts spend toward engineer time and cluster hours instead of premium storage tiers.

Ingestion commonly uses change data capture from operational databases—Debezium emitting row-level changes to Kafka or directly to the lake. Batch orchestration often runs through Apache Airflow or Dagster; near-real-time workloads use Flink or Spark Structured Streaming. Silver and gold transforms may use Spark SQL, dbt with incremental merge strategies, or SQL mesh models versioned in Git. A reference stack includes one open table format per domain, a central catalog such as Unity Catalog, AWS Glue, Hive Metastore, or Nessie, and compute engines like Spark, Trino, or Databricks SQL against the same table definitions.

Start with one high-value domain such as orders or support tickets. Map the source schema and define bronze tables as append-only with _ingested_at columns. Enable CDC or nightly exports preserving primary keys. Run silver MERGE jobs keyed on natural or surrogate keys to apply business rules idempotently. Materialise gold aggregates and register them in the catalog for BI tools. Add data quality tests on null rates, referential integrity, and row-count deltas between runs. Schedule orchestration with retries, alerting, and SLA monitors on freshness. Version transforms in Git, run CI on pull requests, and promote to production only after tests pass—same discipline as deploying production APIs.

At scale, a catalog is not optional. Unity Catalog, AWS Glue, Hive Metastore, or Nessie provide table discovery, access control, lineage, and RBAC aligned to your identity provider. Without a catalog, every analyst hard-codes S3 paths—a pattern that breaks the first time someone renames a folder or moves a table. The catalog registers locations, columns, and dependencies across bronze, silver, and gold zones so compute engines from Spark to Trino query consistent definitions. Lineage tracking shows which dashboard column depends on which bronze file, which matters when schemas evolve or bad loads need rollback.

Enforce row and column filters at the catalog or engine level rather than handing out raw bucket credentials. Use encryption at rest, object versioning, and lifecycle rules on S3, GCS, or ADLS. For Nepal-based teams with data residency concerns, map storage regions and encryption before landing PII; pair object-lock policies with column-level masking in silver tables for citizen ID or financial fields. Track lineage through OpenLineage or native catalog features emitting events from Spark and Airflow runs. Align snapshot retention with legal hold requirements before enabling automatic expiry. Application teams feeding the lake should expose stable APIs or CDC streams with SLAs, not ad hoc CSV drops.

Target 128 MB to 1 GB Parquet files; too many small files choke listing operations and metadata merges. Run scheduled compaction jobs. Apply z-order or sort keys on common filter columns to cut scan costs for Delta and Iceberg. Pre-aggregate hot metrics at daily or hourly grain in gold rather than scanning raw events on every dashboard refresh. Cache hot gold tables in SSD-backed clusters or use materialised views where the engine supports them. Compute separates from storage—you scale Spark or Trino clusters for heavy transforms and shrink them when idle while object storage cost stays flat on cheaper tiers.

Open table formats maintain a transaction log of commits, so you can query a table as it existed at an earlier version or timestamp. Delta Lake, Iceberg, and Hudi all support this snapshot isolation. It matters for audits, replays, and fixing bad batch loads without restoring entire buckets. Combined with object versioning and catalog backups, time travel supports disaster recovery testing. The article recommends testing restores quarterly—a lakehouse without tested restore paths is just a larger single point of failure. Align retention policies with legal hold requirements before enabling automatic snapshot expiry on production tables.

Skipping the catalog and letting teams hard-code bucket paths is the first failure mode—any rename breaks downstream jobs. Running multiple open table formats on the same domain creates operational debt. Landing data in bronze without schema evolution discipline, quality tests, or quarantine tables for bad rows lets garbage propagate to gold dashboards. Neglecting compaction leaves millions of tiny Parquet files that slow every query. Copying data into separate lake and warehouse silos defeats the architecture goal of fewer copies. Treating ingestion scripts as one-off laptop work instead of versioned production pipelines with retries and freshness SLAs repeats the governance failures that made raw data lakes unusable.

Share this article

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.

Quick Contact Options
Choose how you want to connect me: