Apache Paimon is a lake format unifying batch and streaming, using an LSM tree to absorb high-frequency updates and emitting changelogs so downstream jobs can consume what changed rather than rescanning.
Paimon is a library in the engine with tables on object storage or HDFS. Writes land in an LSM tree and flush as sorted runs; merge engines resolve duplicate keys in the background. The catalog is a filesystem directory by default, or Hive, JDBC, or REST. Snapshots expire automatically, orphan files are cleaned manually, and object stores need a catalog lock for concurrent commits.
How Apache Paimon answers the questions Table Formats turns on.
| How it works | |
| Catalog | Filesystem by default; Hive, JDBC or REST metastore |
| Update model | LSM tree with merge engines per primary key; append tables have none |
| Partitioning | Hive-style partitions plus buckets: fixed, dynamic or postpone; nothing hidden |
| Schema evolution | Add, drop, rename and retype columns; primary and partition keys cannot be renamed |
| Concurrent writers | Optimistic snapshot commits, conflicts auto-resolved; object stores need a catalog lock |
| Indexes | LSM order plus file indexes, bloom filter, bitmap, range bitmap; deletion vectors |
| Change feed | Changelog producers emit before and after images |
| Running it | |
| Maintenance | Compaction in the writer or a dedicated job; snapshots expire automatically, orphans manually |
| Connections | |
| Engine support | Flink-first; Spark and Hive native, read by others |
| Cross-format reads | Iceberg metadata written alongside; readers need full compaction unless deletion vectors are on |
Same headline facts as Apache Paimon
vs Apache Paimon: Java, Python, Rust, Go
vs Apache Paimon: Scala, Java, Rust, Python