我想将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过滤器?
答案 0 :(得分:3)
仅在Timestamp上过滤将导致整个表扫描效率非常低。 Azure Table查询的最佳实践是至少过滤PartitionKey。对于您的场景,请考虑按照日志尾部模式here重新设计表格(我强烈建议您阅读整篇文章,因为它可以帮助您更好地理解Azure表格。)
答案 1 :(得分:1)
目前还没有一种方法可以看到过滤是在客户端还是在服务器端进行,但我们认识到它会有所帮助!
由于Azure Tables在内部使用HTTP,如果您对Fiddler感到满意,您可以检查Power Query所做的Web请求,并查看是否正在发送过滤器。