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 で非常に迅速に処理できると仮定して、最初にタイムスタンプでフィルター処理しようとしています。しかし、数秒ではなく数分かかるようです。

フィルタリングがクライアント側またはサーバー側で行われているかどうかを確認する方法はありますか?

AzureStorage.Tables() 関数または Source() 関数のどこかに OData フィルターを配置するなど、フィルター式を Azure に渡すより良い方法はありますか?

4

2 に答える 2

3

タイムスタンプのみでフィルタリングすると、非常に非効率的なテーブル全体のスキャンが発生します。Azure テーブル クエリのベスト プラクティスは、少なくとも PartitionKey をフィルター処理することです。あなたのシナリオでは、こちらのログ テール パターンごとにテーブルを再設計することを検討してください( Azure テーブルをよく理解するのに役立つため、記事全体を読むことを強くお勧めします)。

于 2016-05-17T23:29:57.163 に答える
1

フィルタリングがクライアント側で行われているのかサーバー側で行われているのかを確認する一般的な方法はまだありませんが、役立つことは認識しています!

Azure Tables は内部で HTTP を使用するため、Fiddler に慣れている場合は、Power Query が行う Web 要求を調べて、フィルターが送信されているかどうかを確認できます。

于 2016-05-20T02:39:54.670 に答える