You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Native Iceberg writes landed in three parts under #4322: the split writer/committer plan (#4658), the eligibility allowlist with fall-back reasons (#5298), and the iceberg-rust data-file writer with JVM-side manifest metrics (#5361). #4322 closed when #5361 merged, and no issue tracks what remains between "merged behind two off-by-default flags" and "production quality". The open follow-ups exist but are not linked to each other, and several gaps had no issue at all.
This epic is that plan. The goal is unchanged from #4322: an ETL job that scans, transforms, and writes Iceberg tables runs natively end to end, and falls back to iceberg-java wherever the native path cannot reproduce its outcome.
Current state.spark.comet.write.iceberg.splitOperator.enabled and spark.comet.iceberg.write.enabled both default to false. Nothing in CI runs with either flag on. Two correctness bugs are open on the native path. The user guide (iceberg-writes.md) still describes the writer as unimplemented in one section.
Describe the potential solution
Phased, in priority order. Each item is a linked issue; check it here when it closes.
Done and merged: #4658 (split-operator plan), #5298 (eligibility detection), #5361 (native writer). Related umbrellas: #5121 (DataSource V2 writes in general), #1625 (native Parquet writes for the V1 path).
The accepted divergences between iceberg-rust and iceberg-java output are documented in iceberg-writes.md; changes to that list belong in the issues above rather than here.
What is the problem the feature request solves?
Native Iceberg writes landed in three parts under #4322: the split writer/committer plan (#4658), the eligibility allowlist with fall-back reasons (#5298), and the iceberg-rust data-file writer with JVM-side manifest metrics (#5361). #4322 closed when #5361 merged, and no issue tracks what remains between "merged behind two off-by-default flags" and "production quality". The open follow-ups exist but are not linked to each other, and several gaps had no issue at all.
This epic is that plan. The goal is unchanged from #4322: an ETL job that scans, transforms, and writes Iceberg tables runs natively end to end, and falls back to iceberg-java wherever the native path cannot reproduce its outcome.
Current state.
spark.comet.write.iceberg.splitOperator.enabledandspark.comet.iceberg.write.enabledboth default tofalse. Nothing in CI runs with either flag on. Two correctness bugs are open on the native path. The user guide (iceberg-writes.md) still describes the writer as unimplemented in one section.Describe the potential solution
Phased, in priority order. Each item is a linked issue; check it here when it closes.
Phase 1: correctness blockers
#in an S3 partition value commits a location iceberg-java resolves to a different key)HadoopFileIO+gs://; fail closed until the translation is completeiceberg-writes.mdPhase 2: failure handling parity with iceberg-java
Phase 3: coverage so common workloads stay native
bucket,truncate,years/months/days/hours) as native expressions, so the default hash-distribution write is native end to end (PR feat: Support Iceberg system functions (bucket, truncate, years/months/days/hours) natively #5638)MergeRowsExecPhase 4: enable by default
Phase 5: performance
Ongoing
Additional context
Done and merged: #4658 (split-operator plan), #5298 (eligibility detection), #5361 (native writer). Related umbrellas: #5121 (DataSource V2 writes in general), #1625 (native Parquet writes for the V1 path).
The accepted divergences between iceberg-rust and iceberg-java output are documented in
iceberg-writes.md; changes to that list belong in the issues above rather than here.