Hacktoberfest 2026: los issues que los mantenedores marcaron para octubre, abiertos y aptos para principiantes. Explorar issues de Hacktoberfest

MIN/MAX don't unwrap nested encodings inside Dictionary columns

Abierto Apto para principiantes
#26,290 0 comentarios 0 reacciones 0 asignados Ver en GitHub

Los mantenedores suelen responder en 1 día

Nadie ha tomado este issue todavía.

Evaluación

Dificultad
2/5
Tiempo estimado
1-3 horas
Aptitud para principiantes
72/100
Tipo de issue
Error
Claridad
Bien especificado
Estado de actividad
Activo
Stack tecnológico
rust
Área
data

Línea de trabajo

Empieza en la función get_min_max_result_type, donde la rama RunEndEncoded ya recurre a sus valores mientras que la rama Dictionary solo desenvuelve un nivel. Revisa los tests de MIN/MAX para ver cómo se construye y consulta una columna de diccionario o de run-end a través de una MemTable. Se considera terminado cuando max en ambas columnas con codificación anidada devuelve el valor UInt32 plano, tipado como UInt32, con un test que cubra cada caso.

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

bug
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

Lenguaje dominante
Rust
Estrellas
9.4k
Forks
2.5k
Merge medio
4 d 9 h
PR fusionados (30 d)
329

Preparar el entorno

Abrir en Codespaces

Inicia el contenedor de desarrollo del proyecto en tu navegador, con tu propia cuenta de GitHub.

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de apache/datafusion

Todos los issues de apache/datafusion

Issues similares

Más issues de Rust

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.