Apache Parquet: Almacenamiento eficiente de datos a gran escala

Apache Parquet es un formato de archivo de código abierto, disponible para cualquier proyecto en el ecosistema de Hadoop. Construido desde cero, fue desarrollado para el almacenamiento de datos basado en columnas con el objetivo de admitir esquemas de compresión y codificación de grandes cantidades de datos, proporcionando una mayor eficiencia en comparación con los archivos basados en filas, como el CSV.
Parquet tiene una organización interna de los datos muy similar a la de una tabla de RDBMS (Sistema de Gestión de Bases de Datos Relacionales, por sus siglas en inglés:Relational Database Management System), con filas y columnas. A diferencia de esta tabla, los datos en Parquet se almacenan uno al lado del otro. Debido a su estructura columnar, proporciona una mejor compactación y rendimiento al trabajar con grandes cantidades de datos.
En este artículo, conoceremos un poco la estructura de un archivo Parquet, haremos una comparación sencilla entre archivos CSV y Parquet, y destacaremos algunas ventajas de utilizar este formato.
¿Qué es Apache Parquet?
Apache Parquet es un archivo de formato binario que permite almacenar datos utilizando algunos tipos específicos, como: BOOLEAN, INT32, INT64, INT96, FLOAT, DOUBLE y BYTE_ARRAY. Los metadatos en Parquet, incluyendo el esquema y la estructura, se integran individualmente en cada archivo, lo que convierte a Apache Parquet en un formato de archivo autodescriptivo.
Los metadatos de un archivo Parquet contienen información como la versión, el esquema, el tipo, entre otros puntos importantes, y siempre se graban después de los datos. Según la documentación de Apache Parquet, este formato está diseñado explícitamente para separar los metadatos de los datos. Cuando esto ocurre, es posible referenciar varios archivos Parquet. De esta manera, tendremos los datos en varios archivos donde se pueden leer en paralelo, es decir, al mismo tiempo.
Los metadatos se segmentan en tres partes: metadatos de archivo (FileMetaData), metadatos de columna (ColumnMetaData) y metadatos de encabezado de página (PageHeader). En el caso de los metadatos de archivos, se almacenan en el pie de página de cada archivo y contienen la siguiente información:
- Versión del formato Parquet.
- Esquema de datos.
- Metadatos de la columna (tipo, número de valores, ubicación, codificación).
- Número de grupos de filas.
- Pares de valor-clave adicionales.
Se espera que la lectura de un archivo Parquet se realice inicialmente a través de los metadatos. Así, será posible localizar e identificar solo las columnas que son de interés para el lector.
Apache Parquet vs. CSV
El formato CSV es uno de los más utilizados actualmente y su estructura es muy similar a la de una tabla de RDBMS con columnas y filas. La primera línea del archivo forma el encabezado y la separación interna se puede hacer por coma (,), punto y coma (;) o TAB (carácter vacío).
Herramientas como Google Sheets y Excel se pueden utilizar para crear un archivo CSV. Sin embargo, a pesar de ser uno de los formatos más utilizados para la creación de archivos, existen algunas desventajas al trabajar con él. Un ejemplo de esta situación puede ocurrir al utilizar servicios que cobran en base a los datos consultados, la cantidad de datos almacenados y el tiempo, como Amazon Athena, Amazon S3 y Google Dataproc.
Databricks realizó una comparación de rendimiento y ahorro de espacio con el mismo conjunto de datos utilizando los formatos Parquet y CSV.
Archivo | Espacio utilizado | Tiempo de ejecución |
---|---|---|
CSV | 1 TB | 236 segundos |
Apache Parquet | 130 GB | 6,78 segundos |
A partir de esta comparación, fue posible verificar un ahorro en recursos de almacenamiento del 87% y una reducción significativa en el tiempo de ejecución de las consultas cuando utilizamos el formato Parquet.
Ventajas
- Consultas dirigidas: Las consultas se pueden realizar directamente en columnas específicas, en lugar de realizar una búsqueda en todos los datos de los archivos. Esto se debe a que los archivos Parquet son autodescriptivos. A través del archivo de metadatos, es posible identificar solo las columnas que tienen relevancia para la consulta.
- Compresión eficiente: La compresión se realiza columna por columna y se puede realizar utilizando uno de los varios códecs disponibles. Fue diseñada para ofrecer soporte a opciones flexibles de compresión y esquemas de codificación extensibles por tipo de dato, es decir, una codificación diferente puede aplicarse para comprimir columnas con datos de distintos tipos.
- Evolución del esquema: Al utilizar el formato columnar como Parquet, es posible evolucionar el esquema. Inicialmente se puede crear un archivo con pocas columnas y, gradualmente, ir añadiendo más columnas al esquema, pudiendo tener varios archivos con esquemas diferentes y compatibles entre sí.
- Tipos de datos mapeados: Con los tipos de datos mapeados, es posible identificar fácilmente con qué datos estamos trabajando, si son texto, números u otros. Sin embargo, al ser de formato binario, no es posible leer los datos de un archivo Parquet sin utilizar una herramienta externa, a diferencia del CSV.
Conclusión
En este artículo, hemos conocido un poco sobre el proyecto Apache Parquet, que es un formato de archivo de código abierto y orientado por columnas.
El formato de almacenamiento columnar hace que Parquet sea bastante eficiente a la hora de almacenar y analizar grandes volúmenes de datos. Esto se debe a que, al ejecutar una consulta, podemos concentrarnos solo en la información relevante, minimizando significativamente la cantidad de datos que necesitan ser procesados.
Otra característica interesante de este formato es la posibilidad de utilizar esquemas de compresión específicos para cada columna. Este recurso aumenta de forma significativa la eficiencia y el ahorro en recursos de almacenamiento.
Para saber más, sigue las novedades en la página del proyecto Apache Parquet y en nuestros cursos aquí en Alura.
Articulo Adaptado y Traduzido por Iara Martínez.