Apache parquet es un formato de almacenamiento columnar para ecosistemas hadoop, independiente del framework de procesamiento de datos o del lenguaje de programación. Este es similar a otros formatos columnares como RCFile. Este formato provee una compresión eficiente y mejora el desempeño de las consultas. Parquet tiene 3 opciones para la compresión de sus ficheros y son snappy, gzip o ninguno, donde la opción seleccionada influye en el tamaño resultante de los ficheros y en el tiempo que tardará en convertir los ficheros al formato parquet.
Apache Drill tiene la capacidad de leer y escribir en formato parquet y lo demostraré en el siguiente ejemplo. Lo primero que haremos para poder realizar una comparación de uno de los beneficios de parquet (compresión) será utilizar un fichero tsv de un tamaño considerable.
Del sitio http://www.gdeltproject.org/data.html#rawdatafiles descargaremos un fichero zip que dentro de si contiene un TSV de 6,58 GB (el cual cambiaremos de extensión de TXT a tsv). Entonces basándonos en lo visto en el articulo anterior accederemos al fichero usando el plugin dfs. Si queremos darle un vistazo al fichero y sus campos podemos realizar la siguiente consulta:
1 |
SELECT * FROM dfs.`__PATH_TO_FILE__/GDELT-MASTERREDUCEDV2.tsv` LIMIT 20; |
Luego para comenzar con la conversión lo primero que haremos será modificar el formato de almacenamiento de apache drill, de la siguiente manera:
1 2 |
alter session set `store.format`='parquet'; CREATE TABLE dfs.tmp.`/data/parquet_example/`AS SELECT * FROM dfs.`__PATH_TO_FILE__/GDELT-MASTERREDUCEDV2.tsv`; |
La sentencia anterior creará una tabla a la que accederemos utilizando la ruta especificada, será a su vez en esa ruta (en mi caso /tmp/data/parquet_example/) donde podremos observar el resultado de la conversión, un conjunto de ficheros en formato parquet que ahora en su totalidad suman unos 2,6 GB, disminuyendo el espacio ocupado en más de la mitad (el formato de compresión por defecto es snappy). En el caso de haber utilizado gzip la conversión hubiera durado un poco más pero en contraposición los ficheros resultantes ocuparían menor tamaño, en mi caso el resultado fue de 1,3 GB, es decir, apenas un 20% de lo que ocupa el tsv y lo único necesario para utilizar este formato de compresión es cambiar el formato antes de crear la tabla de la siguiente forma:
1 2 |
alter session set `store.parquet.compression`='gzip'; CREATE TABLE dfs.tmp.`/data/parquet_example/`AS select * from dfs.`__PATH_TO_FILE__/GDELT-MASTERREDUCEDV2.tsv`; |
Una vez culminada la conversión ya podremos efectuar consultas sobre la tabla recién creada (en formato parquet)
1 |
SELECT * FROM dfs.tmp.`/data/parquet_example/` LIMIT 20; |