Przegląd języka Kusto Query Language (KQL)
Kusto Query Language to potężne narzędzie do eksploracji danych i odkrywania wzorców, identyfikowania anomalii i odstań, tworzenia modelowania statystycznego, i więcej.
Co to jest zapytanie Kusto?
Zapytanie Kusto jest żądaniem tylko do odczytu, które umożliwia przetwarzanie danych i zwracanie wyników. Żądanie jest podane w postaci jawnego tekstu, przy użyciu modelu przepływu danych, który jest łatwy do odczytania, autora i automatyzacji. Zapytania Kusto wykonane są z jednej lub większej liczby instrukcji zapytania.
Co to jest instrukcja zapytania?
Istnieją dwa rodzaje instrukcji zapytania użytkownika
- tabelaryczne wyrażenie wyrażenia
- A [ instrukcja let]-Obecnie nieobsługiwane, patrz Różnica Wsparcia.
Najczęstszym rodzajem instrukcji zapytania jest wyrażenie tabelaryczne instrukcja, co oznacza, że zarówno jej wejście, jak i wyjście składają się z tabel lub zestawów danych tabelarycznych. Instrukcje tabelaryczne zawierają zero lub więcej operatorów, z których każdy rozpoczyna się od danych wejściowych tabelarycznych i zwraca dane wyjściowe tabelaryczne. Operatory są sekwencjonowane przez | (potok). Przepływy danych lub są potokowane, od jednego operatora do następnego. Dane są filtrowane lub manipulowane na każdym kroku, a następnie przekazywane do następnego kroku.
To jak lejek, w którym zaczynasz z całą tabelą danych. Za każdym razem, gdy dane są przekazywane przez innego operatora, jest filtrowane, przearanżowane lub podsumowane. Ponieważ opiping informacji od jednego operatora do drugiego jest sekwencyjny, kolejność operatora zapytania jest ważna i może mieć wpływ zarówno na wyniki, jak i na wydajność. Na końcu lejka, zostajesz z dopracowanym wyjściem.
Przyjrzyjmy się przykładowym zapytaniu. Należy pamiętać, że w KQL rozróżniana jest wielkość liter dla wszystkich nazw tabel, nazw kolumn tabeli, operatorów, funkcji itd.
events_all
| project original_time, user_id
| where original_time > ago(5m) and user_id contains "user"
| count
Wyniki
| Liczebność |
|---|
| 28 |
To zapytanie ma pojedynczą instrukcję wyrażenia tabelaryczny. Instrukcja rozpoczyna się od odwołania do tabeli o nazwie events_all. Ta prosta instrukcja naprawdę oznacza, że można pobrać wszystkie dane przez cały czas, bez ograniczeń. Chociaż bardzo pomocne, jest to bardzo kosztowne, więc musi być ograniczone przez dodatkowych operatorów w każdym czasie.
events_all
Druga instrukcja polega na zastosowaniu operatora project w celu określenia tylko tych kolumn, które nas interesują. W przypadku events_allistnieją kolumny 400 + i potrzebujemy tylko 2, aby zakończyć to zapytanie, tak więc pozostałe będą ponosić ogromne koszty, bez żadnych korzyści. Zawsze dołączaj instrukcję projektu.
| project original_time, user_id
W trzeciej instrukcji znajduje zastosowanie gdzie , aby ograniczyć dane w projekcji, określając listę predykatów. Poniżej podajemy, że potrzebujemy tylko rekordów, które zostały wygenerowane przez źródła danych w ciągu ostatnich pięciu minut, a user_id zawiera znaki "user".
| where original_time > ago(5m) and user_id contains "user"
To zapytanie może również zostać zapisane w celu złamania logicznej instrukcji and w dwóch wierszach. Jest to przydatne dla jasności i jest odtwarzane w sposób wysoce iteracyjny w KQL. Jedna z nich jest rozważana przy wykorzystaniu wielu klauzul where , jest to niejawna instrukcja and . Te dwa przykłady produktu where są identyczne.
| where original_time > ago(5m)
| where user_id contains "user"
Końcowa instrukcja dotyczy liczebności. Powoduje to, że wszystkie pasujące rekordy są zgodne z klauzulą where i wykonywane są proste agregowanie. Dane wyjściowe są tabelą o pojedynczej długiej wartości.
| count
| Liczebność |
|---|
| 28 |