[Bug] make_dt_interval returns NULL for more than about 1.49 million days, Spark returns the interval
I maintainer di solito rispondono entro 1 giorno
Valutazione
- Difficoltà
- 2/5
- Tempo stimato
- 1-3 ore
- Idoneità per principianti
- 78/100
Direzione di ricerca
L'overflow si trova in make_interval_dt_nano in crates/spark/src/function/datetime/make_dt_interval.rs, intorno alla riga 185, dove days * 24 * 60 viene calcolato in i32. Inizia leggendo quella funzione e i test unitari accanto a essa, poi riproduci il problema con l'SQL presente nella issue. Il lavoro è completato quando numeri di giorni elevati, come 1500000 e 106751991, restituiscono l'intervallo invece di NULL e i test esistenti di make_dt_interval continuano a passare.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
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.
- Lingua principale
- Rust
- Stelle
- 7
- Fork
- 15
- Merge medio
- 16h 43m
- PR unite (30g)
- 26
Preparare l'ambiente
- Nessun Dockerfile né file Docker Compose
- Nessun modello di pull request
- Leggi la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di apache/datafusion-spark
-
enhancement
Difficoltà 2/5 1-3 ore Idoneità per principianti 70/100
apache/datafusion-spark#287 ·
I maintainer di solito rispondono entro 1 giorno
-
enhancement good first issue
Difficoltà 2/5 1-3 ore Idoneità per principianti 80/100
apache/datafusion-spark#266 ·
I maintainer di solito rispondono entro 1 giorno
-
enhancement
Difficoltà 5/5 Più di una settimana Idoneità per principianti 18/100
apache/datafusion-spark#299 ·
I maintainer di solito rispondono entro 1 giorno
-
enhancement
Difficoltà 4/5 3-5 giorni Idoneità per principianti 35/100
apache/datafusion-spark#298 ·
I maintainer di solito rispondono entro 1 giorno
-
enhancement
Difficoltà 4/5 3-5 giorni Idoneità per principianti 48/100
apache/datafusion-spark#297 ·
I maintainer di solito rispondono entro 1 giorno
Tutte le issue di apache/datafusion-spark
Issue simili
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 70/100
storytold/photocraft#15232 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
suhina-daw/suhina-daw#1477 ·
I maintainer di solito rispondono entro 1 giorno
-
parity priority: low ui
Difficoltà 2/5 1-3 ore Idoneità per principianti 62/100
storytold/pdfcraft#7483 · 1 commento ·
I maintainer di solito rispondono entro 2 giorni
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
IngvarConsulting/unica#3097 ·
I maintainer di solito rispondono entro 1 giorno
-
enhancement in-progress
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 64/100