`IcebergTableScan` ignores the session's `batch_size`
メンテナーはふだん 1 日以内に返信
まだ誰も着手していません。
評価
調査の方向性
crates/datafusion/src/read/scan.rsから始め、IcebergDataSource::openからget_batch_streamまでを追い、セッションのバッチサイズがTableScanBuilderにどのように渡されるかを確認してください。このissueには、設定されたサイズを渡してwith_batch_sizeを呼び出す変更案が含まれています。スキャンが常に1,024行のバッチを使用するのではなく、datafusion.execution.batch_sizeに従うようになれば完了です。
索引モデルが issue の本文から書いたものです。
説明
IcebergDataSource::open does not pass execution.batch_size from the session config to get_batch_stream:
get_batch_stream never calls TableScanBuilder::with_batch_size:
So scans always read arrow-rs's default of 1,024-row batches. That's an eighth of DataFusion's default of 8,192, and SET datafusion.execution.batch_size has no effect on them.
Suggested fix:
--- a/crates/datafusion/src/read/scan.rs
+++ b/crates/datafusion/src/read/scan.rs
@@ -195,6 +195,7 @@ impl DataSource for IcebergDataSource {
.execution
.parquet
.enable_page_index,
+ context.session_config().batch_size(),
);
let stream = futures::stream::once(fut).try_flatten();
@@ -281,6 +282,7 @@ async fn get_batch_stream(
column_names: Option<Vec<String>>,
predicate: Option<Predicate>,
enable_page_index: bool,
+ batch_size: usize,
) -> Result<Pin<Box<dyn Stream<Item = Result<RecordBatch>> + Send>>> {
let scan_builder = match snapshot_id {
Some(snapshot_id) => table.scan().snapshot_id(snapshot_id),
@@ -296,6 +298,7 @@ async fn get_batch_stream(
}
let table_scan = scan_builder
.with_row_selection_enabled(enable_page_index)
+ .with_batch_size(Some(batch_size))
.build()
.map_err(to_datafusion_error)?;
- 主要言語
- Rust
- スター
- 33
- フォーク
- 34
- 平均マージ
- 4日 14時間
- マージ済み PR(30日)
- 10
環境構築
このプロジェクトには開発コンテナ、Dockerfile、コントリビューションガイドがありません。まず README を読み、一般的な手順ははじめてのコントリビューションガイドを参照してください。
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
apache/datafusion-iceberg のほかの issue
-
難易度 4/5 3〜5日 初心者へのやさしさ 55/100
apache/datafusion-iceberg#101 ·
メンテナーはふだん 1 日以内に返信
-
難易度 5/5 1週間以上 初心者へのやさしさ 25/100
apache/datafusion-iceberg#85 · コメント 1 件 · リアクション 5 件 ·
メンテナーはふだん 1 日以内に返信
-
難易度 5/5 1週間以上 初心者へのやさしさ 35/100
apache/datafusion-iceberg#84 ·
メンテナーはふだん 1 日以内に返信
-
難易度 4/5 3〜5日 初心者へのやさしさ 35/100
apache/datafusion-iceberg#75 ·
メンテナーはふだん 1 日以内に返信
-
Slow CI runnersオープン
難易度 4/5 3〜5日 初心者へのやさしさ 18/100
apache/datafusion-iceberg#74 ·
メンテナーはふだん 1 日以内に返信
apache/datafusion-iceberg の issue をすべて見る
似ている issue
-
難易度 2/5 1〜3時間 初心者へのやさしさ 82/100
RustCrypto/utils#1597 ·
メンテナーはふだん 1 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 68/100
メンテナーはふだん 1 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 68/100
max-sixty/worktrunk#4727 · コメント 7 件 · リアクション 1 件 ·
メンテナーはふだん 1 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 86/100
メンテナーはふだん 1 日以内に返信
-
follow-up
難易度 2/5 1〜3時間 初心者へのやさしさ 73/100
carrick-sh/carrick#1859 ·
メンテナーはふだん 1 日以内に返信