2017-04-12 1 views
1

Ist es möglich, die Ergebnisse aus der Analytics-API zu "pagen"?Seitenergebnisse von Azure Application Insights Analytics API

Wenn ich die folgende Abfrage (über http POST) verwenden

{ 
"query":"customEvents | project customDimensions.FilePath, timestamp 
     | where timestamp > now(-100d) | order by timestamp desc | limit 25" 
} 

ich zurück in eine Ergebnismenge zu 10.000 Ergebnissen. Gibt es eine Möglichkeit, etwas Ähnliches wie $ $ skip für die Ereignis-API zu verwenden? Wie "SKIP 75 TAKE 25" oder etwas, um die 4. Seite der Ergebnisse zu erhalten.

Antwort

2

[Bearbeiten: Diese Antwort ist jetzt veraltet, es wurde eine row_number Funktion zur Abfragesprache hinzugefügt. Diese Antwort wurde aus historischen Gründen hinterlassen, wenn jemand auf seltsame Abfragen stößt, die wie diese Antwort aussehen]

Nicht leicht.

Wenn Sie den ODATA-Abfragepfad von/events anstelle des Abfragepfads/verwenden können, wird Paging unterstützt. aber nicht wirklich benutzerdefinierte Abfragen wie Sie haben.

so etwas wie ein Funkruf zu erhalten, müssen Sie eine komplizierte Abfrage zu machen, und verwenden summarize und makeList und ein rowNum Feld in Ihrer Abfrage erfinden, dann mvexpand verwenden, um die Listen neu zu erweitern und dann durch die rowNum zu filtern. es ist ziemlich kompliziert und wenig intuitiv, so etwas wie:

customEvents 
| project customDimensions.FilePath, timestamp 
| where timestamp > now(-100d) 
| order by timestamp desc 
// squishes things down to 1 row where each column is huge list of values 
| summarize filePath=makelist(customDimensions.FilePath, 1000000) 
    , timestamp=makelist(timestamp, 1000000) 
    // make up a row number, not sure this part is correct 
    , rowNum = range(1,count(strcat(filePath,timestamp)),1) 
// expands the single rows into real rows 
| mvexpand filePath,timestamp,rowNum limit 1000000 
| where rowNum > 0 and rowNum <= 100 // you'd change these values to page 

Ich glaube, es ist schon eine Anfrage auf der appinsights Uservoice Paging-Betreiber in der Abfragesprache zu unterstützen. Die andere Annahme hier ist, dass Daten in der zugrundeliegenden Tabelle nicht ändern, während Sie arbeiten. wenn neue Daten zwischen Anrufen erscheint, wie

  1. gib mir Reihen 0-99
  2. 50 neue Zeilen erscheinen
  3. gib mir Reihen 100-199

dann Schritt 3 eigentlich gibt Ihnen 50 doppelte Zeilen, die Sie gerade in Schritt 1 erhalten haben.

1

Es gibt eine mo re correct Weg, dies jetzt zu tun, mit neuen Operatoren, die seit meiner vorherigen Antwort zur Abfragesprache hinzugefügt wurden.

Die beiden Operatoren sind serialize und row_number().

serialize stellt sicher, dass die Daten in einer Form und Reihenfolge sind, die mit row_number() funktioniert. Einige der vorhandenen Operatoren wie order by erstellen bereits serialisierte Daten.

gibt es auch prev() und next() Operatoren, die die Werte von vorherigen oder nächsten Zeilen in einem serialisierten Ergebnis abrufen können.

Verwandte Themen