2016-05-17 5 views
0

Ich möchte Daten aus Azure-Tabellenspeicher in Excel 2016/Power Query ziehen. Es ist schwer, eine gute Dokumentation darüber zu finden, was vor sich geht, aber was auch immer es ist, es ist langsam. Ich habe eine große Tabelle, deshalb möchte ich sicherstellen, dass ein Filter am Azure-Ende angewendet wird, anstatt alle Daten zu mir zu ziehen und die Client-Seite zu filtern.So filtern Sie effizient Azure Table Storage-Daten in Power Query

Hier ist meine Abfrage bisher (gebaut, um den Designer verwenden, aber das ist die erweiterte Editor-Version):

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" 

Wie man sehen kann ich von Zeitpunkt zu filtern bin versucht zunächst, dass unter der Annahme, wird in der Lage sein, auf Azure ziemlich schnell verarbeitet werden. Aber es scheint Minuten statt Sekunden zu dauern.

Gibt es eine Möglichkeit zu sehen, ob die Filterung clientseitig oder serverseitig durchgeführt wird?

Gibt es eine bessere Möglichkeit, einen Filterausdruck an Azure zu übergeben, z. Setzen Sie einen OData-Filter irgendwo in der AzureStorage.Tables() - Funktion oder Source() -Funktion?

Antwort

3

Die Filterung nur mit dem Zeitstempel führt zu einem vollständigen Tabellenscan, der sehr ineffizient ist. Die beste Methode für die Azure-Tabellenabfrage besteht darin, PartitionKey zumindest zu filtern. Für Ihr Szenario überlegen Sie bitte, Ihre Tabelle pro Log Tail Pattern here neu zu entwerfen (ich empfehle Ihnen dringend, den ganzen Artikel zu lesen, da es Ihnen helfen kann, Azure Table gut zu verstehen).

+0

Danke, ich hatte angenommen, dass Timestamp effektiv indiziert wurde. Ich sehe jetzt, ich muss immer PartitionKey verwenden und dann idealerweise RowKey als nächstes für eine optimale serverseitige Filterung verwenden. – Rory

1

Es gibt noch keinen allgemeinen Weg zu sehen, ob Filterung auf Client- oder Serverseite geschieht, aber wir wissen, dass es hilfreich wäre!

Da Azure Tables intern HTTP verwendet, können Sie, wenn Sie mit Fiddler vertraut sind, die Webanforderungen von Power Query überprüfen und sehen, ob der Filter gesendet wird.