Descomprimir archivos GZip con Power BI

El consumo de datos comprimidos en archivos Gzip (.gz) es algo a lo que nos enfrentaremos al analizar datos en algún momento, esto es debido a que es el formato de compresión que suele usarse en sistemas operativos Linux y Unix.

En este artículo vamos a mostrar como desde Power BI, con la potente herramienta Power Query, podemos descomprimir estos ficheros Gzip (.gz) directamente para consumir la información.

Power Query cuenta con la siguiente función que nos permite descomprimir archivos GZip (.gz) y leer su contenido en Power BI.

= Binary.Decompress(Origen, Compression.GZip)

Otro punto interesante al descomprimir archivos GZip (.gz) es hacerlo desde distinto orígenes. El panorama más sencillo sería hacerlo desde un repositorio local, pero también es habitual tener estos archivos en algún repositorio en la nube como puede ser Sharepoint de Microsoft.

Archivo GZip desde repositorio local

Este sería el código para tomar como origen un archivo GZip (.gz) ubicado en un repositorio local y mediante la función específica de Power Query descomprimir el fichero.

let
    Origen = File.Contents("C:\Users\...."),                          // Sustituir "C:\Users\...." por la ruta local del fichero GZip (.gz)
    Personalizado = Binary.Decompress(Origen, Compression.GZip)
in
   Personalizado

Una vez tengamos el archivo descomprimido, podremos utilizar otras funciones de Power Query para leer y transformar la información, como la función Csv.Documento en el caso de un archivo .csv.

Archivo GZip desde Sharepoint

Este sería el código para tomar como origen un archivo GZip (.gz) ubicado en un repositorio Sharepoint y mediante la función específica de Power Query descomprimir el fichero.

let
    Origen = SharePoint.Files("https://...", [ApiVersion = 15]),                     // Sustituir "https://..." por la url del sitio de Sharepoint donde se ubican los ficheros GZip (.gz).
    #"Filas filtradas" = Table.SelectRows(Origen, each ([Extension] = ".gz")),    // Filtrar por los archivos que tenga extensión .gz o por el archivo en cuestión.
    Content = #"Filas filtradas"{0}[Content],
    Personalizado = Binary.Decompress(Content, Compression.GZip)
in
    Personalizado

La línea de código «Content» hace referencia a la acción de pulsar sobre la opción «Binary» en Power Query.

Como en el ejemplo anterior, cuando tengamos el archivo descomprimido, podremos utilizar otras funciones de Power Query para leer y transformar la información, como la función Csv.Documento en el caso de un archivo .csv.

Descomprimir varios archivos Gzip desde Sharepoint

Es probable que no solo queramos tomar como origen un único archivo Gzip (.gz), si no que tengamos que traer varios ficheros logrando obtener una sola tabla con todos los registros de estos ficheros. En este caso utilizaremos una función para automatizar la ingesta de ficheros Gzip y su descompresión, para después utilizar la opción de combinar ficheros de Power Query, transformando y uniendo los ficheros .csv en una sola tabla.

Aquí puedes ver y copiar el código de la función que descomprimirá uno a uno los ficheros GZip (.gz).

let
    Origen = (fichero as text) => let
       Origen = SharePoint.Files("https://...", [ApiVersion = 15]),                     // Sustituir "https://..." por la url del sitio de Sharepoint donde se ubican los ficheros GZip (.gz).
        #"binary" = Origen{[Name=fichero]}[Content],
        Personalizado = Binary.Decompress(#"binary", Compression.GZip)
        
    in
        Personalizado
in
    Origen

Aquí puedes ver y copiar el código de la consulta que llamará a la función y hará la unión de los ficheros.

let
    Origen = SharePoint.Files("https://...", [ApiVersion = 15]),                     // Sustituir "https://..." por la url del sitio de Sharepoint donde se ubican los ficheros GZip (.gz).
    #"Filas filtradas" = Table.SelectRows(Origen, each ([Extension] = ".gz")),
    #"Función personalizada invocada" = Table.AddColumn(#"Filas filtradas", "Función", each #"Función)"([Name]))   // Sustituir "Función" por el nombre de la función que hemos creado.

in
    #"Función personalizada invocada"

Cuando ejecutemos este código, en la consulta podremos utilizar la opción de «Combinar archivos» de Power Query para unir los registros de todos los archivos ahora que ya están descomprimidos.

Una vez realizadas todas las transformaciones de archivo que realiza Power Query de forma automática, tendremos en nuestra consulta todos los registros que antes estaban comprimidos en una sola tabla.

Esperamos que este artículo os haya servido de ayuda.