[EPIC] Distributed Execution for Reads/Writes
I maintainer di solito rispondono entro 1 giorno
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 5/5
- Tempo stimato
- Più di una settimana
- Idoneità per principianti
- 35/100
- Tipo di issue
- Funzionalità
- Chiarezza
- Abbastanza chiara
- Stato di attività
- Attiva
- Stack tecnologico
- rust
- Ambito
- data-engineering, databases, distributed-systems
Direzione di ricerca
Start with the merge order and #20: inspect IcebergCommitExec, IcebergWriteExec, IcebergMetadataScan, IcebergTableScan, IcebergTableProvider::new_with_schema, and repartition.rs. Use apache/datafusion-ballista#2217 and the listed iceberg-rust issues to identify dependencies. Done means the selected distributed execution changes are implemented and compatible with Ballista's scheduler and executors.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Goal
Run Iceberg reads and writes in parallel on
Ballista executors. A codec in
another process has to name each node's type, read what it was built from, and
rebuild an equivalent node from those parts alone. This epic tracks the
datafusion-iceberg and iceberg-rust changes that make that work well.
- apache/datafusion-ballista#2638 (
ballista-iceberg, reads only) builds on
this repo'smainand needs nothing below to merge. - apache/datafusion-ballista#2217 is the full read/write integration. Commits
are moving to the Ballista scheduler (apache/datafusion-ballista#2622), where
each commit runs once.
Most of this is likely relevant to datafusion-distributed too, though it's
written from Ballista's perspective. datafusion-distributed keeps its own
DataSourceExec integration (built on WorkUnitFeeds), so it needs the
planned file tasks to be reachable, but not necessarily the grouping below.
If I've missed anything, let me know and I'll update this epic.
Last updated 2026-11-03.
Open
Partitioned scans (highest priority)
IcebergDataSource reports UnknownPartitioning(1), so every scan runs as one
task on one executor, which lists and reads every file. It also limits writes:
Ballista drops round-robin repartitions, so INSERT INTO t SELECT … FROM <iceberg table> into a table with no identity or bucket partition field writes
from a single task.
- #67 (@alexanderbianchi): opt-in eager file planning
(iceberg.eager_file_planning) that groups the planned file tasks into up
totarget_partitionspartitions. Carries apache/iceberg-rust#2671
forward. For Ballista it also needs:- The node exposes its task groups and has a constructor that takes them,
like #20's nodes. Files must be planned once, on the scheduler, and
shipped to executors: re-planning on an executor could produce a
different grouping, since planning order isn't deterministic. - No dependency on an iceberg-rust accessor that
maindoesn't have, such
as #2671'sTableScan::arrow_reader_builder(). - The opt-in setting reaches the Ballista scheduler, or ballista-iceberg
turns it on. - A scan with no files reports one partition, not zero.
- One eager file listing shared with #55 (sort-order reporting), which
also lists data files inTableProvider::scan.
- The node exposes its task groups and has a constructor that takes them,
Writes
- #35 Partitioned INSERT computes partition values from the wrong columns
when the input ends in a projection. PR: #92 - #38 INSERT with fanout disabled always fails:
IcebergWriteExecdeclares
no required input ordering or distribution, so the optimizer removes the
partition sort. A required hash distribution on_partitionwould also
fix the next item. - Hash-partition INSERT input for every partition transform.
repartition.rs
hashes on_partitiononly for identity or bucket fields and otherwise
round-robins, which Ballista drops, so writers produce many small files. - #39 Fanout-disabled writes fail on sorted input (partitions emitted in
HashMaporder). Needed on top of #38. PR: #81 - #19 Accept NOT NULL input columns in partitioned INSERT (closes #27).
- #22 follow-up: unpartitioned tables write NULLs into required columns.
Scans
- #44
convert_filters_to_predicatenegates a weakenedANDand drops
matching rows. PR: #59 - #42
SELECT *fails after a column is added, until the next write. Fixed
in iceberg-rust by apache/iceberg-rust#2904; needs a revision bump here. - Scan statistics: with eager planning, file record counts give row counts
nearly for free (an earlier attempt, apache/iceberg-rust#880, went stale). - Pass the session's
batch_sizeto the reader, and bound per-partition
file-read concurrency once a scan has several partitions per executor. - #58 Expose Parquet read-ahead controls (needs apache/iceberg-rust#3395).
Catalogs and cached schemas
- #24 Query-scoped catalog resolution (@alexanderbianchi). Providers and
their schemas are cached for the catalog provider's lifetime, the cause of
#56 and #57, and a problem for a long-lived scheduler. - #56 INSERT fails after a column is added, until the provider is rebuilt.
- #57 Wrong results and panics after a column is dropped and re-added under
the same name. - #37
CREATE TABLE/DROP TABLEhang on a current-thread runtime and
panic outside one. PR: #45
iceberg-rust (not opened yet, most important first)
- A scan on a runtime that has shut down returns no rows instead of failing.
- The REST catalog never refreshes its OAuth token, so a long-lived
scheduler fails to plan once its token expires. -
Debugoutput ofFileIO/StorageConfigprints storage credentials. - To investigate: whether
FileIOcan refresh catalog-vended storage
credentials during a long job.
Done
- #14
PartitionExprreconstructible (closes #13) - #20 Plan nodes inspectable and rebuildable (closes #28)
- #63
IcebergDataSourcebuilder, replacingnew_with_predicate - #61 Crate renamed back to
iceberg-datafusion(closes #30) - #54 Data files passed from write to commit as Avro instead of JSON
- #65 Forward
enable_page_indexto the scan - #91 Filter pushdown keeps casts (closes #36)
- #46
LIKEprefix pushdown handles escapes (closes #40) - #47 Metadata tables honour the scan projection (closes #41)
- apache/iceberg-rust#3286
with_runtimeon the catalog loader's
BoxedCatalogBuilder - apache/iceberg-rust#3303
strip_metadata_from_schemahandles list and map
columns - apache/iceberg-rust#3406
Table::with_runtime, keeping the manifest cache - apache/iceberg-rust#2904 Scans project the current schema after a schema
change
Dropped
- #48 / #80
IcebergCatalogTableProvider::new_with_schemaand its replacement:
apache/datafusion-ballista#2638 pins catalog-backed tables when the query is
planned and sends their metadata, so no provider is rebuilt from a schema. - Idempotent commits, and apache/iceberg-rust#3372 (idempotency key on
fast_append): commits are moving to the Ballista scheduler, where each runs
once.
- Lingua principale
- Rust
- Stelle
- 30
- Fork
- 30
- Merge medio
- 3g 19h
- PR unite (30g)
- 15
Preparare l'ambiente
Questo progetto non fornisce container di sviluppo, Dockerfile né guida per i contributori, quindi l'ambiente è a tuo carico: parti dal suo README e consulta la nostra guida al primo contributo per i passaggi generali.
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di apache/datafusion-iceberg
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 82/100
apache/datafusion-iceberg#100 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 5/5 Più di una settimana Idoneità per principianti 25/100
apache/datafusion-iceberg#85 · 1 commento · 5 reazioni ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 5/5 Più di una settimana Idoneità per principianti 35/100
apache/datafusion-iceberg#84 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 4/5 3-5 giorni Idoneità per principianti 35/100
apache/datafusion-iceberg#75 ·
I maintainer di solito rispondono entro 1 giorno
-
Slow CI runnersAperta
Difficoltà 4/5 3-5 giorni Idoneità per principianti 18/100
apache/datafusion-iceberg#74 ·
I maintainer di solito rispondono entro 1 giorno
Tutte le issue di apache/datafusion-iceberg
Issue simili
-
🐞 bug 🧩 bevy_gantz_egui
Difficoltà 2/5 1-3 ore Idoneità per principianti 82/100
nannou-org/gantz#500 ·
I maintainer di solito rispondono entro 1 giorno
-
[Feature]: Fedora 45 repoApertaenhancement
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
metasequoiaime/msime#10989 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
fritzprix/libr-agent#2612 ·
I maintainer di solito rispondono entro 1 giorno
-
crate: spate-core priority: low
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
NSPG13/agent-bounties#1749 ·
I maintainer di solito rispondono entro 1 giorno