Supported Features
Overview
Here is a high-level overview of the features supported by Sail for Iceberg tables.
| Feature | Supported |
|---|---|
| Current snapshot reads | ✅ |
| Metadata-as-data read path | ✅ |
| Append writes | ✅ |
| Overwrite writes | ✅ |
| Predicate overwrite writes | 🚧 |
| Partition overwrite writes | 🚧 |
| Copy-on-write writes | ✅ |
| Merge-on-read writes | 🚧 |
Row-level DELETE | 🚧 |
MERGE INTO | 🚧 |
UPDATE | 🚧 |
| Partitioned tables | ✅ |
| Predicate pushdown and file pruning | ✅ |
| Time travel (by snapshot ID) | ✅ |
| Time travel (by timestamp) | ✅ |
Snapshot references (refs) | ✅ |
| Branch and tag creation | 🚧 |
| Table property DDL | ✅ |
| Format-version selection | ✅ |
| Commit conflict resolution and retry | 🚧 |
| Iceberg REST catalog integration | ✅ |
| File system table commits | ✅ |
| Multi-table atomic transactions | 🚧 |
Compaction (rewrite_data_files) | 🚧 |
| Position-delete rewrite procedures | 🚧 |
| Z-order clustering | 🚧 |
| Iceberg View Spec | 🚧 |
| Iceberg SQL UDF Spec | 🚧 |
Both non-partitioned and partitioned tables are supported for reading and writing.
The write operations currently follow "copy-on-write" semantics. We plan to support delete files and deletion vectors, which would enable "merge-on-read" write operations in the future.
Version-specific Features
We classify the supported features according to the Iceberg specification.
Version 1: Analytic Data Tables
| Feature | Supported |
|---|---|
| Table metadata | ✅ |
| Schemas and Data Types | ✅ |
| Schema Evolution | ✅ |
| Partition specs | ✅ |
| Partition transforms | ✅ |
| Partition Evolution | 🚧 |
| Sort Orders | 🚧 |
| Snapshots | ✅ |
| Manifest Lists | ✅ |
| Manifests | ✅ |
| Scan Planning | ✅ |
| File format (Parquet data files) | ✅ |
| File format (Avro data files) | 🚧 |
| File format (ORC data files) | 🚧 |
| Column metrics | ✅ |
| NaN value counts | 🚧 |
| Name Mapping | 🚧 |
| Table Statistics | 🚧 |
| Partition Statistics | 🚧 |
| Snapshot expiration | 🚧 |
Reading existing branches and tags is supported (time travel). We plan to support creating branches and tags in DDL operations in the future.
Version 2: Row-Level Deletes
| Feature | Supported |
|---|---|
| Format-version 2 metadata | ✅ |
| Sequence Numbers | ✅ |
| Sequence Number Inheritance | ✅ |
| Manifest Lists sequence fields | ✅ |
Manifest content metadata | 🚧 |
Data file content field | 🚧 |
| Delete Formats | 🚧 |
| Position Delete Files | 🚧 |
| Equality Delete Files | 🚧 |
| Delete File Stats | 🚧 |
| Row-level delete scan planning | 🚧 |
| Row-level delete writes | 🚧 |
Version 3: Extended Types and Capabilities
| Feature | Supported |
|---|---|
| Variant | ✅ |
| Unknown type | 🚧 |
timestamp_ns | 🚧 |
timestamptz_ns | 🚧 |
| Geometry type | 🚧 |
| Geography type | 🚧 |
| Default Values | 🚧 |
| Multi-argument transforms | 🚧 |
| Row Lineage | 🚧 |
| First Row ID Inheritance | ✅ |
| Deletion Vectors | 🚧 |
| Encryption Keys | 🚧 |
| AES-GCM stream encryption | 🚧 |
| Puffin deletion-vector blobs | 🚧 |
