# Apache Hudi

> Transactional lake format built around upserts and incremental reads

Apache Hudi is an open lakehouse format that pioneered transactional data lakes, offering record-level upserts and deletes, incremental queries, and a choice between copy-on-write and merge-on-read table types.

Website: https://hudi.apache.org

## Use it when

- You are applying record-level upserts and deletes to lake tables continuously, such as CDC ingestion from operational databases.
- Downstream pipelines should consume only what changed, using incremental queries or the CDC view instead of full scans.
- The workload is write-heavy or streaming and merge-on-read fits: appends land fast and compaction is deferred.
- Key-based writes benefit from its indexes (bloom, bucket, record-level) to locate affected files quickly.

## Think twice when

- Your engines need to write from outside Spark or Flink; Trino, Presto, and Hive only read Hudi tables.
- You want to minimize table operations: compaction, clustering, cleaning, and archival are yours to configure and run.
- Multiple writers must commit concurrently; optimistic concurrency needs an external lock provider except in the non-blocking MoR case.
- The data is slow-changing batch output, where Iceberg or Delta Lake involves fewer moving parts.

## How it runs

Hudi is a library inside the engine, not a server. Tables live on object storage with the transaction timeline in the table directory, optionally synced to a metastore or catalog. You choose copy-on-write or merge-on-read per table and schedule maintenance inline, semi-async, or as separate jobs. Managed platforms from the ecosystem around the project run those services for you, and Apache XTable can translate the metadata to Iceberg or Delta in place.

## Details

### General

| Attribute | Value |
| --- | --- |
| License | Open source (permissive) |
| SPDX identifier | Apache-2.0 |
| Deployment | Self-hosted, Managed |
| Operational complexity | Medium |
| Pricing | Free |
| Language | Java |
| Repository | https://github.com/apache/hudi |
| Documentation | https://hudi.apache.org/docs/overview |
| Stars | 6.3k |

### Table Formats

| Attribute | Value |
| --- | --- |
| Engine support | Spark and Flink write; Trino, Presto, Hive read |
| Catalog | Optional: timeline in the table directory; metastore sync |
| Update model | Copy-on-write or merge-on-read, chosen per table; partial updates on MoR |
| Partitioning | Hive-style paths: no hidden partitioning; an expression index covers some of the gap |
| Schema evolution | Add and promote on write; drop, rename and reorder need schema-on-read, one-way |
| Concurrent writers | OCC with an external lock provider; non-blocking mode for MoR bucket-index writers |
| Indexes | Multi-modal: bloom, simple, bucket, record-level, secondary and expression indexes |
| Maintenance | Compaction, clustering, cleaning and archival, inline, semi-async or a separate job |
| Change feed | Incremental queries since a commit, or CDC with before and after images |
| Cross-format reads | Apache XTable translates the metadata to Iceberg or Delta in place |

## Capabilities

- [Table Formats](https://matca.io/capabilities/table-format)

---

Source: https://matca.io/apache-hudi
Last updated: 2026-08-31T11:40:46.834Z
