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.
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.
How Apache Hudi answers the questions Table Formats turns on.
| How it works | |
| 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 |
| Change feed | Incremental queries since a commit, or CDC with before and after images |
| Running it | |
| Maintenance | Compaction, clustering, cleaning and archival, inline, semi-async or a separate job |
| Connections | |
| Engine support | Spark and Flink write; Trino, Presto, Hive read |
| Cross-format reads | Apache XTable translates the metadata to Iceberg or Delta in place |
vs Apache Hudi: Java, Python, Rust, Go
Same headline facts as Apache Hudi
vs Apache Hudi: Scala, Java, Rust, Python