[Bug] make_dt_interval returns NULL for more than about 1.49 million days, Spark returns the interval
メンテナーはふだん 1 日以内に返信
評価
- 難易度
- 2/5
- 見積もり時間
- 1〜3時間
- 初心者へのやさしさ
- 78/100
調査の方向性
オーバーフローは crates/spark/src/function/datetime/make_dt_interval.rs の make_interval_dt_nano、185行目付近にあり、days * 24 * 60 が i32 で計算されています。まずその関数と、そのすぐ近くにある単体テストを読み、次に issue 内の SQL で再現してください。1500000 や 106751991 のような大きな日数で、NULL ではなくインターバルが返ることを確認し、既存の make_dt_interval テストがすべて通れば完了です。
索引モデルが issue の本文から書いたものです。
説明
Describe the bug
make_dt_interval returns NULL for values that fit in the result. make_interval_dt_nano (make_dt_interval.rs#L185) adds up hours and minutes in i32, so days * 24 * 60 overflows once days is above 1,491,308. The result is a microsecond count in i64, which can hold about 106,751,991 days. Spark does this arithmetic in Long.
To Reproduce
SELECT make_dt_interval(1491308, 0, 0, 0);
-- 1491308 days 0 hours 0 mins 0.000000 secs
SELECT make_dt_interval(1500000, 0, 0, 0);
-- datafusion-spark: NULL
-- Spark 4.2.0: INTERVAL '1500000 00:00:00' DAY TO SECOND
Spark 4.2.0 also returns a value for make_dt_interval(106751991, 0, 0, 0).
Expected behavior
Do the intermediate arithmetic in i64, so that every value that fits in the result is returned.
Additional context
This is separate from #20, which is about what happens on a real overflow (NULL here, an error in Spark). Spark results come from PySpark 4.2.0 with a UTC session.
- 主要言語
- Rust
- スター
- 7
- フォーク
- 15
- 平均マージ
- 16時間 43分
- マージ済み PR(30日)
- 26
環境構築
- Dockerfile・Docker Compose ファイルなし
- プルリクエストのテンプレートなし
- コントリビューションガイドを読む
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
apache/datafusion-spark のほかの issue
-
enhancement
難易度 2/5 1〜3時間 初心者へのやさしさ 70/100
apache/datafusion-spark#287 ·
メンテナーはふだん 1 日以内に返信
-
enhancement good first issue
難易度 2/5 1〜3時間 初心者へのやさしさ 80/100
apache/datafusion-spark#266 ·
メンテナーはふだん 1 日以内に返信
-
enhancement
難易度 5/5 1週間以上 初心者へのやさしさ 18/100
apache/datafusion-spark#299 ·
メンテナーはふだん 1 日以内に返信
-
enhancement
難易度 4/5 3〜5日 初心者へのやさしさ 35/100
apache/datafusion-spark#298 ·
メンテナーはふだん 1 日以内に返信
-
enhancement
難易度 4/5 3〜5日 初心者へのやさしさ 48/100
apache/datafusion-spark#297 ·
メンテナーはふだん 1 日以内に返信
apache/datafusion-spark の issue をすべて見る
似ている issue
-
comp-rbac
難易度 2/5 1〜3時間 初心者へのやさしさ 68/100
ClickHouse/ClickHouse#131875 ·
メンテナーはふだん 1 日以内に返信
-
bug(python): read_transaction raises TypeError on a Rewrite with rewritten indices対応中かも @Borg93 が今日担当しました。 オープンbug
難易度 2/5 1〜3時間 初心者へのやさしさ 75/100
lance-format/lance#11117 ·
メンテナーはふだん 2 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 70/100
storytold/photocraft#15232 · コメント 1 件 ·
メンテナーはふだん 1 日以内に返信
-
forge: fork preflight reads still send `requireCanonical: false`, which Rootstock rejects (-32603)対応中かも @Ynyesto が今日担当しました。 オープン
難易度 2/5 1〜3時間 初心者へのやさしさ 72/100
foundry-rs/foundry#18485 ·
メンテナーはふだん 1 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 70/100
bondybondbond/rushcut#238 · コメント 1 件 ·