【问题标题】:How to efficiently filter Azure Table Storage data in Power Query如何在 Power Query 中高效筛选 Azure 表存储数据
【发布时间】:2016-09-14 00:29:11
【问题描述】:

我想将数据从 azure 表存储中提取到 Excel 2016 / Power Query。很难找到关于到底发生了什么的好文档,但不管它是什么,它都很慢。我有一个大表,所以我想确保在 Azure 端应用过滤器,而不是将所有数据拉给我并过滤客户端。

到目前为止,这是我的查询(使用设计器构建,但这是高级编辑器版本):

let
    Source = AzureStorage.Tables("mystorageaccount"),
    ElmahLogs1 = Source{[Name="ElmahLogs"]}[Data],
    #"Filtered Rows" = Table.SelectRows(ElmahLogs1, each [Timestamp] > #datetime(2016, 5, 12, 12, 0, 0)),
    #"Expanded Content" = Table.ExpandRecordColumn(#"Filtered Rows", "Content", {"HostName", "Type", "Source", "Message", "User", "StatusCode", "AllXml", "PublicId"}, {"Content.HostName", "Content.Type", "Content.Source", "Content.Message", "Content.User", "Content.StatusCode", "Content.AllXml", "Content.PublicId"})
in
    #"Expanded Content"

如您所见,我首先尝试按时间戳进行过滤,假设可以在 Azure 上快速处理。但这似乎需要几分钟而不是几秒钟。

有没有办法查看过滤是在客户端还是服务器端完成的?

是否有更好的方法将过滤器表达式传递给 Azure,例如在 AzureStorage.Tables() 函数或 Source() 函数的某处放置 OData 筛选器?

【问题讨论】:

    标签: azure-table-storage powerquery excel-2016 m


    【解决方案1】:

    仅对 Timestamp 进行过滤会导致整个表扫描效率非常低。 Azure 表查询的最佳做法是至少筛选 PartitionKey。对于您的场景,请考虑根据 Log Tail Pattern here 重新设计您的表(我强烈建议您阅读整篇文章,因为它可以帮助您更好地理解 Azure Table)。

    【讨论】:

    • 谢谢,我假设 Timestamp 已被有效索引。我现在看到我总是需要使用 PartitionKey,然后理想情况下使用 RowKey 来优化服务器端过滤。
    【解决方案2】:

    目前还没有通用的方法来查看过滤是发生在客户端还是服务器端,但我们认为这会很有帮助!

    由于 Azure Tables 在内部使用 HTTP,如果您对 Fiddler 感到满意,您可以检查 Power Query 发出的 Web 请求并查看是否正在发送过滤器。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-12-08
      • 1970-01-01
      • 1970-01-01
      • 2013-09-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多