Avro schema is re-converted to an Iceberg schema on every manifest read during scan planning

Offen Anfängerfreundlich
#3,662 0 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Dieses Issue hat noch niemand übernommen.

Bewertung

Schwierigkeit
2/5
Geschätzter Aufwand
1-3 Stunden
Anfängerfreundlichkeit
78/100
Issue-Typ
Refactoring
Klarheit
Klar beschrieben
Aktivitätsstatus
Ruhig
Tech-Stack
python
Bereich
performance

Rechercherichtung

Beginnen Sie in pyiceberg/avro/file.py bei AvroFileHeader.get_schema() und verfolgen Sie die avro_to_iceberg-Konvertierung. Verwenden Sie scan().plan_files() mit wiederholten Manifesten, um die wiederholte Arbeit zu beobachten und zu bestätigen, dass Konvertierungsergebnisse anhand der Schemazeichenfolge wiederverwendet werden, wobei sich die Planungsleistung mit zunehmender Manifestanzahl verbessert.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Beschreibung

Feature Request / Improvement

AvroFileHeader.get_schema() (pyiceberg/avro/file.py) runs the full avro_to_iceberg conversion every time an
Avro file is opened.

The inefficiency

  • Every manifest under a spec embeds an identical Avro schema string.
  • So during scan planning, that same conversion is repeated once per manifest.
  • The cost grows with the manifest count, even though only a couple of distinct schemas are ever involved.

Proposed fix

  • The conversion depends only on the schema string, so the result can be cached (keyed on that string).

Measured impact

  • scan().plan_files() on an unpartitioned 150-manifest table: ~86 ms → ~48 ms (~1.8× faster).
  • The saving grows as the number of manifests increases.

I am willing to contribute for this improvement.

Vorherrschende Sprache
Python
Sterne
1.1k
Forks
589
Ø Merge
2 T. 4 Std.
Gemergte PRs (30 T.)
72

Beitragsleitfaden

Für dieses Repository ist kein Beitragsleitfaden indexiert

Erste Schritte

  1. Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
  3. Forken Sie das Repository und arbeiten Sie in einem Branch.
  4. Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.

Mehr aus apache/iceberg-python

Alle Issues in apache/iceberg-python

Ähnliche Issues

Weitere Issues zu Python

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.