Implementation Status
Apache Iceberg's table specification is implemented in multiple languages. This page provides an overview of the current
capabilities.
Libraries
This section lists the libraries that implement the Apache Iceberg specification.
Data Types
Data Type |
Java |
PyIceberg |
Rust |
Go |
boolean |
Y |
Y |
Y |
Y |
int |
Y |
Y |
Y |
Y |
long |
Y |
Y |
Y |
Y |
float |
Y |
Y |
Y |
Y |
double |
Y |
Y |
Y |
Y |
decimal |
Y |
Y |
Y |
Y |
date |
Y |
Y |
Y |
Y |
time |
Y |
Y |
Y |
Y |
timestamp |
Y |
Y |
Y |
Y |
timestamptz |
Y |
Y |
Y |
Y |
timestamp_ns |
Y |
Y |
Y |
Y |
timestamptz_ns |
Y |
Y |
Y |
Y |
string |
Y |
Y |
Y |
Y |
uuid |
Y |
Y |
Y |
Y |
fixed |
Y |
Y |
Y |
Y |
binary |
Y |
Y |
Y |
Y |
variant |
Y |
Y |
Y |
Y |
list |
Y |
Y |
Y |
Y |
map |
Y |
Y |
Y |
Y |
struct |
Y |
Y |
Y |
Y |
Format |
Java |
PyIceberg |
Rust |
Go |
Parquet |
Y |
Y |
Y |
Y |
ORC |
Y |
N |
N |
N |
Puffin |
Y |
N |
N |
N |
Avro |
Y |
N |
N |
N |
File IO
Storage |
Java |
PyIceberg |
Rust |
Go |
Local Filesystem |
Y |
Y |
Y |
Y |
Hadoop Filesystem |
Y |
Y |
Y |
Y |
S3 Compatible |
Y |
Y |
Y |
Y |
GCS Compatible |
Y |
Y |
Y |
Y |
Table Maintenance Operations
Table Spec V1
Operation |
Java |
PyIceberg |
Rust |
Go |
Update schema |
Y |
N |
Y |
N |
Update partition spec |
Y |
N |
Y |
N |
Update table properties |
Y |
Y |
Y |
N |
Replace sort order |
Y |
N |
N |
N |
Update table location |
Y |
N |
N |
N |
Update statistics |
Y |
N |
N |
N |
Update partition statistics |
Y |
N |
N |
N |
Expire snapshots |
Y |
N |
N |
N |
Manage snapshots |
Y |
N |
N |
N |
Table Spec V2
Operation |
Java |
PyIceberg |
Rust |
Go |
Update schema |
Y |
Y |
N |
N |
Update partition spec |
Y |
Y |
N |
N |
Update table properties |
Y |
Y |
Y |
N |
Replace sort order |
Y |
N |
N |
N |
Update table location |
Y |
N |
N |
N |
Update statistics |
Y |
N |
N |
N |
Update partition statistics |
Y |
N |
N |
N |
Expire snapshots |
Y |
N |
N |
N |
Manage snapshots |
Y |
N |
N |
N |
Table Update Operations
Table Spec V1
Operation |
Java |
PyIceberg |
Rust |
Go |
Append data files |
Y |
Y |
N |
N |
Rewrite files |
Y |
Y |
N |
N |
Rewrite manifests |
Y |
Y |
N |
N |
Overwrite files |
Y |
Y |
N |
N |
Delete files |
Y |
N |
N |
N |
Table Spec V2
Operation |
Java |
PyIceberg |
Rust |
Go |
Append data files |
Y |
Y |
N |
N |
Rewrite files |
Y |
Y |
N |
N |
Rewrite manifests |
Y |
Y |
N |
N |
Overwrite files |
Y |
Y |
N |
N |
Row delta |
Y |
N |
N |
N |
Delete files |
Y |
Y |
N |
N |
Table Read Operations
Table Spec V1
Operation |
Java |
PyIceberg |
Rust |
Go |
Plan with data file |
Y |
Y |
Y |
Y |
Plan with puffin statistics |
Y |
Y |
Y |
Y |
Read data file |
Y |
N |
Y |
N |
Table Spec V2
Operation |
Java |
PyIceberg |
Rust |
Go |
Plan with data file |
Y |
Y |
Y |
Y |
Plan with position deletes |
Y |
Y |
N |
N |
Plan with equality deletes |
Y |
Y |
N |
N |
Plan with puffin statistics |
Y |
N |
N |
N |
Read data file |
Y |
Y |
Y |
N |
Read with position deletes |
Y |
Y |
N |
N |
Read with equality deletes |
Y |
N |
N |
N |
Table Write Operations
Table Spec V1
Operation |
Java |
PyIceberg |
Rust |
Go |
Append data |
Y |
Y |
Y |
N |
Table Spec V2
Operation |
Java |
PyIceberg |
Rust |
Go |
Append data |
Y |
Y |
Y |
N |
Write position deletes |
Y |
N |
N |
N |
Write equality deletes |
Y |
N |
N |
N |
Catalogs
Rest Catalog
Table Spec V1
Table Operation |
Java |
PyIceberg |
Rust |
Go |
listTable |
Y |
Y |
Y |
Y |
createTable |
Y |
Y |
Y |
Y |
dropTable |
Y |
Y |
Y |
Y |
loadTable |
Y |
Y |
Y |
Y |
updateTable |
Y |
Y |
Y |
Y |
renameTable |
Y |
Y |
Y |
Y |
tableExists |
Y |
Y |
Y |
Y |
Table Spec V2
Table Operation |
Java |
PyIceberg |
Rust |
Go |
listTable |
Y |
Y |
Y |
Y |
createTable |
Y |
Y |
Y |
Y |
dropTable |
Y |
Y |
Y |
Y |
loadTable |
Y |
Y |
Y |
Y |
updateTable |
Y |
Y |
Y |
Y |
renameTable |
Y |
Y |
Y |
Y |
tableExists |
Y |
Y |
Y |
Y |
View Spec V1
View Operation |
Java |
PyIceberg |
Rust |
Go |
createView |
Y |
N |
N |
N |
dropView |
Y |
N |
N |
N |
listView |
Y |
N |
N |
N |
viewExists |
Y |
N |
N |
N |
replaceView |
Y |
N |
N |
N |
renameView |
Y |
N |
N |
N |
Namespace Operations
Namespace Operation |
Java |
PyIceberg |
Rust |
Go |
listNamespaces |
Y |
Y |
Y |
Y |
createNamespace |
Y |
Y |
Y |
Y |
dropNamespace |
Y |
Y |
Y |
Y |
namespaceExists |
Y |
N |
Y |
Y |
updateNamespaceProperties |
Y |
Y |
Y |
Y |
loadNamespaceMetadata |
Y |
N |
Y |
Y |
Sql Catalog
The sql catalog is a catalog backed by a sql database, which is called jdbc catalog in java.
Database |
Java |
PyIceberg |
Rust |
Go |
Postgres |
Y |
Y |
Y |
N |
MySQL |
Y |
Y |
Y |
N |
SQLite |
Y |
Y |
Y |
N |
Table Spec V1
Table Operation |
Java |
PyIceberg |
Rust |
Go |
listTable |
Y |
Y |
Y |
Y |
createTable |
Y |
Y |
Y |
Y |
dropTable |
Y |
Y |
Y |
Y |
loadTable |
Y |
Y |
Y |
Y |
updateTable |
Y |
Y |
Y |
Y |
renameTable |
Y |
Y |
Y |
Y |
tableExists |
Y |
Y |
Y |
Y |
Table Spec V2
Table Operation |
Java |
PyIceberg |
Rust |
Go |
listTable |
Y |
Y |
Y |
Y |
createTable |
Y |
Y |
Y |
Y |
dropTable |
Y |
Y |
Y |
Y |
loadTable |
Y |
Y |
Y |
Y |
updateTable |
Y |
Y |
Y |
Y |
renameTable |
Y |
Y |
Y |
Y |
tableExists |
Y |
Y |
Y |
Y |
View Spec V1
View Operation |
Java |
PyIceberg |
Rust |
Go |
createView |
Y |
N |
N |
N |
dropView |
Y |
N |
N |
N |
listView |
Y |
N |
N |
N |
viewExists |
Y |
N |
N |
N |
replaceView |
Y |
N |
N |
N |
renameView |
Y |
N |
N |
N |
Namespace Operations
Namespace Operation |
Java |
PyIceberg |
Rust |
Go |
listNamespaces |
Y |
N |
N |
N |
createNamespace |
Y |
N |
N |
N |
dropNamespace |
Y |
Y |
Y |
Y |
namespaceExists |
Y |
N |
N |
N |
updateNamespaceProperties |
Y |
Y |
Y |
Y |
loadNamespaceMetadata |
Y |
N |
N |
N |
Glue Catalog
Table Spec V1
Table Operation |
Java |
PyIceberg |
Rust |
Go |
listTable |
Y |
Y |
Y |
Y |
createTable |
Y |
Y |
Y |
Y |
dropTable |
Y |
Y |
Y |
Y |
loadTable |
Y |
Y |
Y |
Y |
updateTable |
Y |
Y |
Y |
Y |
renameTable |
Y |
Y |
Y |
Y |
tableExists |
Y |
Y |
Y |
Y |
Table Spec V2
Table Operation |
Java |
PyIceberg |
Rust |
Go |
listTable |
Y |
Y |
Y |
Y |
createTable |
Y |
Y |
Y |
Y |
dropTable |
Y |
Y |
Y |
Y |
loadTable |
Y |
Y |
Y |
Y |
updateTable |
Y |
Y |
Y |
Y |
renameTable |
Y |
Y |
Y |
Y |
tableExists |
Y |
Y |
Y |
Y |
View Spec V1
View Operation |
Java |
PyIceberg |
Rust |
Go |
createView |
Y |
N |
N |
N |
dropView |
Y |
N |
N |
N |
listView |
Y |
N |
N |
N |
viewExists |
Y |
N |
N |
N |
replaceView |
Y |
N |
N |
N |
renameView |
Y |
N |
N |
N |
Namespace Operations
Namespace Operation |
Java |
PyIceberg |
Rust |
Go |
listNamespaces |
Y |
N |
N |
N |
createNamespace |
Y |
N |
N |
N |
dropNamespace |
Y |
N |
N |
N |
namespaceExists |
Y |
N |
N |
N |
updateNamespaceProperties |
Y |
Y |
Y |
Y |
loadNamespaceMetadata |
Y |
N |
N |
N |
Table Spec V1
Table Operation |
Java |
PyIceberg |
Rust |
Go |
listTable |
Y |
Y |
Y |
Y |
createTable |
Y |
Y |
Y |
Y |
dropTable |
Y |
Y |
Y |
Y |
loadTable |
Y |
Y |
Y |
Y |
updateTable |
Y |
Y |
Y |
Y |
renameTable |
Y |
Y |
Y |
Y |
tableExists |
Y |
Y |
Y |
Y |
Table Spec V2
Table Operation |
Java |
PyIceberg |
Rust |
Go |
listTable |
Y |
Y |
Y |
Y |
createTable |
Y |
Y |
Y |
Y |
dropTable |
Y |
Y |
Y |
Y |
loadTable |
Y |
Y |
Y |
Y |
updateTable |
Y |
Y |
Y |
Y |
renameTable |
Y |
Y |
Y |
Y |
tableExists |
Y |
Y |
Y |
Y |
View Spec V1
View Operation |
Java |
PyIceberg |
Rust |
Go |
createView |
Y |
N |
N |
N |
dropView |
Y |
N |
N |
N |
listView |
Y |
N |
N |
N |
viewExists |
Y |
N |
N |
N |
replaceView |
Y |
N |
N |
N |
renameView |
Y |
N |
N |
N |
Namespace Operations
Namespace Operation |
Java |
PyIceberg |
Rust |
Go |
listNamespaces |
Y |
N |
N |
N |
createNamespace |
Y |
N |
N |
N |
dropNamespace |
Y |
N |
N |
N |
namespaceExists |
Y |
N |
N |
N |
updateNamespaceProperties |
Y |
Y |
Y |
Y |
loadNamespaceMetadata |
Y |
N |
N |
N |