Руководство. Изучение общих операторов

язык запросов Kusto (KQL) используется для написания запросов в Azure Data Explorer, Azure Monitor Log Analytics, Azure Sentinel и т. д. Это руководство содержит общие сведения о основных операторах KQL, используемых для доступа к данным и их анализа.

Более конкретные рекомендации по отправке запросов к журналам в Azure Monitor см. в статье Начало работы с запросами журналов.

Примечание

Не можете найти нужную информацию? Эта статья недавно была разделена следующим образом:

Из этого руководства вы узнаете, как выполнять следующие задачи:

В примерах этого руководства используется StormEvents таблица, которая является общедоступной в кластере справки. Чтобы изучить собственные данные, создайте собственный бесплатный кластер.

Предварительные требования

  • Учетная запись Майкрософт или удостоверение пользователя Microsoft Entra для входа в кластер справки

Считать строки

Начните с использования оператора count , чтобы найти количество записей storm в StormEvents таблице.

StormEvents 
| count

Выходные данные

Count
59066

Просмотр примера данных

Чтобы получить представление о данных, используйте оператор take для просмотра выборки записей. Этот оператор возвращает указанное количество произвольных строк из таблицы, что может быть полезно для предварительного просмотра общей структуры и содержимого данных.

StormEvents 
| take 5

В следующей таблице показаны только 6 из 22 возвращенных столбцов. Чтобы просмотреть полные выходные данные, выполните запрос.

StartTime EndTime EpisodeId EventId Состояние EventType ...
2007-09-20T21:57:00Z 2007-09-20T22:05:00Z 11078 60913 Флорида Ураган ...
2007-12-20T07:50:00Z 2007-12-20T07:53:00Z 12554 68796 Миссисипи Шквалистый ветер ...
2007-12-30T16:00:00Z 2007-12-30T16:05:00Z 11749 64588 Грузия Шквалистый ветер ...
2007-09-29T08:11:00Z 2007-09-29T08:11:00Z 11091 61032 ЮЖНО-АТЛАНТИЧЕСКИЕ ШТАТЫ Торнадо ...
2007-09-18T20:00:00Z 2007-09-19T18:00:00Z 11074 60904 Флорида Сильный ливень ...

Выбор подмножества столбцов

Используйте оператор проекта , чтобы упростить представление и выбрать определенное подмножество столбцов. Использование project часто является более эффективным и простым для чтения, чем просмотр всех столбцов.

StormEvents
| take 5
| project State, EventType, DamageProperty

Выходные данные

Состояние EventType DamageProperty
ЮЖНО-АТЛАНТИЧЕСКИЕ ШТАТЫ Торнадо 0
Флорида Сильный ливень 0
Флорида Ураган 6200000
Грузия Шквалистый ветер 2000
Миссисипи Шквалистый ветер 20 000

Вывод списка уникальных значений

Похоже, что на основе результатов предыдущего запроса существует несколько типов штормов. Используйте оператор distinct , чтобы получить список всех уникальных типов storm.

StormEvents 
| distinct EventType

В таблице приведено 46 типов штормов. Вот пример из 10 из них.

EventType
Шквалистый ветер
Град
Внезапное наводнение
Засухи
Зимняя погода
Метель
Тяжелый снег
Очень сильный ветер
Мороз/заморозка
Наводнение
...

Фильтрация по условию

Оператор where фильтрует строки данных на основе определенных критериев.

Следующий запрос ищет события storm в определенном State из определенного EventType.

StormEvents
| where State == 'TEXAS' and EventType == 'Flood'
| project StartTime, EndTime, State, EventType, DamageProperty

Существует 146 событий, соответствующих этим условиям. Вот пример из 5 из них.

StartTime EndTime Состояние EventType DamageProperty
2007-01-13T08:45:00Z 2007-01-13T10:30:00Z Техас Наводнение 0
2007-01-13T09:30:00Z 2007-01-13T21:00:00Z Техас Наводнение 0
2007-01-13T09:30:00Z 2007-01-13T21:00:00Z Техас Наводнение 0
2007-01-15T22:00:00Z 2007-01-16T22:00:00Z Техас Наводнение 20 000
2007-03-12T02:30:00Z 2007-03-12T06:45:00Z Техас Наводнение 0
... ... ... ... ...

Сортировка результатов

Чтобы просмотреть наиболее распространенные наводнения в Техасе, которые нанесли наибольший ущерб, используйте оператор сортировки , чтобы расположить строки в порядке убывания на основе столбца DamageProperty . Порядок сортировки по умолчанию — по убыванию. Чтобы сортировать по возрастанию, укажите asc.

StormEvents
| where State == 'TEXAS' and EventType == 'Flood'
| sort by DamageProperty
| project StartTime, EndTime, State, EventType, DamageProperty

Выходные данные

