Estamos preparando el PDF de «Formatos columnares y particionado de datos». Se descargará automáticamente en cuanto esté listo.
← Lumbre

Big Data y Procesamiento Distribuido · 6.º Formatos columnares y particionado de datos

Portada de Formatos columnares y particionado de datos

Formatos columnares y particionado de datos

✦ Cómo el formato y la organización en disco determinan cuánto lee una consulta: almacenamiento columnar, podas de lectura, compresión y el problema de los archivos pequeños · Big Data y Procesamiento Distribuido · Ingeniería de Datos · en menos de 10 minutos

Roadwise Consulting

Firmado y verificado · Biblioteca UNIV

Objetivo: Diferenciar almacenamiento por fila y por columna, y aplicar formatos columnares, compresión y particionado para minimizar la lectura en grandes volúmenes.

10 min Big Data y Procesamiento Distribuido · Ingeniería de Datos 18–30 años
Más
Formatos columnares y particionado de datos

Herramientas de la lección

◉ Entrar a La Matrix Sorpréndeme

Sobre este contenido

Ir a

Volver a Big Data y Procesamiento Distribuido · 6.º semestre Cursos Explorar Mi cuenta Salir del modo estudio

Formatos columnares y particionado de datos

Formatos columnares Parquet, ORC y Avro
Video explicativo (inglés): comparación de formatos de archivo row vs columnares y cuándo usar Parquet, ORC o Avro.

Hay dos maneras de guardar una tabla: por filas (todas las columnas de un registro juntas) o por columnas (todos los valores de una columna juntos). Las bases transaccionales guardan por fila; el análisis guarda por columna, porque suele leer unas pocas columnas de millones de filas.

Almacenamiento por fila y por columna

Una lectura que necesita una o dos columnas de toda la tabla, en formato columnar ignora el resto del disco. Además, los valores parecidos quedan contiguos, así que comprimen muchísimo mejor que mezclar columnas distintas.

  • Por fila: ideal para leer/escribir un registro completo (OLTP).
  • Por columna: ideal para agregados sobre muchas filas y pocas columnas.
  • Columnar reduce la E/S y habilita compresión agresiva por tipo.
Diagrama de tres bandas: el almacén organizado en carpetas por partición de fecha; un archivo columnar Parquet con sus grupos de columnas y el pie con estadísticas; abajo las tres optimizaciones de lectura (poda de partición, poda de columnas, pushdown de predicados).
La lectura eficiente combina dónde están los archivos, cómo se guarda cada columna y qué metadatos permite saltarse bloques.

Tres podas que ahorran lectura

  • Poda de partición: una consulta filtrada por fecha solo lee las carpetas de esa fecha.
  • Poda de columnas: se leen únicamente las columnas que el SELECT necesita.
  • Pushdown de predicados: el filtro se aplica al leer, usando las estadísticas del pie de archivo, sin cargar todo a memoria.

Compresión

Los formatos columnares comprimen cada bloque con un códec. Snappy prioriza velocidad de CPU; Zstd equilibra ratio y velocidad; Gzip maximiza compresión pero cuesta al descomprimir. Menos bytes en disco también significa menos E/S.

Particionado de datos en el almacenamiento

Además del formato, conviene particionar los archivos en carpetas por una columna de filtro frecuente, como la fecha (anio=2024/mes=06/...). Así el motor descarta de entrada directorios irrelevantes. El riesgo es particionar por columnas de alta cardinalidad o muy finas, que generan miles de archivos pequeños.

Cada optimización ataca un costo distinto de la lectura.
TécnicaQué haceCuidado
Poda de columnaslee solo las columnas usadasninguno, es barata
Pushdown de predicadosfiltra al leer con el pie de archivono sirve con predicados no sargables
Poda de particiónsalta carpetas irrelevantesdemasiadas particiones = archivos pequeños
Compresiónreduce almacenamiento y E/Sun códec lento eleva la CPU

El problema de los archivos pequeños

Particionar muy fino o escribir micro-lotes crea muchísimos archivos diminutos: el motor gasta más abriendo archivos que leyendo datos, y el almacén se satura de metadatos. La solución es fijar un tamaño de archivo objetivo y compactar periódicamente.

Parquet y ORC

  • Parquet: columnar, con estadísticas por bloque en el pie; amplio soporte multi-motor.
  • ORC: columnar nacido en Hive, con índices y esquema embebido.
  • Ambos comparten la idea: columnas, compresión y pushdown de predicados.

Errores frecuentes

  • Particionar por una columna de altísima cardinalidad como un id.
  • Guardar en formato de fila datos que solo se usan para agregar.
  • Dejar que se acumulen archivos pequeños sin compactación.

Ejemplo resuelto: una consulta lee demasiado

  1. Medir cuántos bytes lee el motor frente a cuántos devuelve.
  2. Confirmar que el filtro principal es por fecha.
  3. Reescribir los datos en Parquet particionado por fecha.
  4. Elegir un códec rápido (snappy o zstd) y un tamaño de archivo objetivo.
  5. Programar compactación para los lotes diarios.

¿Para qué sirve en la realidad?

La mayor parte del costo y del tiempo de una plataforma de datos está en leer datos innecesarios. Elegir formato y partición correctos suele dar más aceleración que ajustar el clúster.

¿Por qué un formato columnar acelera una consulta analítica que agrega pocas columnas?

Particionar por una columna de muy alta cardinalidad suele ser buena idea.

Aplicar el filtro al momento de leer, apoyándose en las estadísticas del pie de archivo, se llama de predicados.

Clasifica cada decisión según si favorece o daña el rendimiento de lectura.

Arrastra cada ficha a su categoría (o tócala y luego toca la categoría). También puedes usar el teclado.

Une cada término con su definición.

      Formatos y particionado

      Guarda los valores de cada columna juntos
      formato columnar
      Saltar carpetas por el filtro de fecha
      partition pruning
      Leer solo columnas del SELECT
      column pruning
      Filtrar al leer usando el pie de archivo
      predicate pushdown
      Miles de archivos diminutos
      small files problem

      Toca una tarjeta para ver la respuesta.

      Formatos columnares y particionado

      • Formatos de datos
        • Fila vs columna
          • columna para analizar
            • mejor compresion
            • Podas
              • particion
                • columnas
                  • pushdown
                  • Almacenamiento
                    • carpetas por fecha
                      • cuidado cardinalidad
                      • Parquet y ORC
                        • pie con estadisticas
                          • compactar small files

                        Una tabla particionada por customer_id (dos millones de valores) hoy tiene millones de archivos de unos cientos de bytes y las consultas empeoraron. ¿Qué cambio de particionado y de formato propondrías y por qué el filtro habitual de tus consultas manda en esa decisión?

                        Tu texto se guarda sólo en este dispositivo.

                        Las respuestas y tu progreso se guardan sólo en este dispositivo. Contenido firmado por su autoría mediante Lumbre.
                        Más sobre esta lección
                        Explora temas relacionados

                        Conceptos

                        Comentarios

                        Inicia sesión para comentar.

                        Todavía no hay comentarios. Sé la primera persona en opinar.