Power Query 是否支持 Accept-Encoding: Web.Contents() 中的 gzip?
Does Power Query support Accept-Encoding: gzip in Web.Contents()?
这是 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
第二个文件只有一半大小,但当我在网络浏览器中查看它们时,它们看起来完全相同,因为网络浏览器可以解释响应中的 headers "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 中使用第二个文件。这个 returns 乱码,因为它从不解压缩 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 在下面的回答,我已经将 Content-Encoding:GZIP 大写在我的 blob 属性上。我用 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"
Greg,我在最新的 public 版本的 Power BI 桌面上尝试过这个,它的效果非常好。
根据 Greg 的评论更新:
在 Excel 2013 中,将 Content-Encoding 属性 设置为小写,无需指定 Accept-Encoding 即可工作。 (感谢卡尔和格雷格!)
有效的查询(我认为这正是您所写的:)
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"
正如 Lukasz 指出的那样,一切都在当前版本的 Power BI Desktop 2.28 中正常运行。 public Power Query 版本 2.27 下载已经出来,但在下个月的版本中它将开始工作。
问题是 Azure Blob HTTP 响应包含内容编码值 "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 版,这就会中断。(希望进行重大更改是正确的选择。)
这是 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
第二个文件只有一半大小,但当我在网络浏览器中查看它们时,它们看起来完全相同,因为网络浏览器可以解释响应中的 headers "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 中使用第二个文件。这个 returns 乱码,因为它从不解压缩 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 在下面的回答,我已经将 Content-Encoding:GZIP 大写在我的 blob 属性上。我用 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"
Greg,我在最新的 public 版本的 Power BI 桌面上尝试过这个,它的效果非常好。
根据 Greg 的评论更新: 在 Excel 2013 中,将 Content-Encoding 属性 设置为小写,无需指定 Accept-Encoding 即可工作。 (感谢卡尔和格雷格!)
有效的查询(我认为这正是您所写的:)
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"
正如 Lukasz 指出的那样,一切都在当前版本的 Power BI Desktop 2.28 中正常运行。 public Power Query 版本 2.27 下载已经出来,但在下个月的版本中它将开始工作。
问题是 Azure Blob HTTP 响应包含内容编码值 "GZIP",但 Web.Contents
过去仅在编码为小写 "gzip" 时自动解压缩。 (直到我们修复它!)
在旧版本的 Power Query 上,解决方法是使用 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"
但是一旦您升级到 2.28 版,这就会中断。(希望进行重大更改是正确的选择。)