[PowerBi] Dos formas de obtener .parquet combinados

Hace no mucho tiempo Power bi ha incorporado soporte para la lectura de archivos Parquet evitando la creación de enormes funciones en power query para intentar llegar a dichos datos. La parte más atractiva de la extensión es leerla desde un Azure Data Lake puesto que sería más probable que los datos estuvieran almacenados allí.

Recientemente un compañero tuvo un inconveniente para conectarlo de forma tradicional y nativa. El "combinar" automático de Power Query no funcionaba. Fue entonces como llegue a una segunda forma de combinar los archivos parquet de una única tabla. 

Éste artículo muestra como conectarnos a archivos parquet de un Azure Data Lake Gen2 en una carpeta que representa una sola tabla en dos formas distintas.

Antes de iniciar en los métodos específicos vamos a contextualizar brevemente lo necesario para conectarnos a un Data Lake. La conexión puede representarse de dos formas. Mediante una key generada por el administrador o mediante Azure Active Directory.

NOTA: es importante que si vamos por la segunda opción tengamos los permisos necesarios. Rol "Blob Data [contributor, reader, owner]" en el IAM de nuestro recurso en Azure y lectura en el Storage Explorer para el path que vamos a leer desde Power Bi. Más detalles: https://docs.microsoft.com/en-us/power-query/connectors/datalakestorage

Para conectarnos debemos obtener el path de la carpeta desde el Storage explorar correspondiente a DFS URL.

image

Es importante que sea el DFS porque el blob URL no será reconocido por Power Bi para conectarse.

Primer Método

Esta sería la forma convencional bajo la cual funciona la conexión a una carpeta en Power Bi. Obtenemos datos de Azure Data Lake Gen2 pegando la dirección y al momento de la vista previa de lectura podemos dar "Combinar" en la navegación para que nos genere el código automático de conexión.

image

De ese modo iremos directo al Editor de consultas con todas las funciones que genera automáticamente Power Bi para combinar los datos. 

Si prestamos atención, el modo de combinar los datos consiste en llamar una función personalizada "Transform File" en cada fila mediante una nueva columna (Table.AddColumn)

image

De esa forma luego expande los datos y llega al resultado esperado.

Segundo Método

Por alguna razón he visto a ese primer método fracasar en un par de oportunidades. No sabría decir si sigue algo en preview por detrás o que sucede. La cuestión es que ese pantallazo de resolución que hace Power Query me invitó a darle otro ángulo más creativo.

Si intentamos conectar un solo archivo parquet con el conector de parquet nativo de Power Bi, el motor llamará a una transformación de archivo binary en  "Parquet.Document". Aprovechando ese aprendizaje vamos a manipular el contenido Power Query. En lugar de Combinar los archivos al leerlos, simplemente vamos a "Transform Data" para abrir el editor de consultas. Una vez allí vamos a dar click derecho en la columna que contiene los Binary y los transformamos en Json.

image

¿Por qué Json? no hay una razón particular, simplemente queremos que el motor genere el código que vamos a usar para nutrir nuestra transformación. Hoy en día Power Bi Desktop no tiene incorporada la transformación Parquet en la UI pero si en el motor.

Este nuevo paso de transformación a JSON va a generar el siguiente código:

= Table.TransformColumns(Source,{{"Content", Json.Document}})

Nuestra tarea será simplemente cambiar la palabra Json por Parquet para formar la misma transformación que vemos al leer un único archivo parquet que es "Parquet.Document".

El código final se vería así generando que nuestros archivos binary se transformen en table.

image

A partir de ese momento podemos expandir el contenido de las tablas exactamente como lo haría el motor automáticamente en el Método anterior.

Esta forma termina dejando un código más limpio puesto que no genera varias funciones y samples que hace automáticamente el motor, sino que todo el código queda bajo una única query.

NOTA: es importante cambiar el nombre del paso que parsea a JSON por parse Parquet para que cualquier otra persona que revise el código entienda de que se trata.

De esta forma llegamos al final del post donde aprendimos dos modos de leer muchos archivos parquet como una sola tabla combinados dentro de una sola carpeta. Ojalá les sirva si el método convencional falla o queremos nuestro código más limpio.