Apache Parquet es un formato de almacenamiento de datos orientado a columnas, gratuito y de código abierto, dentro del ecosistema Apache Hadoop, inspirado en el sistema de consultas interactivas ad hoc Google Dremel para el análisis de datos anidados de solo lectura. [ 3 ] Es similar a RCFile y ORC , otros formatos de archivo de almacenamiento en columnas en Hadoop , y es compatible con la mayoría de los marcos de procesamiento de datos de Hadoop . Proporciona esquemas de compresión y codificación de datos con un rendimiento mejorado para manejar grandes volúmenes de datos complejos.
Historia
El proyecto de código abierto para construir Apache Parquet comenzó como un esfuerzo conjunto entre Twitter [ 4 ] y Cloudera [ 5 ] utilizando el algoritmo de trituración y ensamblaje de registros [ 6 ] descrito en Dremel de Google. [ 7 ] Parquet fue diseñado como una mejora del formato de almacenamiento columnar Trevni creado por Doug Cutting , el creador de Hadoop. El nombre 'parquet' ( lit. ' pequeño compartimento ' ) se refiere a un estilo de piso decorativo y fue elegido para "evocar la capa inferior de una base de datos con un diseño interesante". [ 8 ] La primera versión, Apache Parquet 1.0, se lanzó en julio de 2013. Desde el 27 de abril de 2015, Apache Parquet ha sido un proyecto de alto nivel patrocinado por la Apache Software Foundation (ASF). [ 9 ] [ 10 ]
Características
Apache Parquet se implementa utilizando el algoritmo de fragmentación y ensamblaje de registros, [ 11 ] que admite las estructuras de datos complejas que se pueden utilizar para almacenar datos. [ 12 ] Los valores en cada columna se almacenan en ubicaciones de memoria contiguas, lo que proporciona los siguientes beneficios: [ 13 ]
- La compresión por columnas es eficiente en cuanto al espacio de almacenamiento.
- Se pueden utilizar técnicas de codificación y compresión específicas para el tipo de datos en cada columna.
- Las consultas que obtienen valores de columnas específicas no necesitan leer la fila completa, lo que mejora el rendimiento.
Apache Parquet se implementa utilizando el marco Apache Thrift , lo que aumenta su flexibilidad; puede trabajar con varios lenguajes de programación como C++ , Java , Python , PHP , etc. [ 14 ]
A partir de agosto de 2015, [ 15 ] Parquet admite los marcos de procesamiento de big data, incluidos Apache Hive , Apache Drill , Apache Impala , Apache Crunch , Apache Pig , Cascading , Presto y Apache Spark . Es uno de los formatos de datos externos utilizados por la biblioteca de manipulación y análisis de datos pandas de Python .
Compresión y codificación
En Parquet, la compresión se realiza columna por columna, lo que permite utilizar diferentes esquemas de codificación para texto y datos enteros. Esta estrategia también deja la puerta abierta a la implementación de esquemas de codificación más nuevos y mejores a medida que se vayan inventando.
Parquet admite varios formatos de compresión: snappy , gzip , LZO , brotli , zstd y LZ4 . [ 16 ]
Codificación de diccionario
Parquet tiene una codificación de diccionario automática habilitada dinámicamente para datos con un número pequeño de valores únicos (es decir, menos de 10⁵ ) que permite una compresión significativa y aumenta la velocidad de procesamiento. [ 17 ]
Empaquetamiento de bits
El almacenamiento de números enteros generalmente se realiza con 32 o 64 bits dedicados por entero. Para enteros pequeños, agrupar varios enteros en el mismo espacio hace que el almacenamiento sea más eficiente. [ 17 ]
Codificación de longitud de ejecución (RLE)
Para optimizar el almacenamiento de múltiples ocurrencias del mismo valor, se utiliza la codificación de longitud de ejecución , en la que un único valor se almacena una sola vez junto con el número de ocurrencias. [ 17 ]
Parquet implementa un sistema híbrido de empaquetamiento de bits y RLE, en el que la codificación cambia según cuál produzca los mejores resultados de compresión. Esta estrategia funciona bien para ciertos tipos de datos enteros y se combina bien con la codificación de diccionario. [ 17 ]
Almacenamiento en la nube y lagos de datos
Parquet se utiliza ampliamente como formato de archivo subyacente en las arquitecturas modernas de lagos de datos basados en la nube . Los sistemas de almacenamiento en la nube como Amazon S3, Azure Data Lake Storage y Google Cloud Storage suelen almacenar datos en formato Parquet debido a su eficiente representación columnar y capacidades de recuperación. [ 18 ] Los marcos de trabajo de data lakehouse, incluidos Apache Iceberg , [ 19 ] Delta Lake, [ 20 ] y Apache Hudi [ 21 ] , construyen una capa de metadatos adicional sobre los archivos Parquet para admitir características como la evolución del esquema, las consultas de viaje en el tiempo y las transacciones compatibles con ACID . En estas arquitecturas, los archivos Parquet sirven como la capa de almacenamiento inmutable, mientras que los formatos de tabla gestionan el versionado de datos y la integridad transaccional.
Comparación
Apache Parquet es comparable a los formatos de archivo RCFile y Optimized Row Columnar (ORC) ; los tres pertenecen a la categoría de almacenamiento de datos columnar dentro del ecosistema Hadoop. Todos ofrecen una mejor compresión y codificación, con un rendimiento de lectura mejorado, aunque a costa de una escritura más lenta. Además de estas características, Apache Parquet admite una evolución limitada del esquema [ 22 ] , es decir, el esquema se puede modificar según los cambios en los datos. También permite añadir nuevas columnas y fusionar esquemas que no entren en conflicto [ 22 ] .
Apache Arrow está diseñado como un complemento en memoria para formatos columnares en disco como Parquet y ORC. Los proyectos Arrow y Parquet incluyen bibliotecas que permiten leer y escribir entre ambos formatos. [ 23 ]
Implementaciones
Entre las implementaciones conocidas de Parquet se incluyen:
- Apache Parquet (Java)
- Apache Arrow Parquet (C++)
- Parquet Apache Arrow (óxido)
- Apache Arrow Parquet (Go)
- Parquet Apache Arrow (R)
- jorgecarleitao/parquet2 (Óxido)
- Parquet cuDF (C++)
- fastparquet (Python)
- Apache Impala Parquet (C++)
- DuckDB Parquet (C++)
- Parquet Polars (Óxido)
- Velox Parquet (C++)
- parquet-go (ex-segmentio) (Go)
- parquet-go (xitongsys) (Go)
- Hiparque (JS)
- Madera dura (Java)
Véase también
- Flecha Apache
- Cerdo Apache
- Colmena Apache
- Apache Impala
- Perforadora Apache
- Kudu Apache
- Apache Spark
- Ahorro Apache
- Trino (motor de consultas SQL)
- Presto (motor de consultas SQL)
- Sistema de base de datos embebida SQLite
- Base de datos OLAP integrada DuckDB con soporte para Parquet
Referencias
- ↑ "Formato Parquet de Apache – Versiones" . Apache.org . Consultado el 18 de abril de 2026 .
- ↑ "Código fuente de Parquet-MR" . GitHub . Archivado del original el 11 de junio de 2018. Consultado el 2 de julio de 2019 .
- ↑ Melnik, Sergey; Gubarev, Andrey; Long, Jing Jing; Romer, Geoffrey; Shivakumar, Shiva; Tolton, Matt; Vassilakis, Theo (2010). "Dremel: análisis interactivo de conjuntos de datos a escala web" . Actas de la Fundación VLDB . 3 ( 1–2 ): 330–339 . doi : 10.14778/1920841.1920886 . ISSN 2150-8097 .
- ↑ "Fecha de lanzamiento" . Archivado del original el 20 de octubre de 2016. Consultado el 12 de septiembre de 2016 .
- ↑ "Presentamos Parquet: Almacenamiento columnar eficiente para Apache Hadoop - Blog de ingeniería de Cloudera" . 13 de marzo de 2013. Archivado del original el 4 de mayo de 2013. Consultado el 22 de octubre de 2018 .
- ↑ "Dremel: Análisis interactivo de conjuntos de datos a escala web" . research.google . Consultado el 5 de noviembre de 2025 .
- ↑ "Motivación" . Apache Parquet . Consultado el 5 de noviembre de 2025 .
- ↑ "Capítulo I: El nacimiento de Parquet - El blog de tinta simpática" . 24 de enero de 2024. Archivado del original el 18 de marzo de 2025. Consultado el 23 de julio de 2025 .
- ↑ Yegulalp, Serdar (28 de abril de 2015). "Apache Parquet allana el camino para un mejor almacenamiento de datos de Hadoop" . InfoWorld . Archivado del original el 31 de mayo de 2017. Recuperado el 21 de mayo de 2017 .
- ↑ "La Fundación de Software Apache anuncia Apache™ Parquet™ como un proyecto de nivel superior : Blog de la Fundación de Software Apache" . 27 de abril de 2015. Archivado del original el 20 de agosto de 2017. Consultado el 21 de mayo de 2017 .
- ↑ "Los algoritmos de franjas y ensamblaje del artículo de Dremel inspirado en Google" . github . Archivado del original el 26 de octubre de 2020. Recuperado el 13 de noviembre de 2017 .
- ↑ "Documentación de Apache Parquet" . Archivado del original el 5 de septiembre de 2016. Consultado el 12 de septiembre de 2016 .
- ↑ "Apache Parquet Cloudera" . Archivado del original el 19 de septiembre de 2016. Consultado el 12 de septiembre de 2016 .
- ↑ "Apache Thrift" . Archivado del original el 12 de marzo de 2021. Consultado el 14 de septiembre de 2016 .
- ↑ "Marcos de trabajo compatibles" . Archivado del original el 2 de febrero de 2015. Consultado el 12 de septiembre de 2016 .
- ↑ "Compresión Parquet" . Documentación de Apache Parquet . Apache Software Foundation. 11 de marzo de 2024. Consultado el 2 de diciembre de 2024 .
- 1 2 3 4 "Anuncio de Parquet 1.0: Almacenamiento columnar para Hadoop | Blogs de Twitter" . blog.twitter.com . Archivado del original el 20 de octubre de 2016. Consultado el 14 de septiembre de 2016 .
- ↑ "Apache Parquet" . Apache Parquet . Consultado el 13 de marzo de 2025 .
- ↑ "Iceberg Apache" . Consultado el 13 de marzo de 2025 .
- ↑ "Lago Delta" . Consultado el 13 de marzo de 2025 .
- ↑ «Apache Hudi» . Consultado el 13 de marzo de 2025 .
- 1 2 "Todo sobre Parquet Parte 04 — Evolución del esquema en Parquet". Medium. https://medium.com/data-engineering-with-dremio/all-about-parquet-part-04-schema-evolution-in-parquet-c2c2b1aa6141
- ↑ "Lectura y escritura del formato Apache Parquet". Documentación de Apache Arrow. https://arrow.apache.org/docs/python/parquet.html
Enlaces externos
- Sitio web oficial

- El formato Parquet y las oportunidades de optimización del rendimiento en YouTube
- Papel Dremel
- Software de 2015
- Proyectos de la Apache Software Foundation
- computación en la nube
- Software de sistema gratuito
- Apache Hadoop
- Software que utiliza la licencia Apache.
- Formatos abiertos