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

オープン 初心者向け
#3,662 コメント 0 件 リアクション 0 件 担当者 0 名 GitHub で見る

まだ誰も着手していません。

評価

難易度
2/5
見積もり時間
1〜3時間
初心者へのやさしさ
78/100
issue の種類
リファクタリング
明瞭さ
明確に書かれている
活発さ
静か
技術スタック
python
領域
performance

調査の方向性

pyiceberg/avro/file.py の AvroFileHeader.get_schema() から始め、avro_to_iceberg 変換を追跡します。繰り返し同じマニフェストを使って scan().plan_files() を実行し、同じ処理が繰り返されることを観察して、変換結果がスキーマ文字列によって再利用されることを確認します。マニフェスト数が増えるにつれて、プランニングのパフォーマンスが向上します。

索引モデルが issue の本文から書いたものです。

説明

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.

主要言語
Python
スター
1.1k
フォーク
589
平均マージ
2日 4時間
マージ済み PR(30日)
72

コントリビューションガイド

このリポジトリのコントリビューションガイドは索引されていません

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

apache/iceberg-python のほかの issue

apache/iceberg-python の issue をすべて見る

似ている issue

Python の issue をもっと見る

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。