En el manejo de Big Data sabemos la importancia y el peso que tiene la eficiencia en múltiples aspectos de las soluciones y arquitecturas de datos.
Hablamos de eficiencia en tiempos de procesamiento, pero también, en términos de espacio ocupado, y de costos de almacenamiento. Tomar una buena decisión en cuanto a tipos de formatos de datos puede ser vital con respecto a la escalabilidad futura de una solución basada en datos.
Parquet
Apache Parquet es un formato de almacenamiento en columnas que proporciona optimizaciones para acelerar las consultas, es un formato de código abierto (open source) que ofrece alternativas de almacenamiento, codificación, compresión y lenguajes de programación, entre otras.
Un archivo de Apache Parquet está compuesto por tres elementos:
- Row Group: conjunto de filas en formato columnas.
- Column Chunk: de esta forma, los datos de una columna en un grupo se pueden leer de manera independiente para optimizar las lecturas.
- Page: hace referencia al almacenamiento de los datos.
Apache Spark optimiza las lecturas de esta manera, el sistema permite leer los distintos Row Groups que fueron asignados a estos datos en distintas tareas que son distribuidas en el clúster de forma independiente, su funcionamiento se remite a la tarea de optimizar la lectura y el almacenamiento de los datos.
Si selecciona unas columnas específicas, el filtro se envía hacia el lector de Apache Parquet, de forma que este permite leer únicamente esas columnas:
Aunque parezca obvio, los archivo parquet tienen extensión .parquet y a diferencia de un CSV, no es un archivo en texto plano (se representa de forma binaria), lo que significa que no lo podemos abrir y examinar con un simple editor de texto.
¿Qué significa que un formato de datos sea o esté orientado a filas o columnas?
En un archivo CSV cada registro es una fila. En Parquet, es cada columna la que se almacena de forma independiente, la diferencia más extrema la notamos cuándo, en un archivo de tipo CSV, queremos leer solamente una columna. A pesar de que solo queremos acceder a la información de una columna por el tipo de formato, tenemos que leer todas las filas de la tabla.
Pero cuando usamos formato Parquet, cada columna es accesible de forma independiente al resto, como los datos en cada columna se espera que sean del mismo tipo, el formato parquet abre un sin fin de posibilidades a la hora de codificar, comprimir y optimizar el almacenamiento de los datos.
De lo contrario, si lo que queremos es almacenar datos con el objetivo de leer muchas filas completas muy a menudo, el formato parquet nos penalizará en esas lecturas y no seremos eficientes ya que estamos utilizando orientación a columnas para leer filas.
Características técnicas de los archivos Parquet
- Está orientado a columnas y diseñado para brindar un almacenamiento en columnas eficiente en comparación con los tipos de archivos basados en filas, como CSV.
- Los archivos Parquet se diseñaron teniendo en cuenta estructuras complejas de datos anidados.
- Está diseñado para admitir esquemas de compresión y codificación muy eficientes.
- Genera menores costos de almacenamiento para archivos de datos y maximiza la efectividad de las consultas de datos con tecnologías cloud actuales como Amazon Athena, Redshift Spectrum, BigQuery y Azure Data Lakes.
- Licenciado bajo la licencia Apache y disponible para cualquier proyecto.
El formato Parquet se admite para los conectores siguientes:
- Amazon S3
- Almacenamiento compatible con Amazon S3
- Azure Blob
- Azure Data Lake Storage Gen1
- Azure Data Lake Storage Gen2
- Archivos de Azure
- Sistema de archivos
- FTP
- Google Cloud Storage
- HDFS
- HTTP
- Oracle Cloud Storage
- SFTP
¿Para qué se usa Parquet?
Los Data Lakes son el lugar idóneo para el aprovechamiento de los Parquets.
Los Data Lakes son espacios de almacenamiento de archivos distribuidos muy usados hoy en día para crear grandes repositorios de datos corporativos heterogéneos en la nube, a diferencia de un Data Warehouse, un Data Lake no tiene un motor de base de datos subyacente ni existe un modelo relacional de los datos.
Ejemplo práctico de las ventajas de usar Parquet frente a CSV en Data Lakes:
Supongamos que tenemos un conjunto de datos en formato de tabla (4 columnas) que representa las ventas históricas de una empresa durante los últimos 10 años.
Si almacenamos esta tabla en formato CSV en Amazon Web Services S3 veremos que el tamaño que ocupa son 4TB. Si comprimimos este archivo con GZIP veremos que su tamaño se reduce a la cuarta parte (1TB).
Cuando esa misma tabla la almacenamos en el mismo servicio (S3) en formato Parquet, vemos que ocupa lo mismo que el CSV comprimido. Pero además, cuando queramos acceder a una parte de los datos – pongamos 1 sola columna – en el caso del archivo CSV (como hemos comentado anteriormente) tenemos que leer toda la tabla, puesto que es un almacenamiento por filas, sin embargo, como el formato Parquet es un almacenamiento orientado a columnas, podemos leer una sola columna de forma independiente, accediendo sólo a un cuarto de la información de la tabla, con el ahorro en tiempo y en coste que esto supone.
Post original de Thomas Spicer en Medium.com
Una vez que hemos entendido la eficiencia de la lectura de datos usando Parquet debido al acceso columnar de los mismos, podemos entender ahora por qué la mayoría de los servicios de almacenamiento y procesamiento de datos actuales son favorables a Parquet frente a CSV.
Estos servicios en nube para procesamiento de datos son altamente populares entre los profesionales de datos puesto que el analista o científico de datos tan solo se tiene que preocupar del análisis.
Podría parecer que solo los casos de uso más sofisticados y analíticos usan Parquet como formato de referencia, pero son ya muchos equipos en las compañías, que empiezan a usar Parquet desde el origen para sus aplicaciones de Business Intelligence con herramientas para usuarios de negocio (no técnicos) como Power BI o Tableau por nombrar algunos.
Conclusión
La tendencia hacia los servicios de consulta SQL interactivos “sin servidor” y las suites de procesamiento de datos preconstruidas está progresando rápidamente. Si se hace bien, su Data Lake, el formato Parquet puede ofrecer nuevas oportunidades para que los equipos vayan más rápido con inversiones más bajas, independientemente del motor de consulta.
Las características positivas del formato de datos parquet para el almacenamiento y procesado de datos cuando se trata de casos de uso analíticos (machine learning, inteligencia artificial) o con una marcada orientación a columnas (como por ejemplo series temporales).
Nunca habrá una solución perfecta para todas las situaciones. Existen y seguirán existiendo casos de uso orientados a filas, así como existen formatos específicos para almacenar imágenes o mapas. En cualquier caso, no hay duda de que si su aplicación encaja con las características de Parquet, experimentará mejoras importantes de eficiencia si opta por este formato frente a otros más convencionales como CSV.