Skip to content

Support Iceberg v3 nanosecond timestamps in Arrow, manifests and pruning - #119

Merged
osipovartem merged 1 commit into
embucket-sync-df55.0.0from
feature/df55-iceberg-v3-timestamp-ns
Oct 15, 2026
Merged

osipovartem merged 1 commit into
embucket-sync-df55.0.0from
feature/df55-iceberg-v3-timestamp-ns

Conversation

@osipovartem

Copy link
Copy Markdown

Summary

  • Preserve timestamp_ns and timestamptz_ns across Iceberg values, Arrow schema inference, Parquet bounds, manifests, partition transforms, and DataFusion statistics/pruning.
  • Use Iceberg-compatible floor-microsecond bucket hashing and widened distance arithmetic for valid extreme nanosecond ranges.
  • Keep default SQL CREATE on v2 microsecond timestamps; normalize DataFusion format.format-version and use the parsed format version for explicit v3, including accepted 03.
  • Preserve the low-cardinality bitmap path and use indexed, lazy output groups for high-cardinality partitions without rejecting batches above 10,000 partitions.

Verification

  • cargo +1.95.0 test -p iceberg-rust-spec -p iceberg-rust -p datafusion_iceberg --lib --quiet: 523 active tests passed.
  • cargo +1.95.0 test -p datafusion_iceberg --test roundtrip_types --test integration_df_types --quiet: 11 passed. Includes v3 nanosecond write/read/filter and default-v2 versus explicit-v3 SQL CREATE metadata checks.
  • cargo +1.95.0 clippy -p iceberg-rust-spec -p iceberg-rust -p datafusion_iceberg --all-targets --all-features -- -D warnings: passed.
  • Focused partition microbenchmark (debug, 10 x 65,536 rows): 4 partitions 148.7 ms base vs 147.2 ms here; 2,048 partitions 284.6 ms here. The temporary benchmark code/worktree were removed.
  • Independent read-only review approved after addressing its findings.

Scope

This proves local Iceberg v3 round-trips. Live Snowflake-managed v3 Horizon read interoperability remains to be tested after the Rustice dependency pin is updated; it is not claimed here.

@osipovartem
osipovartem merged commit e6165ac into embucket-sync-df55.0.0 Oct 15, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant