This is an automated email from the ASF dual-hosted git repository.

vinothchandar pushed a commit to branch asf-site
in repository https://gitbox.apache.org/repos/asf/hudi.git


The following commit(s) were added to refs/heads/asf-site by this push:
     new 9d3d1352c336 docs(blog): explainer wave 2: streaming data lake, CDC, 
lakehouse comparisons (#19270)
9d3d1352c336 is described below

commit 9d3d1352c3360de42d35d1aba305ea2ca1e842fa
Author: vinoth chandar <[email protected]>
AuthorDate: Tue Jul 21 16:18:28 2026 -0700

    docs(blog): explainer wave 2: streaming data lake, CDC, lakehouse 
comparisons (#19270)
---
 .../2021-07-21-streaming-data-lake-platform.md     |   4 +
 .../blog/2024-07-11-what-is-a-data-lakehouse.md    |   4 +
 website/blog/2024-07-30-data-lake-cdc.md           |   4 +
 .../2026-07-21-what-is-a-streaming-data-lake.md    | 117 ++++++++++++++++++
 .../blog/2026-07-22-what-is-cdc-on-a-data-lake.md  | 100 ++++++++++++++++
 ...-23-lakehouse-vs-data-warehouse-vs-data-lake.md | 133 +++++++++++++++++++++
 ...26-07-24-open-table-format-vs-data-lakehouse.md |  96 +++++++++++++++
 website/static/llms.txt                            |   4 +
 8 files changed, 462 insertions(+)

diff --git a/website/blog/2021-07-21-streaming-data-lake-platform.md 
b/website/blog/2021-07-21-streaming-data-lake-platform.md
index 9db7ac21fb03..84a00a1b33fc 100644
--- a/website/blog/2021-07-21-streaming-data-lake-platform.md
+++ b/website/blog/2021-07-21-streaming-data-lake-platform.md
@@ -28,6 +28,10 @@ But first, we needed to tackle the basics - transactions and 
mutability - on the
 
 This is going to be a rather long post, but we will do our best to make it 
worth your time. Let’s roll.
 
+:::info Related reading
+For a 2026 explainer companion to this essay, see [What is a Streaming Data 
Lake?](/blog/2026/07/21/what-is-a-streaming-data-lake)
+:::
+
 ## Data Lake Platform
 
 We have noticed that, Hudi is sometimes positioned as a “[table 
format](https://cloud.google.com/blog/products/data-analytics/getting-started-with-new-table-formats-on-dataproc)”
 or “transactional layer”. While this is not incorrect, this does not do full 
justice to all that Hudi has to offer. 
diff --git a/website/blog/2024-07-11-what-is-a-data-lakehouse.md 
b/website/blog/2024-07-11-what-is-a-data-lakehouse.md
index dd97b28c2454..8aa832bc5e3b 100644
--- a/website/blog/2024-07-11-what-is-a-data-lakehouse.md
+++ b/website/blog/2024-07-11-what-is-a-data-lakehouse.md
@@ -21,6 +21,10 @@ A data lakehouse is a hybrid data architecture that combines 
the best attributes
 
 The lakehouse architecture supports the management of various data types, such 
as structured, semi-structured, and unstructured, and caters to a wide range of 
use cases, including business intelligence, machine learning, and real-time 
streaming. This flexibility enables businesses to move away from the 
traditional two-tier architecture—using warehouses for relational workloads and 
data lakes for machine learning and advanced analytics. As a result, 
organizations can reduce operational co [...]
 
+:::info Related reading
+Newer companion explainers to this guide: [What is an Open Table 
Format?](/blog/2026/07/14/what-is-an-open-table-format), [Data Lakehouse vs 
Data Warehouse vs Data 
Lake](/blog/2026/07/23/lakehouse-vs-data-warehouse-vs-data-lake), and [Open 
Table Format vs Data 
Lakehouse](/blog/2026/07/24/open-table-format-vs-data-lakehouse).
+:::
+
 ## The Evolution of Data Storage Solutions: How did we go from Warehouses to 
Lakes to Lakehouses?
 Historically, organizations have been investing in building centralized and 
scalable data architectures to enable more data access and to support different 
types of analytical workloads. As demand for these workloads has grown, data 
architectures have evolved to address the complex needs of modern data 
processing and storage.
 
diff --git a/website/blog/2024-07-30-data-lake-cdc.md 
b/website/blog/2024-07-30-data-lake-cdc.md
index 9954f120611f..5ae4291dc843 100644
--- a/website/blog/2024-07-30-data-lake-cdc.md
+++ b/website/blog/2024-07-30-data-lake-cdc.md
@@ -14,6 +14,10 @@ tags:
 
 Data lake change data capture (CDC) is a technique that continuously 
identifies and captures changes—inserts, updates, and deletes—from source 
databases and applies them to a data lake, keeping lake tables fresh and 
consistent with operational systems. Combining CDC with data lakes addresses 
several challenges commonly faced by ETL pipelines delivering data from 
transactional databases to analytical systems: maintaining data freshness, 
ensuring consistency, and improving efficiency in da [...]
 
+:::info Related reading
+For a beginner-friendly 2026 companion to this deep dive, see [What is CDC on 
a Data Lake?](/blog/2026/07/22/what-is-cdc-on-a-data-lake)
+:::
+
 ## Introduction
 In data management, two concepts have garnered significant attention: data 
lakes and change data capture (CDC).
 ### Data Lake
diff --git a/website/blog/2026-07-21-what-is-a-streaming-data-lake.md 
b/website/blog/2026-07-21-what-is-a-streaming-data-lake.md
new file mode 100644
index 000000000000..368943724e9b
--- /dev/null
+++ b/website/blog/2026-07-21-what-is-a-streaming-data-lake.md
@@ -0,0 +1,117 @@
+---
+title: "What is a Streaming Data Lake?"
+excerpt: "Defines the streaming data lake: a data lake that ingests and serves 
data continuously with minute-level freshness, and the storage building blocks 
that make it possible."
+description: "What a streaming data lake is, how it differs from batch data 
lakes and Kafka + warehouse stacks, and the storage building blocks that make 
it work."
+authors: [vinoth-chandar]
+category: how-to
+image: /assets/images/blog/hudi_streaming.png
+tags:
+- streaming
+- data lakehouse
+- mor
+- cdc
+- incremental processing
+---
+
+A streaming data lake is a data lake that ingests and serves data continuously 
— with minute-level freshness — instead of through periodic batch loads. 
Batch-era data lakes refresh on a schedule, typically hourly or daily, which 
was acceptable when the lake mostly fed reports and offline model training. 
Today, operational analytics, change data capture (CDC) from transactional 
databases, and AI applications all want much fresher data — and the traditional 
answers, standing up a separate  [...]
+
+<!--truncate-->
+
+This post is the definitional companion to the original 2021 essay, [Apache 
Hudi - The Data Lake Platform](/blog/2021/07/21/streaming-data-lake-platform), 
which first articulated this vision in depth. Here we focus on what the term 
means in 2026, what it takes to build one, and how it relates to the data 
lakehouse.
+
+## From Batch Data Lakes to Streaming Data Lakes
+
+A batch data lake and a streaming data lake can look identical on the surface 
— Parquet files on object storage, queried by Spark, Trino, or Presto. The 
difference lies in three operating assumptions.
+
+**Ingestion cadence.** A batch lake receives data in large, scheduled loads: a 
nightly dump, an hourly partition. A streaming data lake receives data 
continuously, committing every few minutes. This is not just a smaller batch 
interval. Committing hundreds of times a day instead of once means the storage 
layer must absorb many small writes without accumulating thousands of tiny 
files, must keep table metadata cheap to update on every commit, and must 
reconcile new data against old data c [...]
+
+**Mutation support.** Batch lakes were built around append-only, immutable 
files, and rewrote whole partitions to "update" anything. Streaming sources are 
dominated by mutation: CDC streams from databases are sequences of inserts, 
updates, and deletes keyed by primary key; late-arriving events revise records 
that were already written. A streaming data lake must treat record-level 
upserts and deletes as first-class write operations, applied continuously.
+
+**Read patterns.** Batch consumers scan the latest partition after the nightly 
load lands. Streaming consumers need more: dashboards want the freshest 
consistent snapshot, downstream pipelines want to ask "what changed since I 
last ran?" and process only that delta. A streaming data lake serves both the 
classic full-table scan and this incremental, change-oriented consumption.
+
+None of these can be bolted onto a batch lake with a faster scheduler. They 
require rethinking storage itself.
+
+![The incremental stack blends the latency profile of stream processing with 
the efficiency and scale of batch storage and 
compute.](/assets/images/blog/datalake-platform/hudi-data-lake-platform_-_Page_2_4.png)
+<p align = "center">Figure: The incremental stack, alongside batch and stream 
processing</p>
+
+## The Required Building Blocks
+
+Five capabilities separate a lake that can operate in streaming mode from one 
that cannot.
+
+**Continuous upserts, backed by indexes.** Applying a CDC stream means 
locating, for every incoming record, the file that holds the previous version 
of that key — millions of times per commit. Doing this by scanning data is 
hopeless; a streaming data lake needs indexes that map record keys to file 
locations so upserts and deletes touch only the files that actually change. 
This is why indexing sits in the write path of Apache Hudi rather than being 
only a query-side optimization.
+
+**Merge-on-Read storage.** With frequent commits, rewriting columnar base 
files on every write (Copy-on-Write) multiplies write amplification: a handful 
of changed rows can force rewriting an entire file, hundreds of times a day. 
The [Merge-on-Read (MOR) table type](/docs/table_types) instead absorbs changes 
into compact delta log files and merges them with base files at query time or 
during compaction. Write cost then scales with the amount of change, not with 
the size of accumulated st [...]
+
+![Merge-on-Read table with base files, delta log files, periodic compaction, 
and both snapshot and read-optimized queries.](/assets/images/MOR_new.png)
+<p align = "center">Figure: A Merge-on-Read table absorbing frequent commits 
into delta logs</p>
+
+**Asynchronous table services.** Deferring merge work is only viable if 
something reliably performs it — without stopping ingestion. A streaming data 
lake needs built-in table services: compaction to fold delta logs into new base 
files, clustering to reorganize data layout for query performance, and cleaning 
to reclaim old file versions. Crucially, these must run asynchronously, 
concurrently with the ingestion stream. If maintenance requires pausing the 
writer, the lake is not really str [...]
+
+**Change streams.** Once tables update continuously, downstream pipelines 
should not recompute from full scans. A streaming data lake exposes 
record-level change streams — the ability to query exactly the records that 
changed between two points in time — so that derived tables can be maintained 
incrementally. This is what turns a single fast table into an end-to-end 
incremental architecture, where each layer consumes the changes of the previous 
one, much like chained stream processing jo [...]
+
+**Concurrency control.** Continuous writers, background services, and readers 
all operate on the same table at once. Readers need snapshot isolation so 
queries always see a consistent, committed view. Writers and table services 
need to proceed without blocking one another — an optimistic model that simply 
fails one side wastes enormous resources when a long-running compaction 
overlaps a stream that commits every minute. Streaming-first designs favor 
non-blocking, MVCC-style coordination  [...]
+
+## The Write Path: Streaming Ingestion
+
+In practice, the write path of a streaming data lake is a stream processing 
job that terminates in lake storage. [Apache Flink can write continuously into 
Hudi tables](/docs/flink-quick-start-guide), applying CDC streams from Kafka or 
Debezium as upserts; Spark Structured Streaming and Hudi's own streaming 
ingestion utilities do the same. The writer commits at a chosen interval — 
commonly every one to five minutes — and each commit is atomic: queries see all 
of it or none of it.
+
+Two streaming realities shape this path. First, **ordering**: events for the 
same key can arrive out of order, so the writer resolves collisions 
deterministically using an ordering field (typically event time), ensuring an 
older update never overwrites a newer one regardless of arrival order. Second, 
**late data**: an event may arrive hours or days after the period it belongs 
to. In a batch lake this forces re-running jobs over old partitions; in a 
streaming data lake the index locates t [...]
+
+## The Read Path: Snapshot, Read-Optimized, and Incremental Queries
+
+A streaming data lake gives readers an explicit choice of freshness versus 
cost, expressed as [three query types](/docs/table_types):
+
+- **Snapshot queries** merge base files with delta logs at read time, 
returning the freshest committed state — data written minutes ago. This is the 
near-real-time analytics path.
+- **Read-optimized queries** read only compacted base files, giving pure 
columnar scan performance at the price of bounded staleness (data freshness 
tracks the compaction schedule). Latency-tolerant reporting can run here at 
lower cost.
+- **Incremental queries** return the records that changed between two commit 
times, powering the incremental pipelines described above.
+
+The same table serves all three, from the same single copy of data, through 
standard engines. There is no separate "speed layer" holding fresh data and 
"batch layer" holding history to reconcile — the failure mode that made Lambda 
architectures notoriously hard to operate.
+
+## Streaming Data Lake vs. Kafka + Warehouse
+
+The common alternative for fresh analytics is to keep data in Kafka and 
continuously load it into a cloud warehouse. It is worth being honest about the 
trade-offs in both directions.
+
+**Where Kafka + warehouse wins.** Kafka delivers events in milliseconds to 
seconds, and a stream processor reading Kafka can react at that speed — a 
streaming data lake, committing every few minutes to object storage, cannot. If 
the use case is sub-second serving, alerting, or event-driven applications, 
Kafka (plus a stream processor or real-time OLAP store) is the right tool. 
Warehouses also offer a highly polished, fully managed SQL experience.
+
+**Where the streaming data lake wins.** Retention and scale economics. Keeping 
weeks or months of history in Kafka is expensive, and Kafka is not queryable 
with analytical SQL — so data ends up copied into a warehouse anyway, where 
storage and compute are metered at warehouse prices and the data lands in a 
proprietary format usable only by that warehouse's engine. A streaming data 
lake stores one copy on cheap object storage in open formats, retains history 
indefinitely, serves large sca [...]
+
+The two are complementary rather than exclusive: a common pattern keeps Kafka 
as the transport at the edge, with the streaming data lake as the durable, 
queryable system of record a few minutes behind it.
+
+## How This Connects to the Lakehouse
+
+A [data lakehouse](/blog/2024/07/11/what-is-a-data-lakehouse) brings warehouse 
capabilities — transactions, schema management, mutability — to data lake 
storage. A streaming data lake is best understood as **a lakehouse operated in 
streaming mode**: the same open storage and transactional foundation, but with 
continuous writes instead of scheduled loads, change streams instead of full 
refreshes, and table services that run concurrently with ingestion instead of 
in maintenance windows. Ev [...]
+
+This is where Apache Hudi's history matters. Hudi was created at Uber in 2016 
precisely for this problem — applying massive upsert streams to petabyte-scale 
tables on lake storage with minute-level freshness — and its architecture 
follows from that origin: pluggable indexing in the write path, Merge-on-Read 
storage, a suite of built-in asynchronous table services, and incremental 
queries as a core primitive. The [2021 
essay](/blog/2021/07/21/streaming-data-lake-platform) laid out this "s [...]
+
+## Conclusion
+
+A streaming data lake is not a faster batch lake or a bigger Kafka cluster. It 
is a data lake whose storage layer is designed for continuous change: upserts 
resolved through indexes, writes absorbed by Merge-on-Read, maintenance 
performed asynchronously by table services, changes exposed as first-class 
streams, and all of it coordinated safely under concurrent access. In return, 
it delivers minute-level data freshness on open formats and cheap storage, 
serving snapshot, read-optimized, a [...]
+
+## FAQ
+
+<PostFAQ heading={null} items={[
+  {
+    question: 'What is a streaming data lake?',
+    answer: 'A streaming data lake is a data lake that ingests and serves data 
continuously, with minute-level freshness, instead of through periodic batch 
loads. It keeps data in open formats on cloud object storage while supporting 
continuous upserts, incremental change streams, and background table 
maintenance that runs without stopping ingestion.'
+  },
+  {
+    question: 'What is the difference between a streaming data lake and a data 
lakehouse?',
+    answer: 'A data lakehouse brings warehouse capabilities like transactions 
and mutability to data lake storage, while a streaming data lake is a lakehouse 
operated in streaming mode. It adds continuous minute-level ingestion, 
record-level change streams for incremental consumers, and asynchronous table 
services that run alongside live writers. Every streaming data lake is a 
lakehouse, but many lakehouses are only operated as batch systems.'
+  },
+  {
+    question: 'Can a data lake handle real-time data?',
+    answer: 'Yes, within limits. A streaming data lake built on storage like 
Apache Hudi can commit continuously and make data queryable within minutes, 
which covers most operational analytics and CDC replication needs. For 
sub-second latency, such as event-driven applications or instant alerting, a 
stream processor or real-time OLAP system reading from Kafka is still the 
better fit.'
+  },
+  {
+    question: 'Do I still need Kafka with a streaming data lake?',
+    answer: 'Usually yes, but in a narrower role. Kafka remains an excellent 
transport for moving events from producers to consumers in seconds, and it 
commonly feeds the streaming data lake. What changes is retention and 
analytics: instead of keeping long histories in Kafka or copying everything 
into a warehouse, the lake becomes the durable, cheaply stored, SQL-queryable 
system of record a few minutes behind the stream.'
+  },
+  {
+    question: 'Why is Merge-on-Read important for streaming ingestion?',
+    answer: 'Merge-on-Read absorbs updates and deletes into small delta log 
files instead of rewriting large columnar files on every commit, so write cost 
scales with the amount of change rather than the size of the table. That is 
what makes committing every few minutes economical. A background compaction 
service later folds the logs into optimized base files without pausing 
ingestion.'
+  },
+  {
+    question: 'How fresh can data in a streaming data lake be?',
+    answer: 'Typically within a few minutes of the source event, determined by 
the commit interval of the streaming writer. Snapshot queries see every 
committed change immediately, while read-optimized queries trade some freshness 
for faster scans by reading only compacted files. The freshness floor comes 
from object storage and columnar file economics, which favor batching writes 
into small intervals rather than per-event commits.'
+  }
+]} />
diff --git a/website/blog/2026-07-22-what-is-cdc-on-a-data-lake.md 
b/website/blog/2026-07-22-what-is-cdc-on-a-data-lake.md
new file mode 100644
index 000000000000..54da1c9ead9a
--- /dev/null
+++ b/website/blog/2026-07-22-what-is-cdc-on-a-data-lake.md
@@ -0,0 +1,100 @@
+---
+title: "What is CDC on a Data Lake?"
+excerpt: "A beginner-friendly explainer of change data capture (CDC) on a data 
lake: what it is, why it needs a table layer with upserts, and how a 
Debezium-to-Hudi pipeline fits together."
+description: "Learn what change data capture (CDC) on a data lake is, why it 
requires upserts and deletes, and how tools like Debezium and Apache Hudi make 
it work."
+authors: [sivabalan]
+category: how-to
+image: /assets/images/blog/data-lake-cdc/hudi-cdc.jpg
+tags:
+- cdc
+- streaming
+- debezium
+- data lakehouse
+- beginner
+---
+
+Change data capture (CDC) on a data lake is the practice of continuously 
replicating inserts, updates and deletes from operational databases into tables 
on cloud storage, so that analytics, machine learning and downstream pipelines 
always work against a fresh, queryable copy of the source data. Teams adopt it 
for three main reasons: it offloads heavy analytical queries from 
transaction-processing (OLTP) databases that were never built for them, it 
consolidates data from many operational  [...]
+
+If you already know the basics and want a deeper treatment of capture 
mechanisms and architecture trade-offs, read the companion deep dive, 
[Understanding Data Lake Change Data Capture](/blog/2024/07/30/data-lake-cdc), 
after this one.
+
+<!--truncate-->
+
+## What is change data capture?
+
+Every operational database is constantly changing: orders are placed, profiles 
are edited, rows are deleted. Change data capture is any technique that 
identifies those row-level changes as they happen and delivers them, in order, 
to another system. Instead of periodically copying a whole table, CDC ships 
only the delta — each event typically carrying the operation type (insert, 
update or delete), the affected row, and often its before and after state.
+
+There are two broad families of capture:
+
+- **Query-based capture** polls the source tables for changes, usually by 
filtering on a `last_updated` timestamp column. It is simple to set up but has 
real gaps: it misses hard deletes entirely (a deleted row simply stops 
appearing in query results), it puts recurring query load on the production 
database, and it requires the schema to cooperate.
+- **Log-based capture** reads the database's own transaction log — the binlog 
in MySQL, the write-ahead log (WAL) in PostgreSQL — which records every 
committed change in commit order. Because it taps a log the database writes 
anyway, it captures every insert, update and delete with minimal impact on the 
source, and it is the approach virtually all serious CDC deployments use today.
+
+![Log-based CDC](/assets/images/blog/data-lake-cdc/log-based-cdc.png)
+
+[Debezium](https://debezium.io/) is the most widely used open source log-based 
CDC tool. It runs as a Kafka Connect connector, tails the binlog or WAL, and 
publishes one change event per row modification to a Kafka topic per table, 
typically alongside a schema registry that tracks the shape of those events. 
Cloud services such as AWS DMS and various managed connectors play the same 
role. Whatever the tool, the output is the same in spirit: an ordered stream of 
row-level change events tha [...]
+
+## Why the data lake is the natural CDC destination
+
+The destination question — where should that change stream land? — has an 
economic answer and an architectural one.
+
+Economically, cloud object storage (Amazon S3, Google Cloud Storage, Azure 
Blob Storage) is the cheapest place to keep large volumes of data, and it 
scales without capacity planning. Replicating dozens or hundreds of operational 
tables, with full history, is affordable there in a way it is not in a 
warehouse whose storage and compute pricing were designed for curated, 
aggregated data.
+
+Architecturally, data stored in open file formats like Apache Parquet on 
object storage is not locked to any one engine. The same replicated tables can 
serve Spark for ETL, Trino or Presto for interactive SQL, and Python-based ML 
frameworks — without making another copy per engine. That "one copy, many 
engines" property is the core promise of the [data 
lakehouse](/blog/2024/07/11/what-is-a-data-lakehouse), and a continuously 
replicated mirror of your operational databases is one of the m [...]
+
+But there is a fundamental mismatch. A CDC stream is, by definition, mostly 
*mutations* — updates and deletes to existing rows. A plain data lake is a pile 
of immutable files: you can add new files, but you cannot change a row inside 
one. Without something extra, teams historically resorted to painful 
workarounds — appending every change event and forcing every query to 
deduplicate, or periodically rewriting entire partitions to fold changes in. 
Both are slow, expensive and error-prone.  [...]
+
+## What applying CDC requires from the table layer
+
+To turn a change stream into a correct, queryable table on object storage, the 
layer above the raw files needs a specific set of capabilities:
+
+- **Upserts and deletes.** Each change event must be applied against the 
existing table: an update replaces the current version of a row identified by 
its primary key, and a delete removes it. Doing this efficiently means quickly 
finding which file holds a given key — Hudi does so with pluggable 
[indexes](/docs/indexes), including a record-level index, so it does not have 
to scan the table on every write.
+- **Ordering and late events.** Change events can arrive out of order, 
especially after retries or repartitioning in the transport layer. If an older 
update is applied after a newer one, the table silently travels back in time. 
The table layer must merge records by an ordering field — the source database's 
log sequence number or position — so the correct final state wins regardless of 
arrival order. Hudi supports this natively through event-time ordered merging 
via its [record merger](/d [...]
+- **Schema evolution.** Source tables change: columns get added, types get 
widened. A CDC pipeline that fails on every upstream `ALTER TABLE` is not 
operable. The table layer needs to evolve the target [schema 
safely](/docs/schema_evolution), usually in coordination with a schema registry.
+- **Transactional guarantees.** Writers apply changes continuously while 
queries run concurrently. ACID transactions ensure readers never see a 
half-applied batch, and failed writes can be rolled back cleanly rather than 
leaving corrupt partial files behind.
+
+One more design choice matters for CDC specifically: how the table absorbs 
writes. Copy-on-write tables rewrite whole data files for every batch of 
updates, which is simple but costly when updates are frequent. Merge-on-read 
tables, by contrast, log changes as compact delta files and compact them into 
columnar base files asynchronously — which is why 
[merge-on-read](/docs/table_types) is generally the recommended table type for 
update-heavy CDC ingestion.
+
+## The two sides of CDC on a lakehouse
+
+It is worth separating two roles that often get blurred together, because a 
lakehouse can — and usually should — play both.
+
+**Consuming CDC** is the direction discussed so far: the lakehouse table is 
the *destination*, continuously applying a change stream from an operational 
database so it stays an up-to-date mirror.
+
+**Producing change streams** is the reverse: the lakehouse table acts as a 
*source* of changes for whatever sits downstream. Once your bronze tables 
absorb CDC, the next question is how the silver and gold tables built on top of 
them stay fresh. If each downstream job re-reads the whole upstream table, you 
have merely moved the batch-processing problem one hop over. Hudi addresses 
this with incremental queries — a consumer can ask a table for "everything that 
changed since my last checkp [...]
+
+## A reference architecture: MySQL/Postgres to a Hudi table
+
+Here is what a typical end-to-end CDC pipeline onto a data lake looks like, 
using widely deployed open source components:
+
+![CDC architecture with Apache 
Hudi](/assets/images/blog/data-lake-cdc/hudi-cdc.jpg)
+
+1. **Source database.** MySQL or PostgreSQL, configured to expose its change 
log (binlog or logical-replication WAL).
+2. **Capture: Debezium on Kafka Connect.** A Debezium connector tails the log 
and writes one change event per row modification into a Kafka topic per table, 
registering event schemas with a schema registry (Confluent or Apicurio).
+3. **Apply: Hudi Streamer or Flink.** [Hudi 
Streamer](/docs/hoodie_streaming_ingestion) is a self-contained ingestion 
utility that ships with Hudi and includes a Debezium source out of the box: 
running in continuous mode, it reads the change events from Kafka and upserts 
them into a Hudi table on cloud storage, using the table's record key (the 
source primary key) to route updates and the log position to order them. Teams 
standardized on Flink can use Hudi's Flink integration for the sam [...]
+4. **Bronze table.** The result is a "raw" replicated table — typically 
merge-on-read — that mirrors the source, kept fresh within minutes, registered 
in a catalog (Glue, Hive Metastore, etc.) and queryable from Spark, Trino, 
Presto and other engines.
+5. **Incremental ETL downstream.** Silver and gold tables subscribe to the 
bronze table via incremental queries, pulling and transforming only the records 
that changed since their last run.
+
+Getting an existing table's history in before streaming begins — the bootstrap 
— is handled either by letting Debezium take an initial consistent snapshot or 
by bulk-loading the table directly (for example over JDBC) and then starting 
the change stream from the matching checkpoint.
+
+## Common pitfalls, and how the table layer absorbs them
+
+A few failure modes recur in almost every CDC-on-the-lake deployment. Knowing 
them up front is most of the battle:
+
+- **Silently dropped deletes.** Query-based capture cannot see hard deletes, 
and some pipelines ignore delete events on the sink side. The mirror then 
diverges from the source, one deleted row at a time — a correctness and 
compliance problem (GDPR erasure requests must propagate). The fix is log-based 
capture plus a sink that applies deletes as first-class operations, as Hudi's 
Debezium source does by honoring the delete marker in each event.
+- **Out-of-order events.** Retries and parallelism can deliver an old version 
of a row after a newer one. A sink that blindly takes the last arrival will 
regress data. Merging by the source log position, rather than arrival time, 
makes the pipeline immune to this.
+- **Small files.** Frequent micro-batches naturally produce many tiny files, 
and query performance on object storage degrades sharply as file counts 
explode. Hudi manages [file sizing](/docs/file_sizing) during writes and runs 
compaction and clustering as background table services, so ingestion frequency 
does not have to be traded against query speed.
+- **Backfills colliding with the stream.** Sooner or later you must reload 
history — a missed window, a schema fix — while live ingestion continues. 
Without transactions, a backfill job and a streaming writer stepping on each 
other corrupt the table. A transactional table layer with concurrency control 
lets the backfill run alongside the stream safely.
+
+## Conclusion
+
+CDC on a data lake pairs the most valuable data most organizations have — the 
live state of their operational databases — with the cheapest, most open place 
to analyze it. The capture side is a solved problem thanks to log-based tools 
like Debezium; the hard part has always been the destination, because applying 
a stream of updates and deletes to immutable cloud storage requires upserts, 
ordering, schema evolution and transactions that raw file storage lacks. That 
is precisely the gap tr [...]
+
+## FAQ
+
+<PostFAQ heading={null} items={[
+  {question: 'What is the difference between CDC and ETL?', answer: 'ETL is 
the general process of extracting data from sources, transforming it and 
loading it into a target system, traditionally as periodic bulk jobs that 
reprocess full tables. CDC is a specific extraction technique that captures 
only the row-level inserts, updates and deletes as they happen in the source 
database. In practice CDC often serves as the extract step of a continuous, 
incremental ETL pipeline, replacing full [...]
+  {question: 'Can you do CDC without Kafka?', answer: 'Yes. Kafka is a popular 
transport for change events, but it is not required. Debezium can run as a 
standalone server that writes to other messaging systems, cloud services like 
AWS DMS can deliver changes directly to object storage, and ingestion tools can 
pull changes from a database over JDBC. Kafka earns its place in larger 
deployments because it buffers events durably and lets multiple consumers 
replay the same stream independently.'},
+  {question: 'How are deletes handled in CDC on a data lake?', answer: 
'Log-based CDC tools emit an explicit delete event when a row is removed from 
the source database. A transactional table layer such as Apache Hudi applies 
that event by locating the record via its key and removing it from the table, 
so the lake copy stays consistent with the source. This matters for correctness 
and for compliance, since regulations like GDPR require deletions to propagate 
to downstream copies.'},
+  {question: 'What is the difference between log-based and query-based CDC?', 
answer: 'Query-based CDC repeatedly queries source tables for rows with a 
recent last-updated timestamp, which is simple but misses hard deletes and adds 
load to the production database. Log-based CDC reads the database\'s own 
transaction log, such as the MySQL binlog or PostgreSQL WAL, capturing every 
insert, update and delete in commit order with minimal source impact. Log-based 
capture is the standard choice [...]
+  {question: 'Why can\'t a plain data lake handle CDC?', answer: 'A plain data 
lake stores immutable files on object storage, so there is no built-in way to 
update or delete an individual record, which is exactly what most CDC events 
require. Teams either appended all events and deduplicated at query time or 
rewrote whole partitions, both slow and error-prone. Transactional table layers 
like Apache Hudi add upserts, deletes, indexing and ACID guarantees on top of 
the same storage, making [...]
+  {question: 'How fresh can data be with CDC on a data lake?', answer: 
'End-to-end latency from a database commit to a queryable row on the lake is 
typically measured in minutes with continuously running ingestion. 
Merge-on-read tables help by logging changes cheaply on write and compacting 
them in the background, instead of rewriting large files on every batch. That 
is near real-time for analytics, though not a replacement for the millisecond 
latencies of an operational database.'},
+]} />
diff --git 
a/website/blog/2026-07-23-lakehouse-vs-data-warehouse-vs-data-lake.md 
b/website/blog/2026-07-23-lakehouse-vs-data-warehouse-vs-data-lake.md
new file mode 100644
index 000000000000..ca6ce87cbac5
--- /dev/null
+++ b/website/blog/2026-07-23-lakehouse-vs-data-warehouse-vs-data-lake.md
@@ -0,0 +1,133 @@
+---
+title: "Data Lakehouse vs Data Warehouse vs Data Lake: What's the Difference?"
+excerpt: "A practical three-way comparison of data warehouses, data lakes, and 
data lakehouses — strengths, trade-offs, a side-by-side table, and guidance on 
when each architecture is the right choice."
+description: "Data warehouse vs data lake vs data lakehouse compared: costs, 
transactions, performance, openness, and when to choose each architecture."
+authors: [vinoth-chandar]
+category: how-to
+image: /assets/images/blog/dlh_1200.png
+tags:
+- data lakehouse
+- data warehouse
+- comparison
+- open architecture
+---
+
+A **data warehouse** is a proprietary, structured, SQL-first analytical 
database: you load cleaned, modeled data into it and get fast, governed BI 
queries out. A **data lake** is cheap, open storage — typically cloud object 
stores holding raw files of any shape, from CSVs to images — that scales 
practically without limit but offers few database guarantees. A **data 
lakehouse** is the data lake upgraded with database capabilities — ACID 
transactions, upserts and deletes, indexing, schema  [...]
+
+Which one you should build on depends on what your data looks like, who 
queries it, and how much you value keeping your storage open. If all you need 
is dashboards over modest volumes of structured data, a warehouse remains the 
path of least resistance. If you are juggling large volumes, unstructured data, 
machine learning, streaming ingestion, or multiple query engines, the calculus 
shifts quickly toward a lakehouse. The rest of this post walks through each 
architecture honestly — stren [...]
+
+## The Data Warehouse: Fast, Governed, and Proprietary
+
+Data warehouses have been the workhorse of analytics for decades, from 
on-premise appliances like Teradata to cloud-native services like 
[Snowflake](https://www.snowflake.com), [Google 
BigQuery](https://cloud.google.com/bigquery), and [Amazon 
Redshift](https://aws.amazon.com/redshift/). The model is simple: extract data 
from operational systems, transform it into well-defined relational schemas, 
and load it into a system purpose-built for analytical SQL.
+
+The strengths are real and should not be understated:
+
+- **Query performance.** Warehouses control the full stack — storage layout, 
statistics, caching, query optimization — and are ruthlessly tuned for 
low-latency SQL. For interactive BI dashboards over structured data, they set 
the bar.
+- **Governance and management.** Mature access controls, auditing, data 
masking, and workload management come built in. Schemas are enforced on write, 
so the data inside a warehouse tends to be clean by construction.
+- **Simplicity.** A cloud warehouse is a single managed product. There is one 
system to secure, one SQL dialect to learn, one vendor to call.
+
+The costs show up as the footprint grows:
+
+- **Lock-in.** Warehouse storage formats are proprietary. Your data lives 
inside the vendor's system, readable only through the vendor's compute. 
Migrating out — or even letting a second engine read the same tables — means 
exporting and copying.
+- **ELT copies.** Because the warehouse only speaks structured SQL, data must 
be copied into it, and often copied again into marts and extracts for different 
teams. Each copy adds pipeline complexity, staleness, and cost.
+- **Price at scale.** Coupled compute and proprietary storage are priced at a 
premium. At tens or hundreds of terabytes with heavy transformation workloads, 
warehouse bills routinely become one of the largest line items in a data 
platform budget.
+- **Poor fit for ML and unstructured data.** Training a model on images, logs, 
or raw event streams inside a warehouse ranges from awkward to impossible. Data 
science teams typically end up exporting data back out — another copy.
+
+## The Data Lake: Cheap, Open, and Unreliable
+
+Data lakes emerged from the Hadoop era and matured on cloud object storage — 
[Amazon S3](https://aws.amazon.com/s3/), [Google Cloud 
Storage](https://cloud.google.com/storage), [Azure Data Lake 
Storage](https://azure.microsoft.com/en-us/products/storage/data-lake-storage). 
The idea inverts the warehouse: instead of modeling data before loading it, 
land everything raw and cheap, and decide the schema when you read it.
+
+The strengths:
+
+- **Cost.** Object storage costs a small fraction of warehouse storage, with 
durability and availability handled by the cloud provider. Storage and compute 
scale independently — you pay for queries only when you run them.
+- **Openness.** Data sits in open file formats like [Apache 
Parquet](https://parquet.apache.org) and [Apache ORC](https://orc.apache.org). 
Any engine — Apache Spark, Apache Flink, Trino, Presto, Ray, or a Python script 
— can read the same files. There is no vendor gatekeeping access to your own 
data.
+- **Any data shape.** Structured tables, semi-structured JSON, free text, 
images, audio, model checkpoints — a lake stores all of it, which is exactly 
why ML and data science teams gravitate to lakes.
+
+The weaknesses are equally well documented:
+
+- **No transactions.** A plain data lake is just files in directories. A 
failed job can leave partial writes visible to readers; two concurrent writers 
can corrupt each other. There is no atomic commit, no isolation, no rollback.
+- **No upserts or deletes.** Object stores are append-oriented. Updating a 
single record — say, for a GDPR deletion request or a late-arriving correction 
— traditionally meant rewriting entire partitions.
+- **Data swamps.** Without schema enforcement, quality controls, or 
table-level metadata, lakes decay into "data swamps": directories of files 
nobody trusts and nobody dares delete.
+- **Slow BI.** Query engines scanning raw files lack the indexes, statistics, 
and optimized layouts a warehouse maintains, so interactive dashboard 
performance over a plain lake generally disappoints.
+
+## The Data Lakehouse: The Lake, Upgraded to a Database
+
+The lakehouse closes the gap between the two by adding a transactional 
metadata layer — an [open table 
format](/blog/2026/07/14/what-is-an-open-table-format) — on top of the open 
files already sitting in the lake. Projects like [Apache 
Hudi](https://hudi.apache.org), [Apache Iceberg](https://iceberg.apache.org), 
and [Delta Lake](https://delta.io) define tables (not just files) over Parquet 
and ORC, and bring the database capabilities the lake was missing:
+
+- **ACID transactions** with concurrency control, so writers commit atomically 
and readers never see partial results.
+- **Upserts and deletes**, made efficient by indexing mechanisms that locate 
the records to change without rewriting whole partitions — the capability that 
first motivated Hudi's creation at Uber.
+- **Schema enforcement and evolution**, so tables reject malformed writes and 
can add or change columns without full rewrites.
+- **Performance features** — indexing, statistics, clustering, compaction, 
time travel — that let query engines approach warehouse-class performance on 
lake storage.
+
+Two properties follow that neither predecessor offers. First, **unified batch 
and streaming**: because the table layer supports fast upserts and incremental 
pulls, the same table can be written by a streaming pipeline and read by both a 
dashboard and a nightly batch job, eliminating the classic lambda-architecture 
split. Second, **one copy of data, many engines**: the table is defined in an 
open format on open storage, so Spark, Flink, Trino, Presto, StarRocks, Daft, 
and warehouse engine [...]
+
+![Data lakehouse architecture](/assets/images/blog/dlh_new.png)
+<p align = "center">Figure: Data Lakehouse Architecture — open table formats 
and a storage engine layered over cloud object storage, serving multiple 
compute engines</p>
+
+For a deeper treatment of the architecture itself — the storage, file-format, 
table-format, catalog, and compute layers — see [What is a Data Lakehouse & How 
does it Work?](/blog/2024/07/11/what-is-a-data-lakehouse)
+
+The honest caveat: a lakehouse is assembled from components rather than bought 
as one product, so it demands more engineering judgment than swiping a credit 
card at a warehouse vendor. Managed lakehouse platforms narrow that gap, but 
the trade-off between operational simplicity and openness has not disappeared 
entirely.
+
+## Side-by-Side Comparison
+
+| Dimension | Data Warehouse | Data Lake | Data Lakehouse |
+|---|---|---|---|
+| **Storage cost** | High — proprietary storage at premium pricing | Low — 
commodity cloud object storage | Low — same object storage as the lake |
+| **Data types** | Structured (some semi-structured support) | Structured, 
semi-structured, unstructured | Structured, semi-structured, unstructured |
+| **Transactions** | Full ACID | None | ACID via table formats (Hudi, Iceberg, 
Delta Lake) |
+| **Updates / deletes** | Native SQL DML | Rewrite files manually | Native 
upserts and deletes, index-accelerated |
+| **Query performance** | Excellent for SQL/BI | Poor to moderate (raw file 
scans) | Good to excellent with indexing, clustering, compaction |
+| **Openness / lock-in** | Proprietary format, single vendor engine | Fully 
open files, any engine | Open table formats, any engine |
+| **Streaming support** | Micro-batch loading, often at extra cost | 
Append-only file drops | Native streaming ingestion with incremental processing 
|
+| **ML support** | Weak — data must be exported | Strong — raw data access for 
any framework | Strong — same open data, plus reliable managed tables |
+| **Governance / quality** | Mature, built in | Do-it-yourself, frequently 
neglected | Schema enforcement, time travel, auditing via table layer |
+| **Typical tools** | Snowflake, BigQuery, Redshift | S3 / GCS / ADLS + Spark, 
Presto | Hudi / Iceberg / Delta Lake + Spark, Flink, Trino, StarRocks |
+
+## When Is Each the Right Choice?
+
+**Choose a data warehouse** when your data is modest in volume, almost 
entirely structured, and your consumers are BI analysts writing SQL. A small 
team running dashboards over a few terabytes will likely ship faster and 
operate more cheaply on a managed warehouse than by assembling a lakehouse 
stack. Lock-in is a real cost, but at small scale it may be a cost worth paying 
for simplicity.
+
+**Choose a plain data lake** when you primarily need a cheap landing zone and 
archive — raw event dumps, ML training corpora, cold retention — and you do not 
need transactional tables or fast SQL over that data. Many lakehouses begin 
life as exactly this.
+
+**Choose a lakehouse** when one or more of these is true: data volumes are 
growing into the tens of terabytes and beyond and warehouse bills sting; you 
need machine learning and BI on the same data; you ingest streaming or 
frequently-updated data (CDC from operational databases is the canonical case); 
you need record-level updates and deletes for compliance; or you want multiple 
engines — and the freedom to change vendors — over a single copy of data. These 
are the workloads the architec [...]
+
+The choice is also not exclusive. A common and pragmatic pattern is a 
lakehouse as the system of record with a warehouse serving a subset of curated, 
high-concurrency dashboards — increasingly by querying the lakehouse tables in 
place rather than holding a copy.
+
+## The Convergence Trend
+
+The sharp lines between these categories are blurring, and they are blurring 
*toward* the lakehouse. Warehouses are opening up: Snowflake, BigQuery, and 
Redshift all now query and, in varying degrees, write open table formats on 
customer-owned object storage, an acknowledgment that customers refuse to keep 
their primary copy of data in a proprietary format. Meanwhile, lakes are 
getting more database-like: table formats keep absorbing capabilities that were 
once warehouse differentiators  [...]
+
+Follow both trends to their end point and you arrive at the same place: open 
data on cheap storage, database-grade table management in an open layer above 
it, and interchangeable compute engines on top. That meeting point is the 
lakehouse. The remaining competition is less about *whether* to structure data 
this way and more about which table formats, catalogs, and engines earn a place 
in the stack.
+
+## Conclusion
+
+Warehouses deliver performance and governance at the price of lock-in and 
copies; lakes deliver cost and openness at the price of reliability; the 
lakehouse keeps the lake's economics and openness while restoring the database 
guarantees — transactions, upserts, indexing, schema management — that make 
data trustworthy and fast to query. For small, purely structured BI workloads, 
a warehouse is still a fine and simple answer. For everything pushing past that 
— scale, streaming, ML, multipl [...]
+
+## FAQ
+
+<PostFAQ heading={null} items={[
+  {
+    question: 'Is a lakehouse cheaper than a warehouse?',
+    answer: 'Usually, at scale. A lakehouse stores data on commodity cloud 
object storage, which costs a small fraction of proprietary warehouse storage, 
and it avoids maintaining multiple ELT copies of the same data. At small 
volumes the difference narrows, and a managed warehouse can be cheaper in 
engineering time, so total cost depends on scale and team.',
+  },
+  {
+    question: 'Can a lakehouse replace a data warehouse?',
+    answer: 'For many organizations, yes. Open table formats bring 
transactions, upserts, indexing, and schema management to lake storage, and 
engines like Trino, StarRocks, and Spark deliver strong SQL performance on 
those tables. Some teams still keep a warehouse for very high-concurrency, 
low-latency dashboards, often querying the lakehouse tables directly instead of 
holding a separate copy.',
+  },
+  {
+    question: 'Is Snowflake a data lakehouse?',
+    answer: 'Snowflake is a cloud data warehouse at its core, storing data in 
a proprietary format managed by its own engine. It has added lakehouse-style 
capabilities, notably support for Apache Iceberg tables on customer-owned 
object storage. Whether a Snowflake deployment qualifies as a lakehouse depends 
on whether the primary data copy lives in an open format that other engines can 
access.',
+  },
+  {
+    question: 'What is the main difference between a data lake and a data 
lakehouse?',
+    answer: 'A data lake is raw files on cheap object storage with no database 
guarantees, while a lakehouse adds an open table format layer, such as Apache 
Hudi, Apache Iceberg, or Delta Lake, on top of those files. That layer provides 
ACID transactions, record-level updates and deletes, indexing, and schema 
enforcement, turning unreliable file collections into managed tables.',
+  },
+  {
+    question: 'Do I need Hadoop to build a data lake or lakehouse?',
+    answer: 'No. Modern lakes and lakehouses are built on cloud object stores 
like Amazon S3, Google Cloud Storage, or Azure Data Lake Storage, with engines 
such as Apache Spark, Apache Flink, and Trino running against them. Hadoop HDFS 
is still supported by these tools but is no longer required or typical for new 
deployments.',
+  },
+  {
+    question: 'Which lakehouse table format should I choose?',
+    answer: 'Apache Hudi, Apache Iceberg, and Delta Lake all provide ACID 
transactions and schema evolution on open storage, and all are 
production-proven. Hudi stands out for update-heavy and streaming workloads 
thanks to its indexing and incremental processing, while the best fit overall 
depends on your engines, workloads, and ecosystem. Interoperability tools like 
Apache XTable also let one table be read in multiple formats.',
+  },
+]} />
diff --git a/website/blog/2026-07-24-open-table-format-vs-data-lakehouse.md 
b/website/blog/2026-07-24-open-table-format-vs-data-lakehouse.md
new file mode 100644
index 000000000000..6f4619902170
--- /dev/null
+++ b/website/blog/2026-07-24-open-table-format-vs-data-lakehouse.md
@@ -0,0 +1,96 @@
+---
+title: "Open Table Format vs Data Lakehouse: What's the Difference?"
+excerpt: "Untangles two constantly conflated terms: the open table format is 
one layer of the stack; the data lakehouse is the whole architecture built 
around it."
+description: "An open table format is a component; a data lakehouse is an 
architecture. This post walks the lakehouse stack layer by layer and corrects 
common conflations."
+authors: [vinoth-chandar]
+category: how-to
+image: /assets/images/blog/hudistack/hstck_new.png
+tags:
+- table format
+- data lakehouse
+- open architecture
+- architecture
+---
+
+An open table format is a component; a data lakehouse is an architecture. The 
table format is the metadata layer that turns files on object storage into 
transactional tables — the lakehouse is the complete system built around it: 
storage, table format, catalog, table services and query engines. The two terms 
get used interchangeably in vendor marketing and conference talks, and the 
conflation causes real confusion: teams "adopt a lakehouse" by picking a table 
format and then discover tha [...]
+
+This post untangles the two terms. We will walk the lakehouse stack from the 
bottom up, pin down exactly what a table format contributes at its layer, spell 
out what a table format alone does *not* give you, and correct the most common 
conflations along the way.
+
+## The Lakehouse Stack, Layer by Layer
+
+A [data lakehouse](/blog/2024/07/11/what-is-a-data-lakehouse) is best 
understood as a stack of open, modular layers. Each layer has one job, and the 
table format is exactly one of them. From the bottom up:
+
+**Cloud object storage.** Amazon S3, Azure Blob Storage, Google Cloud Storage. 
This layer stores bytes durably and cheaply at effectively unlimited scale, and 
decouples storage cost from compute cost. It knows nothing about tables — it 
serves GETs, PUTs and LISTs.
+
+**Open file formats.** [Apache Parquet](https://parquet.apache.org) and 
[Apache ORC](https://orc.apache.org) define how records are encoded *inside a 
single file*: columnar layout, compression, encodings, and per-file statistics. 
A file format makes one file efficient to scan; it has no concept of the other 
files around it.
+
+**The open table format.** [Apache Hudi](https://hudi.apache.org), [Apache 
Iceberg](https://iceberg.apache.org), and [Delta Lake](https://delta.io) live 
here. A table format is versioned metadata over many files: an ordered log of 
commits (in Hudi, the [timeline](/docs/timeline)), a record of which files 
constitute the table at each version, the schema and its evolution history, and 
file-level statistics for pruning. This is the layer that makes a pile of 
Parquet behave like a database t [...]
+
+**Storage engine and table services.** Metadata alone does not keep a table 
healthy. Something has to compact log files into base files, cluster data for 
query locality, size small files, clean up old versions, and build and maintain 
indexes. In some stacks this is the query engine's job or a vendor service; in 
Hudi it is a built-in layer of table services.
+
+**Catalogs and metadata services.** A catalog (Hive Metastore, AWS Glue, 
Apache Polaris, Unity Catalog) tracks which tables exist, their schemas, and 
where each table's metadata lives — plus, increasingly, access control and 
lineage. It is what lets an engine resolve `orders` to something it can plan a 
scan against.
+
+**Query and compute engines.** Apache Spark, Apache Flink, Trino, Presto, plus 
warehouses and Python-native engines. Engines do the actual reading, writing 
and computing, speaking to tables through the table format's specification and 
finding them through the catalog.
+
+![Data lakehouse architecture](/assets/images/blog/dlh_new.png)
+<p align = "center">Figure: The layered data lakehouse architecture</p>
+
+Assemble all of these — storage, file format, table format, table services, 
catalog, engines — and *that* is a data lakehouse. The table format is the 
load-bearing middle of the stack, arguably the layer that made the architecture 
possible at all. But it is one layer, the way a storage engine is one layer of 
a database, not the database.
+
+## What a Table Format Alone Does Not Give You
+
+Here is where the conflation bites in practice. A table format specification 
tells you what a valid table looks like on storage. It does not, by itself, 
operate anything. Adopt a bare table format and you still own:
+
+- **Table maintenance.** Someone has to run compaction, clustering, cleaning 
of old file versions, and file sizing — continuously, for every table, 
coordinated with in-flight writers. Skip it and small files and stale metadata 
quietly erode query performance and inflate storage bills.
+- **Ingestion.** The format defines how commits land; it does not build the 
pipelines that pull from Kafka, CDC streams, or upstream databases, handle 
schema drift, deduplicate, and checkpoint.
+- **Catalog sync and discovery.** Tables must be registered and kept current 
in one or more catalogs so every engine can find them.
+- **Access control and governance.** The format stores data; deciding who can 
read which columns of it is a platform concern layered above.
+- **Monitoring and operations.** Commit failures, clustering backlogs, 
concurrency conflicts — someone has to watch them.
+
+This is the "platform gap" between a format and a lakehouse, and it is exactly 
where projects differ in scope. Apache Iceberg deliberately scopes itself to 
the specification and libraries, leaving maintenance to engines and vendors. 
Hudi deliberately scopes itself wider: built-in table services (compaction, 
clustering, cleaning, indexing) that run inline or asynchronously without 
external orchestration, ingestion utilities like [Hudi 
Streamer](/docs/hoodie_streaming_ingestion) for pullin [...]
+
+![Apache Hudi stack](/assets/images/blog/hudistack/hstck_new.png)
+<p align = "center">Figure: The Apache Hudi stack — a table format plus table 
services and platform components</p>
+
+## Common Conflations, Corrected
+
+A few statements you will hear regularly, each slightly wrong in an 
instructive way:
+
+**"Iceberg is a lakehouse."** No — Apache Iceberg is a table format a 
lakehouse can use. An Iceberg table sitting in S3 with no catalog, no 
maintenance jobs and no engines wired up is not a lakehouse; it is 
well-organized metadata. The same is true of Hudi and Delta Lake at the format 
layer: the lakehouse is what you get after you assemble the rest of the stack 
around the tables.
+
+**"Databricks' lakehouse is the lakehouse."** Databricks popularized the term 
and built an excellent platform around Delta Lake, but the lakehouse is an open 
architectural pattern, not one vendor's product. Uber was running Hudi in what 
we would now call a lakehouse architecture in 2016–2017, and today you can 
assemble a lakehouse from entirely open components — or buy one from any of 
several vendors — on any of the three major formats.
+
+**"Choosing a table format means choosing a vendor."** The formats are openly 
governed (Hudi and Iceberg at the ASF, Delta Lake at the Linux Foundation), and 
every major engine reads more than one of them. Vendors have preferred formats, 
but the specification belongs to the community — that openness is the entire 
point of the "open" in open table format.
+
+**"Parquet is our table format."** A file format is not a table format. 
Parquet defines the bytes inside one file; a table format defines how thousands 
of Parquet files plus a transaction log behave as a single versioned table. 
They are adjacent layers of the stack, not alternatives.
+
+For where the lakehouse itself sits relative to the architectures it evolved 
from, see the companion comparison of [lakehouse vs data warehouse vs data 
lake](/blog/2026/07/23/lakehouse-vs-data-warehouse-vs-data-lake).
+
+## The Layers Interoperate — You Are Not Locked In
+
+Because the layers are modular and the specifications open, the mapping 
between them is many-to-many. Spark, Flink and Trino each read and write all 
three major formats. A single lakehouse can, and often does, contain tables in 
more than one format, discovered through the same catalog and queried by the 
same engines.
+
+Interoperability now extends to the format layer itself. [Apache 
XTable](https://xtable.apache.org) (incubating) translates table metadata 
between Hudi, Iceberg and Delta Lake — in any direction — without copying or 
rewriting data files, either as a one-time conversion or as continuous 
incremental sync. A table written with Hudi's ingestion and indexing 
capabilities can be exposed as an Iceberg table to a service that only reads 
Iceberg. The practical consequence is that the table format [...]
+
+## Practical Guidance: Architecture First, Then Format
+
+The right order of decisions falls straight out of the layering. First design 
the architecture: what workloads (BI, ML, streaming, ad-hoc SQL) must the 
system serve? Which engines? What ingestion latency? Who operates table 
maintenance — your team, built-in services, or a vendor? What are the 
governance requirements? That exercise defines the lakehouse you need.
+
+Only then choose the table format — as a component decision driven by workload 
fit. Mutable, incremental, streaming-heavy ingestion favors Hudi's write path, 
indexing and [table types](/docs/table_types) (Copy-on-Write vs Merge-on-Read 
let you tune the write/read trade-off per table). Engine-neutral batch 
analytics with broad catalog support is Iceberg's design center; deep Spark and 
Databricks integration is Delta's. If the operational gap matters — no team to 
babysit compaction jobs —  [...]
+
+Teams that pick a format first and call it a lakehouse strategy usually end up 
rediscovering the rest of the stack the hard way, one missing layer at a time.
+
+## Conclusion
+
+Keep the two terms at their own altitudes and the confusion disappears. The 
open table format is a layer: versioned, transactional metadata that turns 
files on object storage into tables. The data lakehouse is the architecture: 
that layer plus storage, file formats, table services, catalogs and engines, 
assembled into a system that does warehouse-grade work on open data. A table 
format cannot be a lakehouse any more than a storage engine can be a database — 
but no lakehouse stands withou [...]
+
+## FAQ
+
+<PostFAQ heading={null} items={[
+  {question: 'What is the difference between an open table format and a data 
lakehouse?', answer: 'An open table format is a single component: the metadata 
layer that turns files on object storage into transactional tables with ACID 
commits, schema evolution and time travel. A data lakehouse is the complete 
architecture built around it, combining object storage, open file formats, the 
table format, table services, catalogs and query engines into one system.'},
+  {question: 'Is Apache Iceberg a data lakehouse?', answer: 'No. Apache 
Iceberg is an open table format — one layer of a lakehouse architecture. A 
lakehouse using Iceberg still needs object storage, a catalog, query engines, 
and services to maintain the tables. Iceberg is a table format a lakehouse can 
use, not a lakehouse itself.'},
+  {question: 'Is Delta Lake a table format or a lakehouse?', answer: 'Delta 
Lake is an open table format governed by the Linux Foundation. Databricks 
builds its lakehouse platform on top of Delta Lake, which is why the two are 
often conflated, but Delta Lake itself is the table layer, and the lakehouse is 
the surrounding platform of storage, catalogs, engines and services.'},
+  {question: 'Do I need a table format to build a lakehouse?', answer: 'Yes, 
in practice. The table format is what provides atomic commits, snapshot 
isolation, updates and deletes, and versioning over files in object storage. 
Without one you have a data lake of raw files, not a lakehouse. Apache Hudi, 
Apache Iceberg and Delta Lake are the major open options.'},
+  {question: 'Is Apache Hudi a table format or a lakehouse platform?', answer: 
'Both, by design. Hudi includes an open table format built around its timeline 
and file layout, but the project also ships built-in table services like 
compaction, clustering and cleaning, ingestion utilities such as Hudi Streamer, 
and a multi-modal indexing subsystem. That puts Hudi closer to a lakehouse 
platform than a bare format specification.'},
+  {question: 'Does choosing a table format lock me into one vendor?', answer: 
'No. The major table formats are openly governed, and engines like Apache 
Spark, Apache Flink and Trino support all of them. Apache XTable can also 
translate table metadata between Hudi, Iceberg and Delta Lake without rewriting 
data files, so the format choice is a per-workload decision rather than a 
permanent commitment.'},
+]} />
diff --git a/website/static/llms.txt b/website/static/llms.txt
index 72ac2077ebd7..33fc4c0fc4bd 100644
--- a/website/static/llms.txt
+++ b/website/static/llms.txt
@@ -43,6 +43,10 @@ It can also synchronize your data to half dozen data 
catalogs to keep table cons
 - [What is Upsert on a Data 
Lake?](https://hudi.apache.org/blog/2026/07/15/what-is-upsert-on-a-data-lake): 
Record-level updates and deletes on immutable cloud storage, and how Hudi makes 
them fast.
 - [What is Incremental ETL on a Data 
Lake?](https://hudi.apache.org/blog/2026/07/16/what-is-incremental-etl-on-a-data-lake):
 Processing only the data that changed instead of recomputing whole tables.
 - [What is ACID on a Data 
Lake?](https://hudi.apache.org/blog/2026/07/17/what-is-acid-on-a-data-lake): 
What atomicity, consistency, isolation and durability mean when your database 
is a bucket of files.
+- [What is a Streaming Data 
Lake?](https://hudi.apache.org/blog/2026/07/21/what-is-a-streaming-data-lake): 
Minute-level data freshness on the lake with incremental pipelines instead of 
batch reprocessing.
+- [What is CDC on a Data 
Lake?](https://hudi.apache.org/blog/2026/07/22/what-is-cdc-on-a-data-lake): 
Change data capture from operational databases into lakehouse tables, explained 
from first principles.
+- [Lakehouse vs Data Warehouse vs Data 
Lake](https://hudi.apache.org/blog/2026/07/23/lakehouse-vs-data-warehouse-vs-data-lake):
 The three architectures compared — strengths, costs and when to use each.
+- [Open Table Format vs Data 
Lakehouse](https://hudi.apache.org/blog/2026/07/24/open-table-format-vs-data-lakehouse):
 Untangling the table layer from the architecture, and where file formats, 
catalogs and engines fit.
 
 ## Blog — Migration guides
 

Reply via email to