Power Query是否支持Accept-Encoding:Web.Contents()中的gzip?

时间:2015-11-18 21:21:58

标签: powerbi powerquery

这是一个blob存储中没有压缩的文件: https://gregsouthcentralstorage.blob.core.windows.net/publiccontainer/TestFile.txt

这里是相同的文件,但压缩了gzip并且Content-Encoding blob属性设置为GZIP(如here所述): https://gregsouthcentralstorage.blob.core.windows.net/publiccontainer/TestFileGzip.txt

第二个文件的大小只有一半,但是当我在网络浏览器中查看它们时,两者看起来都是相同的,因为Web浏览器可以解释响应中的标题,说明" Content-Encoding:gzip"

现在尝试使用Power Query中的第一个文件,该文件按预期工作:

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"

但是我似乎无法使用Power Query中的第二个文件。这会返回乱码,因为它从不解压缩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"

有没有办法在Power Query中使用gzip压缩内容?

更新:根据Carl Walsh的回答,我对我的blob的属性进行了大写内容编码:GZIP。我已经使用Content-Encoding上传了一个新blob:gzip(小写)并且它可以工作:

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"

2 个答案:

答案 0 :(得分:1)

Greg,我在Power BI桌面的最新公共版本上尝试了这个,它就像一个魅力。

根据Greg的评论进行更新: 在Excel 2013中,将Content-Encoding属性设置为小写,并且无需指定Accept-Encoding即可运行。 (感谢Carl& Greg!)

有效的查询(这正是你所写的我认为:)

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"

答案 1 :(得分:1)

正如Lukasz所指出的,一切都适用于当前版本的Power BI Desktop,2.28。 Power Query版本2.27的公开下载出来了,但是在下一个月发行版中它将开始工作。

问题是Azure Blob HTTP响应包含Content-Encoding值“GZIP”,但Web.Contents仅用于在编码为小写“gzip”时自动解压缩。 (直到我们修好它!)

在旧版Power Query上,解决方法是使用Binary.Decompress手动解压缩GZip:

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"

但是一旦升级到版本2.28,这将会中断。(希望做出改变是正确的选择。)