Buying snapshot
Scroll sideways to see all columns. With a keyboard, focus this table and use the arrow keys.
| Decision point | What the Apache Iceberg project states |
|---|---|
License | Apache-2.0 license. The project is under active development at the Apache Software Foundation. |
How it is installed | As libraries added to your processing engine. The iceberg-core module is what processing engines should depend on. Spark and Flink integrations ship as runtime jars, a shaded version that avoids dependency conflicts. |
Building from source | Built with Gradle on Java 17 or 21. The tests require Docker. |
Language libraries | The core Java library is the reference implementation. Separate implementations exist for Go (iceberg-go), Python (PyIceberg), Rust (iceberg-rust) and C++ (iceberg-cpp). |
Data files | Avro support is in iceberg-core. Optional modules add tables backed by Parquet or ORC files, and reading Parquet into Arrow memory. |
Hive users | The iceberg-hive-metastore module backs Iceberg tables with the Hive metastore Thrift client, and iceberg-mr integrates with Apache Hive. |
Our take
Choose Apache Iceberg if your analytic tables need to outlive any single engine and you have a platform team that will choose, run and upgrade the engines around it. If you want one product that stores, queries and operates your data for you, Iceberg is only one layer of that decision.
Evaluate Apache Iceberg
Comparisons
Where it stands out
Several engines on one table. The project states that engines like Spark, Trino, Flink, Presto, Hive and Impala can safely work with the same tables at the same time. Batch, streaming and SQL teams can share one copy of a dataset instead of keeping one per engine.
Schema changes without rewrites. Columns can be added, renamed and reordered, and the project states that schema changes never require rewriting your table. Adding a column won't bring back "zombie" data. This suits long-lived tables whose source systems change.
Hidden partitioning. Iceberg produces partition values for rows and skips unnecessary partitions and files, so queries need no extra filters. Table layout can be updated as data or queries change, so an early partition choice is not permanent.
Time travel and rollback. Queries can read an exact earlier table snapshot by version or timestamp, and version rollback resets a table to a good state. This helps when a pipeline writes bad data.
Row-level SQL changes. Iceberg supports SQL commands to merge new data, update existing rows and perform targeted deletes, such as MERGE INTO.
A stable specification. The Iceberg format specification is stable, and new features are added with each version, which matters for tables you expect to keep for years.
Trade-offs to weigh
You still choose and run the rest. Iceberg is a table format and a set of libraries that engines depend on. The query engine, storage and day-to-day operation remain separate decisions, each with its own cost and owner.
Engine version matching is your job. The Spark integration has submodules for each Spark version. The project's Multi-Engine Support page covers compatibility with Spark, Flink and Hive versions; for Presto or Trino it points you to those engines' own websites. Every engine you add is another compatibility matrix to test at upgrade time.
Update speed versus read speed is a choice you make. Iceberg can eagerly rewrite data files for read performance, or use delete deltas for faster updates. Teams need to pick per workload rather than rely on one default.
File layout needs upkeep. Data compaction is supported out of the box, with bin-packing or sorting strategies, but it runs as a procedure such as
CALL system.rewrite_data_files. Someone has to decide when and how it runs.
Public signals
About these signals
Verified factual signals from public sources. They indicate observable activity or interest, not total adoption, product quality, or cost.
563 GitHub commits 90d9.4k GitHub stars0 vulnerabilities across 1 package
See all signals from 6 sources
PyPI · pyiceberg@0.12.0
Alternatives to Apache Iceberg
The reviewed substitutes for Apache Iceberg among the open table formats, and what would make each one the better answer.
Direct alternatives
Reviewed substitutes: products bought for the same job, where a team picks one.
- Delta Lake
- To get ACID tables, schema evolution and time travel on object storage, a team can adopt Apache Iceberg or Delta Lake. Delta Lake comes from Databricks and works most smoothly in Spark and Databricks. Iceberg is an Apache project with broad support across engines such as Trino, Flink and Snowflake.Applies to: Choosing between two products of the same kind for one job.
- Apache Hudi
- Apache Iceberg and Apache Hudi each turn files on cloud storage into reliable tables with transactions and schema changes. Iceberg puts the weight on engine-neutral tables that Spark, Trino, Flink and Snowflake can all read and write, with partition evolution. Hudi puts the weight on fast upserts and incremental processing for streaming pipelines.Applies to: Choosing between two products of the same kind for one job.
Related technologies
Normally used together rather than chosen between, so these are not alternatives.
- Trino
- Normally used together, not chosen between: Iceberg is the open table format on object storage and Trino is a query engine that reads it. Neither can be deployed instead of the other.