Support Iceberg `SparkCopyOnWriteScan` in `IcebergReflection.ICEBERG_SCAN_CLASSES`

Aperta Adatta ai principianti
#5,319 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub

Nessuno ha ancora preso questa issue.

Valutazione

Difficoltà
2/5
Tempo stimato
1-3 ore
Idoneità per principianti
86/100
Tipo di issue
Funzionalità
Chiarezza
Specificata chiaramente
Stato di attività
Tranquilla
Stack tecnologico
scala

Direzione di ricerca

Apri IcebergReflection.scala e segui come CometScanRule utilizza ICEBERG_SCAN_CLASSES per identificare le scans di Iceberg. Aggiungi il riconoscimento di org.apache.iceberg.spark.source.SparkCopyOnWriteScan, quindi verifica che le scansioni Copy-On-Write di MERGE, UPDATE e DELETE vengano riconosciute per la conversione nativa di Comet.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

area:scan enhancement
What is the problem the feature request solves?

When running Copy-On-Write (CoW) table operations such as MERGE INTO, UPDATE, or DELETE against Iceberg tables in Spark Iceberg's Spark planning extension creates a
SparkCopyOnWriteScan (org.apache.iceberg.spark.source.SparkCopyOnWriteScan) for scanning the target table data files.

Found the gap while testing native iceberg writes #4487

Currently, IcebergReflection.ICEBERG_SCAN_CLASSES only includes:

• org.apache.iceberg.spark.source.SparkBatchQueryScan
• org.apache.iceberg.spark.source.SparkStagedScan

Because SparkCopyOnWriteScan is missing from ICEBERG_SCAN_CLASSES, IcebergReflection.isIcebergScanClass(...) returns false when CometScanRule evaluates a physical plan
containing a SparkCopyOnWriteScan. As a result, Comet fails to recognize SparkCopyOnWriteScan as a supported Iceberg scan and falls back to JVM Spark execution for the scan
phase of Copy-On-Write queries.

Describe the potential solution

Add SparkCopyOnWriteScan ("org.apache.iceberg.spark.source.SparkCopyOnWriteScan") to IcebergReflection.ClassNames and include it in IcebergReflection.ICEBERG_SCAN_CLASSES.

// In IcebergReflection.scala
object ClassNames {
  ...
  val SPARK_COPY_ON_WRITE_SCAN = "org.apache.iceberg.spark.source.SparkCopyOnWriteScan"
}

val ICEBERG_SCAN_CLASSES: Set[String] =
  Set(
    ClassNames.SPARK_BATCH_QUERY_SCAN,
    ClassNames.SPARK_STAGED_SCAN,
    ClassNames.SPARK_COPY_ON_WRITE_SCAN)

This enables CometScanRule to recognize SparkCopyOnWriteScan instances and convert them to native Comet scans during Iceberg Copy-On-Write MERGE, UPDATE, and DELETE
operations.

Additional context

SparkCopyOnWriteScan extends Iceberg's standard Spark scan primitives (SparkBatchQueryScan / SparkScan) and behaves identically with respect to file tasks, table schemas, and
filter pushdowns during data file reads.

Lingua principale
Scala
Stelle
1.3k
Fork
377
Merge medio
2g 13h
PR unite (30g)
244

Guida per i contributori

Apri la guida per i contributori

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di apache/datafusion-comet

Tutte le issue di apache/datafusion-comet

Issue simili

Altre issue su Scala

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.