StartTime EndTime Состояние EventType DamageProperty
2007-08-18T21:30:00Z 2007-08-19T23:00:00Z Техас Наводнение 5000000
2007-06-27T00:00:00Z 2007-06-27T12:00:00Z Техас Наводнение 1200000
2007-06-28T18:00:00Z 2007-06-28T23:00:00Z Техас Наводнение 1000000
2007-06-27T00:00:00Z 2007-06-27T08:00:00Z Техас Наводнение 750000
2007-06-26T20:00:00Z 2007-06-26T23:00:00Z Техас Наводнение 750000
... ... ... ... ...

Получение первых n строк

Оператор top возвращает первые n строк, отсортированных по указанному столбцу.

Следующий запрос возвращает пять наводнений в Техасе, которые вызвали наибольшее повреждение имущества.

StormEvents
| where State == 'TEXAS' and EventType == 'Flood'
| top 5 by DamageProperty
| project StartTime, EndTime, State, EventType, DamageProperty

Выходные данные

StartTime EndTime Состояние EventType DamageProperty
2007-08-18T21:30:00Z 2007-08-19T23:00:00Z Техас Наводнение 5000000
2007-06-27T00:00:00Z 27.06.2007T12:00:00Z Техас Наводнение 1200000
28.06.2007T18:00:00Z 28.06.2007T23:00:00Z Техас Наводнение 1000000
2007-06-27T00:00:00Z 27.06.2007: 00:00Z Техас Наводнение 750000
2007-06-26T20:00:00Z 2007-06-26T23:00:00Z Техас Наводнение 750000

Примечание

Порядок операторов важен. Если вы поместите top здесь where , вы получите разные результаты. Это связано с тем, что данные преобразуются каждым оператором по порядку. Дополнительные сведения см. в разделе Операторы табличных выражений.

создавать вычисляемые столбцы;

Операторы project и extend могут создавать вычисляемые столбцы.

Используйте project для указания только столбцов, которые требуется просмотреть, и для extend добавления вычисляемого столбца в конец таблицы.

Следующий запрос создает вычисляемый Duration столбец с разницей между StartTime и EndTime. Так как мы хотим просмотреть только несколько избранных столбцов, в этом случае лучше использовать использование project .

StormEvents
| where State == 'TEXAS' and EventType == 'Flood'
| top 5 by DamageProperty desc
| project StartTime, EndTime, Duration = EndTime - StartTime, DamageProperty

Выходные данные

StartTime EndTime Длительность DamageProperty
2007-08-18T21:30:00Z 2007-08-19T23:00:00Z 1.01:30:00 5000000
2007-06-27T00:00:00Z 27.06.2007T12:00:00Z 12:00:00 1200000
28.06.2007T18:00:00Z 28.06.2007T23:00:00Z 05:00:00 1000000
2007-06-27T00:00:00Z 27.06.2007: 00:00Z 08:00:00 750000
2007-06-26T20:00:00Z 2007-06-26T23:00:00Z 03:00:00 750000

Если вы посмотрите на вычисляемый Duration столбец, вы можете заметить, что наводнение, которое вызвало наибольший ущерб, также было самым длинным наводнением.

Используйте extend для просмотра вычисляемого Duration столбца вместе со всеми другими столбцами. Столбец Duration добавляется в качестве последнего столбца.

StormEvents
| where State == 'TEXAS' and EventType == 'Flood'
| top 5 by DamageProperty desc
| extend Duration = EndTime - StartTime

Выходные данные

StartTime EndTime ... Duration
2007-08-18T21:30:00Z 2007-08-19T23:00:00Z ... 1.01:30:00
2007-06-27T00:00:00Z 27.06.2007T12:00:00Z ... 12:00:00
28.06.2007T18:00:00Z 28.06.2007T23:00:00Z ... 05:00:00
2007-06-27T00:00:00Z 27.06.2007: 00:00Z ... 08:00:00
2007-06-26T20:00:00Z 2007-06-26T23:00:00Z ... 03:00:00

Сопоставление значений из одного набора с другим

Статическое сопоставление — это полезный метод изменения представления результатов. В KQL одним из способов выполнения статического сопоставления является использование динамического словаря и методов доступа для сопоставления значений из одного набора в другой.

let sourceMapping = dynamic(
  {
    "Emergency Manager" : "Public",
    "Utility Company" : "Private"
  });
StormEvents
| where Source == "Emergency Manager" or Source == "Utility Company"
| project EventId, Source, FriendlyName = sourceMapping[Source]

Выходные данные

EventId Source FriendlyName
68796 Специалист по управлению в чрезвычайных ситуациях Общедоступные
... ... ...
72609 Утилита компании Private
... ... ...

Следующий шаг

Теперь, когда вы знакомы с основными принципами написания запросов Kusto, перейдите к следующему руководству и узнайте, как использовать функции агрегирования для получения более глубокого понимания данных.