Упражнение. Фильтрация данных с помощью оператора where
Напомним, что сейчас в отображаемых результатах выводятся только отфильтрованные столбцы. В этом уроке вы узнаете, как ответить на вопросы о том, какие метеорологические события происходили в разных регионах или в разные промежутки времени, а также о том, какие типы событий нанесли разрушительные последствия.
Использовать оператор where
.
До этого момента все использованные вами операторы возвращали определенные столбцы. Теперь рассмотрим конкретные строки данных.
Оператор where
фильтрует результаты, которые соответствуют определенному условию. В первом примере вы сравните столбец целочисленных данных с минимальным значением, используя числовой оператор больше (>
). В частности, вы хотите видеть только штормы, которые повреждают свойство, поэтому вы будете смотреть на строки данных, где ущерб свойству больше нуля.
Выполните приведенный ниже запрос:
StormEvents | where DamageProperty > 0 | project State, EventType, DamageProperty | take 10
Вы должны получить результаты, аналогичные приведенным на следующем рисунке:
Обратите внимание, что во всех возвращенных строках значения DamageProperty больше нуля.
Аналогичным образом можно отфильтровать записи, в которых время события указано ранее определенного периода. Например, выполните следующий запрос, в котором
365d
означает "365 дней":StormEvents | where DamageProperty > 0 | where StartTime > ago(365d) | project State, EventType, DamageProperty
Обратите внимание на то, что этот запрос не возвращает результатов. Поскольку взяты данные за 2007 год, записи за прошлый год отсутствуют.
Фильтрация по строковому значению
Похоже, довольно много видов штормовых ветров нанесли разрушительный ущерб по всей стране. Давайте сузим этот список до тех, которые произошли в определенном месте, например в штате Флорида.
Выполните следующий запрос, в котором второй оператор
where
определяет строковое значение"FLORIDA"
:StormEvents | where DamageCrops > 0 | where State == "FLORIDA" | project State, EventType, DamageCrops
Вы должны получить результаты, аналогичные приведенным на следующем рисунке:
Обратите внимание, что все записи, возвращенные из этого запроса, относятся к штату Флорида, а значение в столбце ущерба, причиненного урожаю, больше нуля.
Фильтрация с помощью оператора has
Один из типов событий в результатах последнего запроса называется Thunderstorm Wind. Посмотрим, есть ли другие виды ветра, которые причинили ущерб имуществу во Флориде. Мы будем искать совпадение по строке wind
с помощью оператора has
. Оператор has
выполняет поиск без учета регистра, который полностью соответствует заданным условиям.
Выполните приведенный ниже запрос:
StormEvents | where DamageProperty > 0 | where State == "FLORIDA" | where EventType has "wind" | project StartTime, EventType, DamageProperty
Вы должны получить результаты, аналогичные приведенным на следующем рисунке:
Обратите внимание на результаты, что такие события, как торнадо больше не отображаются, но типы событий Thunderstorm Wind и Strong Wind отображаются.
Оператор contains
похож на has
, но он ищет совпадения по подстрокам. Например, следующий запрос возвращает результаты, такие как замораживание тумана и фрост/заморозка.
StormEvents | where EventType contains "free"
Оператор has
является более производительным, чем contains
оператор, поэтому следует использовать has
везде, где есть выбор между двумя.
Фильтрация значений datetime
Давайте более подробно рассмотрим показатели ущерба, нанесенного в первой половине календарного года. Может пригодится ограничение поиска по событиям за определенный период времени. В одних интерфейсах, использующих языке запросов Kusto, есть раскрывающееся средство выбора дат, тогда как в других необходимо включить фильтр даты в сам запрос.
Так как период времени задается двумя границами, эффективнее всего создать запрос с выбором значения в этом диапазоне.
Для создания этого диапазона дат используется следующий синтаксис:
where
timebetween
(datetime(
value)..datetime(
value))
Давайте добавим этот диапазон
datetime
в тип запроса, который вы уже изучили. Выполните приведенный ниже запрос:StormEvents | where StartTime between (datetime(2007-01-01)..datetime(2007-06-01)) | where DamageProperty > 0 | where State == "FLORIDA" | project StartTime, EventType, DamageProperty | take 50
Вы должны получить результаты, аналогичные приведенным на следующем рисунке:
Обратите внимание, что все даты находятся в первой половине года, месяцы до шести. Вы также можете заметить, что даже если вы выбрали события из штата Флорида, штат не отображается как выходной столбец, так как он не был указан в операторе
project
.