2015-11-18 1 views
0

est ici un fichier sans compression dans le stockage de blob: https://gregsouthcentralstorage.blob.core.windows.net/publiccontainer/TestFile.txtEst-ce que Power Query prend en charge le codage Accept-Encoding: gzip dans Web.Contents()?

Et voici le même fichier, mais gzip compressé et avec le blob Content-Encoding propriété est définie sur GZIP (comme décrit here): https://gregsouthcentralstorage.blob.core.windows.net/publiccontainer/TestFileGzip.txt

Le deuxième fichier est la moitié de la taille, mais quand je les regarde dans un navigateur Web les deux semblent identiques parce que le navigateur Web peut interpréter les en-têtes dans la réponse qui disent "Content-Encoding: gzip"

Maintenant, essayez de consommer ce premier fichier dans Power Query qui fonctionne comme e xpected:

let 
    Source = Web.Contents("https://gregsouthcentralstorage.blob.core.windows.net/publiccontainer/TestFile.txt"), 
    #"Imported Text" = Table.FromColumns({Lines.FromBinary(Source,null,null,1252)}) 
in 
    #"Imported Text" 

Cependant, je n'arrive pas à utiliser le deuxième fichier dans Power Query. Cela revient charabia parce qu'il n'a jamais décompresse le contenu gzip:

let 
    Source = Web.Contents("https://gregsouthcentralstorage.blob.core.windows.net/publiccontainer/TestFileGzip.txt", [Headers=[#"Accept-Encoding"="gzip"]]), 
    #"Imported Text" = Table.FromColumns({Lines.FromBinary(Source,null,null,1252)}) 
in 
    #"Imported Text" 

Est-il possible de consommer du contenu Web gzip Power Interrogation?

Mise à jour: Par la réponse de Carl Walsh ci-dessous, j'avais capitalisé Content-Encoding: GZIP sur les propriétés de mon blob. Je l'ai téléchargé un nouveau blob avec Content-Encoding: gzip (minuscule) et il fonctionne:

let 
    Source = Web.Contents("https://gregsouthcentralstorage.blob.core.windows.net/publiccontainer/TestFileGzipLowercase.txt"), 
    #"Imported Text" = Table.FromColumns({Lines.FromBinary(Source,null,null,1252)}) 
in 
    #"Imported Text" 
+0

BTW, Power Query gère par défaut les codages gzip et deflate. J'éviterais de changer l'entête d'encodage accepter. –

Répondre

1

Comme le souligne Lukasz sur, tout Justs travail dans la version actuelle de Power BI Desktop, 2,28. Le téléchargement public de Power Query version, 2.27, est sorti, mais dans la prochaine version mensuelle, il commencera à fonctionner.

Le problème est que la réponse HTTP Azure Blob contient la valeur Content-Encoding "GZIP" mais Web.Contents utilisée pour décompresser automatiquement lorsque l'encodage était en "minuscule" "gzip". (! Jusqu'à ce que nous l'avons fixé)


En version plus ancienne du pouvoir de requête, la solution consiste à décompresser manuellement GZip avec Binary.Decompress:

let 
    Source = Binary.Decompress(Web.Contents("https://gregsouthcentralstorage.blob.core.windows.net/publiccontainer/TestFileGzip.txt", [Headers=[#"Accept-Encoding"="gzip"]]), Compression.GZip), 
    #"Imported Text" = Table.FromColumns({Lines.FromBinary(Source,null,null,1252)}) 
in 
    #"Imported Text" 

Mais cela va briser une fois que vous passez à la version 2.28. (En espérant que le changement de rupture était le bon choix.)

+0

Oh, c'est encore mieux. J'ai le contrôle de la propriété Content-Encoding donc je l'ai changé en minuscules et cela fonctionne maintenant dans Excel 2013 même sans spécifier Accept-Encoding. Brillant. Merci Carl. – GregGalloway

1

Greg, j'ai essayé cela sur la dernière version publique du bureau de puissance BI et cela a fonctionné comme un charme.

Mise à jour basée sur le commentaire de Greg: Dans Excel 2013, définissez la propriété Content-Encoding en minuscules et cela fonctionne sans spécifier Accept-Encoding. (Merci Carl & Greg!)

La requête qui fonctionne (ce qui est exactement ce que vous avez écrit, je pense :)

let 
    Source = Web.Contents("https://gregsouthcentralstorage.blob.core.windows.net/publiccontainer/TestFileGzip.txt", [Headers=[#"Accept-Encoding"="gzip"]]), 
    #"Imported Text" = Table.FromColumns({Lines.FromBinary(Source,null,null,1252)}) 
in 
    #"Imported Text" 
+0

Ah. J'utilisais la dernière version pour Excel 2013. Merci. – GregGalloway