MIN/MAX don't unwrap nested encodings inside Dictionary columns
I maintainer di solito rispondono entro 1 giorno
Valutazione
- Difficoltà
- 2/5
- Tempo stimato
- 1-3 ore
- Idoneità per principianti
- 72/100
Direzione di ricerca
Inizia dalla funzione get_min_max_result_type, dove il ramo RunEndEncoded già ricorre nei suoi valori mentre il ramo Dictionary scarta un solo livello. Controlla i test di MIN/MAX per vedere come una colonna dictionary o run-end viene costruita e interrogata tramite una MemTable. È completato quando max su entrambe le colonne a codifica annidata restituisce il valore UInt32 semplice, tipizzato come UInt32, con un test per ciascun caso.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Describe the bug
get_min_max_result_type recurses into RunEndEncoded values but unwraps Dictionary only one level. When a dictionary's values are themselves encoded, MIN/MAX don't reach the plain value type:
| Column type | max(c) |
|---|---|
Dictionary<Int32, RunEndEncoded<Int32, UInt32>> |
Internal error: Min/Max accumulator not implemented for type RunEndEncoded(...) |
Dictionary<Int32, Dictionary<Int32, UInt32>> |
correct value, typed Dictionary(Int32, UInt32) instead of UInt32 |
To Reproduce
arrow_cast can't build these types, so they only come from a TableProvider, e.g. a MemTable:
let values = RunArray::<Int32Type>::try_new(&Int32Array::from(vec![1, 2]), &UInt32Array::from(vec![1, 3]))?;
let column: ArrayRef = Arc::new(DictionaryArray::<Int32Type>::try_new(Int32Array::from(vec![0, 0, 1]), Arc::new(values))?);
// register `column` as `c` in a MemTable `t`, then:
ctx.sql("SELECT max(c) FROM t").await?.collect().await?; // internal error
Expected behavior
Both columns return max(c) = 3 as UInt32, the same as RunEndEncoded<_, Dictionary<_, UInt32>>.
Additional context
Follow-up to https://github.com/apache/datafusion/pull/26248#discussion_r4267916127. Making the Dictionary arm recurse like the RunEndEncoded arm fixes both cases:
DataType::Dictionary(_, values) => get_min_max_result_type(&[values.deref().clone()]),
Willingness to contribute
I plan to contribute a fix for this bug independently
- Lingua principale
- Rust
- Stelle
- 9.5k
- Fork
- 2.5k
- Merge medio
- 4g 14h
- PR unite (30g)
- 315
Preparare l'ambiente
Avvia il container di sviluppo del progetto nel browser, con il tuo account GitHub.
- Nessun Dockerfile né file Docker Compose
- Ha un 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
-
[Bug] atan2 does not normalize -0.0 the way Spark doesForse già presa @spicysharkco l’ha presa 3 giorni fa. Apertabug spark
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
apache/datafusion#26333 ·
I maintainer di solito rispondono entro 1 giorno
-
bug help wanted unparser
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
apache/datafusion#26316 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
Deduplicate bucket computation in width_bucket_interval_mdn_exactForse già presa @nightcityblade l’ha presa 4 giorni fa. Apertaenhancement good first issue help wanted spark tech debt
Difficoltà 2/5 1-3 ore Idoneità per principianti 85/100
apache/datafusion#26307 · 3 commenti ·
I maintainer di solito rispondono entro 1 giorno
-
Use the shared aggr_test_schema in CSV scan tests instead of a local copyForse già presa @med9110 l’ha presa 4 giorni fa. Apertacore enhancement good first issue help wanted tech debt
Difficoltà 2/5 1-3 ore Idoneità per principianti 85/100
apache/datafusion#26306 · 2 commenti ·
I maintainer di solito rispondono entro 1 giorno
-
gcd benchmarks pass number_rows: 0 for 100k-row inputsForse già presa @Subodh-17 l’ha presa 1 giorno fa. Apertabug functions good first issue help wanted tech debt
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 92/100
apache/datafusion#26297 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
Tutte le issue di apache/datafusion
Issue simili
-
Make major, minor, and makedev safe on solarish targetsForse già presa @xtqqczze l’ha presa oggi. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
I maintainer di solito rispondono entro 1 giorno
-
Proxy ignores l5d-retry-http and l5d-retry-grpc conditions that follow a comma and spaceForse già presa @RaphaelFakhri l’ha presa oggi. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 83/100
I maintainer di solito rispondono entro 3 giorni
-
sncast panics when decoding a `u384` valueForse già presa @RaphaelFakhri l’ha presa oggi. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 76/100
foundry-rs/starknet-foundry#4635 ·
I maintainer di solito rispondono entro 3 giorni
-
enhancement
Difficoltà 2/5 1-3 ore Idoneità per principianti 70/100
crmne/omastats#31 · 1 reazione ·
I maintainer di solito rispondono entro 1 giorno
-
area:desktop priority:p2 type:bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
I maintainer di solito rispondono entro 1 giorno