Поделиться через


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

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

Дополнительные сведения о том, как запрашивать журналы в Azure Monitor, см. в статье "Начало работы с запросами журналов".

Примечание.

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

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

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

Необходимые компоненты

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

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

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

StormEvents 
| count

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

Count
59 066

См. пример данных

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

StormEvents 
| take 5

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

Время начала EndTime EpisodeId EventId State EventType ...
2007-09-20T21:57:00Z 2007-09-20T22:05:00Z 11078 60913 FLORIDA Торнадо ...
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 ЮЖНАЯ АТЛАНТИКА Waterspout ...
2007-09-18T20:00:00Z 2007-09-19T18:00:00Z 11074 60904 FLORIDA Ливень ...

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

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

StormEvents
| take 5
| project State, EventType, DamageProperty

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

State EventType DamageProperty
ЮЖНАЯ АТЛАНТИКА Waterspout 0
FLORIDA Ливень 0
FLORIDA Торнадо 6200000
ДЖОРДЖИЯ Ураганный ветер 2000
МИССИСИПИ Ураганный ветер 20000

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

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

StormEvents 
| distinct EventType

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

EventType
Ураганный ветер
Град
Паводок
Засуха
Холод
Метель
Метель
Очень сильный ветер
Мороз/заморозки
Наводнение
...

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

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

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

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

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

Время начала EndTime State EventType DamageProperty
2007-01-13T08:45:00Z 2007-01-13T10:30:00Z TEXAS Наводнение 0
2007-01-13T09:30:00Z 2007-01-13T21:00:00Z TEXAS Наводнение 0
2007-01-13T09:30:00Z 2007-01-13T21:00:00Z TEXAS Наводнение 0
2007-01-15T22:00:00Z 2007-01-16T22:00:00Z TEXAS Наводнение 20000
2007-03-12T02:30:00Z 2007-03-12T06:45:00Z TEXAS Наводнение 0
... ... ... ... ...

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

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

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

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

Время начала EndTime State EventType DamageProperty
2007-08-18T21:30:00Z 2007-08-19T23:00:00Z TEXAS Наводнение 5000000
2007-06-27T00:00:00Z 2007-06-27T12:00:00Z TEXAS Наводнение 1200000
2007-06-28T18:00:00Z 2007-06-28T23:00:00Z TEXAS Наводнение 1000 000
2007-06-27T00:00:00Z 2007-06-27T08:00:00Z TEXAS Наводнение 750000
2007-06-26T20:00:00Z 2007-06-26T23:00:00Z TEXAS Наводнение 750000
... ... ... ... ...

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

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

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

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

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

Время начала EndTime State EventType DamageProperty
2007-08-18T21:30:00Z 2007-08-19T23:00:00Z TEXAS Наводнение 5000000
2007-06-27T00:00:00Z 2007-06-27T12:00:00Z TEXAS Наводнение 1200000
2007-06-28T18:00:00Z 2007-06-28T23:00:00Z TEXAS Наводнение 1000 000
2007-06-27T00:00:00Z 2007-06-27T08:00:00Z TEXAS Наводнение 750000
2007-06-26T20:00:00Z 2007-06-26T23:00:00Z TEXAS Наводнение 750000

Примечание.

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

Создание вычисляемых столбцов

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

Используется 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

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

Время начала EndTime Длительность DamageProperty
2007-08-18T21:30:00Z 2007-08-19T23:00:00Z 1.01:30:00 5000000
2007-06-27T00:00:00Z 2007-06-27T12:00:00Z 12:00:00 1200000
2007-06-28T18:00:00Z 2007-06-28T23:00:00Z 05:00:00 1000 000
2007-06-27T00:00:00Z 2007-06-27T08: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

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

Время начала EndTime ... Длительность
2007-08-18T21:30:00Z 2007-08-19T23:00:00Z ... 1.01:30:00
2007-06-27T00:00:00Z 2007-06-27T12:00:00Z ... 12:00:00
2007-06-28T18:00:00Z 2007-06-28T23:00:00Z ... 05:00:00
2007-06-27T00:00:00Z 2007-06-27T08: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 Исходный код Понятное имя
68796 Специалист по управлению в чрезвычайных ситуациях Общедоступный
... ... ...
72609 Служебная компания Private
... ... ...

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

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