2

我想将数据从 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 过滤器?

4

2 回答 2

3

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

于 2016-05-17T23:29:57.163 回答
1

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

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

于 2016-05-20T02:39:54.670 回答