# Parquet

> Un formato que guarda tablas por columna y comprimidas, para que analizar lea mucho menos.

- Nivel: Avanzado
- Temas: Datos
- URL: https://tidbit.legios.com.ar/es/parquet/
- En inglés: [Parquet](https://tidbit.legios.com.ar/parquet/)

**Parquet** (Apache Parquet) es un formato de archivo abierto para tablas, pensado para análisis. Un CSV escribe una tabla fila por fila; Parquet la escribe **columna por columna**: todas las fechas juntas, después todos los montos, después todos los países. Es binario y no texto plano, así que no lo podés abrir con un editor de texto, pero casi todas las herramientas de datos lo leen: Spark, Amazon Athena, pandas, DuckDB y los principales data warehouses.

Guardar por columna rinde dos veces. Primero, una consulta que necesita dos columnas de cincuenta lee solo esas dos y se saltea el resto del archivo. Segundo, los valores de una columna se parecen (los mismos pocos países repetidos millones de veces), así que se comprimen muy bien, muchas veces a una fracción del tamaño del CSV. Cada archivo además anota el mínimo y el máximo de cada columna en cada bloque de filas, así una consulta por marzo puede saltear los bloques que solo tienen enero.

Parquet también guarda el **esquema** adentro del archivo: nombres y tipos de las columnas, así una fecha sigue siendo una fecha y nadie tiene que adivinar. Por eso se volvió el formato por defecto del data lake: motores como Athena cobran por datos escaneados, y pasar logs crudos de CSV o JSON a Parquet puede hacer que la misma consulta sea más rápida y mucho más barata. La contra es que está hecho para escribir una vez y leer muchas; cambiar una sola fila implica reescribir un archivo.

## Una analogía

Un archivero con un cajón por tipo de información en vez de una carpeta por persona. Para sumar el sueldo de todos abrís solo el cajón de sueldos, y como ahí hay nada más que números, entra todo apretado.

## Para quedarse

- Columnar: una consulta lee solo las columnas que necesita.
- Los valores parecidos quedan juntos, así que comprime mucho mejor que un CSV.
- El esquema viaja adentro del archivo, con tipos de verdad.
- Hecho para análisis de escribir una vez y leer muchas, no para editar filas sueltas.

## Para seguir leyendo

- [Introducción a Parquet (documentación de Apache Parquet, en inglés)](https://parquet.apache.org/docs/overview/)
- [Apache Parquet en Wikipedia (en inglés)](https://en.wikipedia.org/wiki/Apache_Parquet)

## Términos relacionados

- [CSV](https://tidbit.legios.com.ar/es/csv/): Un archivo de texto que guarda una tabla: una fila por línea, comas entre valores.
- [Apache Spark](https://tidbit.legios.com.ar/es/apache-spark/): Un motor open source que reparte el trabajo con datos enormes entre muchas máquinas.
- [Amazon Athena](https://tidbit.legios.com.ar/es/amazon-athena/): Corré SQL directo sobre archivos guardados en S3, sin armar ninguna base de datos.
- [Data warehouse](https://tidbit.legios.com.ar/es/data-warehouse/): Una base hecha para analizar: años de historia, de muchas fuentes, en un solo lugar.
- [Data lake](https://tidbit.legios.com.ar/es/data-lake/): Almacenamiento barato donde todos los datos se guardan como archivos crudos.
- [JSON](https://tidbit.legios.com.ar/es/json/): El formato de texto con el que los programas se pasan datos estructurados.
