Entendiendo la estructura de un archivo Parquet: Row Groups, Columnas y Metadata

· Parquet Explorer
parquetinternalsingenieria-de-datos

Apache Parquet es uno de esos formatos que puedes usar sin entender sus internos — simplemente funciona. Pero cuando necesitas optimizar el rendimiento de tus consultas, decidir el tamaño de los row groups o elegir la compresión correcta, entender la estructura interna deja de ser opcional.

En este artículo desarmamos un archivo Parquet pieza por pieza para que entiendas qué pasa cuando un motor como DuckDB lee tu archivo, y puedas inspeccionar estos detalles por tu cuenta.

Vista general: el layout físico

Un archivo Parquet tiene tres secciones principales. Comienza y termina con los bytes PAR1 (el magic number que identifica al formato). En el medio están los datos organizados en row groups. Y al final, justo antes del magic number de cierre, está el footer con toda la metadata.

Este diseño tiene una consecuencia importante: para leer un archivo Parquet, lo primero que hace el motor es ir al final del archivo para leer el footer. Desde ahí sabe dónde está cada pieza de datos.

Row Groups: la unidad de paralelismo

Un row group es un subconjunto horizontal de la tabla — contiene un grupo de filas con todas sus columnas. Si tu tabla tiene 10 millones de filas, podría estar dividida en 5 row groups de 2 millones cada uno.

¿Por qué dividir en row groups? Tres razones:

  1. Paralelismo: distintos hilos pueden procesar row groups diferentes simultáneamente.
  2. Predicado pushdown: cada row group almacena estadísticas (mínimo, máximo, cuenta de nulos) para cada columna. Si tu consulta filtra por WHERE fecha > '2026-01-01' y un row group tiene como máximo 2025-12-31, ese row group completo se salta.
  3. Uso de memoria controlado: al procesar un row group a la vez, no necesitas cargar todo el archivo en memoria.

El tamaño por defecto es 128 MB sin comprimir. Para la mayoría de los casos funciona bien.

¿Quieres ver cuántos row groups tiene tu archivo, qué compresión usa y cuáles son las estadísticas? Con Parquet Explorer el inspector de metadata te muestra todo esto visualmente: codecs de compresión, conteo de filas, estadísticas min/max y null count por columna. Solo arrastra tu archivo.

Column Chunks y Páginas

Dentro de cada row group, los datos de cada columna se almacenan en un column chunk. Si tu consulta solo necesita 3 de 50 columnas, el motor lee solo esos 3 column chunks por row group.

Cada column chunk se divide en páginas (pages) de ~1 MB, la unidad mínima de I/O. Hay páginas de datos (con los valores, definition levels y repetition levels), páginas de diccionario (para dictionary encoding) y data pages v2 (una versión optimizada).

Esquemas anidados: STRUCT, LIST y MAP

Una característica poderosa que muchos desconocen es el soporte para tipos anidados:

  • STRUCT: sub-campos, como direccion.calle, direccion.ciudad.
  • LIST: listas de valores, como tags: ["urgente", "revisado"].
  • MAP: pares clave-valor.

Estos tipos permiten representar estructuras JSON-like dentro de un formato columnar eficiente. Visualizarlos en una terminal es complicado. El visor de esquema de Parquet Explorer los muestra como un árbol interactivo donde puedes expandir y colapsar cada nivel.

Encodings: cómo se codifican los datos

Antes de comprimir, Parquet aplica codificaciones que representan los datos de forma más eficiente:

  • Dictionary Encoding: para columnas con pocos valores únicos. Una columna estado con 3 valores posibles en 10 millones de filas guarda un diccionario de 3 entradas y millones de índices enteros (mucho menos espacio).
  • Run-Length Encoding (RLE): para secuencias repetidas. [A, A, A, B, B] se convierte en [(A, 3), (B, 2)].
  • Delta Encoding: para secuencias numéricas. En lugar de [1000, 1001, 1003], almacena [1000, +1, +2].
  • Byte Stream Split: para punto flotante, separa los bytes en streams independientes para mejor compresión.

Compresión: la capa final

Después de la codificación, se aplica compresión por página (no por archivo completo), lo que permite descomprimir solo lo necesario:

AlgoritmoVelocidadRatioUso típico
SnappyMuy rápidaModeradoValor por defecto
ZSTDRápidaMuy buenoMejor balance general
GZIPModeradaBuenoCompatibilidad amplia

Cuando creas o conviertes archivos con Parquet Explorer, eliges entre Snappy, Zstd y Gzip. Y el inspector de metadata te muestra qué codec se usó en cada column chunk del archivo resultante.

El footer contiene toda la metadata que hace posible la lectura eficiente:

  • Esquema: nombres de columna, tipos de dato, estructura anidada.
  • Row group metadata: ubicación, número de filas, tamaño total.
  • Column chunk metadata: ubicación, codec, tamaño comprimido/sin comprimir.
  • Estadísticas: min, max, cuenta de nulos y valores distintos por columna por row group.

El inspector de metadata de Parquet Explorer te muestra todo esto de forma visual y organizada — la forma más directa de entender la estructura interna de cualquier archivo sin escribir código.

Cómo todo esto acelera tus consultas

Ejemplo concreto: archivo con 100 columnas, 500 millones de filas, 50 row groups.

SELECT AVG(precio) FROM ventas WHERE categoria = 'electrónica';

Lo que pasa internamente:

  1. Lee el footer (una lectura al final del archivo).
  2. Identifica columnas necesarias: solo precio y categoria — 2 de 100 column chunks por row group.
  3. Revisa estadísticas de categoria en cada row group. Si alguno no contiene “electrónica” en su rango min/max, lo salta.
  4. Lee y descomprime solo los column chunks y páginas relevantes.
  5. Ejecuta el filtro y la agregación en memoria.

Cada capa del diseño contribuye. Y con el data profiler de Parquet Explorer puedes revisar las estadísticas de tus columnas para anticipar cuántos row groups se van a filtrar antes de ejecutar la consulta.

Conclusión

La estructura de Parquet no es casual — cada decisión de diseño contribuye a resolver un problema específico de rendimiento en cargas analíticas. Entender estos internos te permite elegir el tamaño adecuado de row groups, la compresión correcta y cómo particionar tus datos.

Y con herramientas como Parquet Explorer que te muestran el esquema con tipos anidados, la metadata de row groups, los codecs de compresión, las estadísticas por columna y el perfilado automático de datos — todo visual y sin instalar nada — inspeccionar la estructura interna de tus archivos es algo que puedes hacer en segundos.