Упражнение. Фильтрация данных с помощью оператора where

Завершено

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

Используйте оператор where.

До этого момента все использованные вами операторы возвращали определенные столбцы. Теперь рассмотрим конкретные строки данных.

Оператор where фильтрует результаты, которые соответствуют определенному условию. В первом примере вы сравните столбец целочисленных данных с минимальным значением, используя числовой оператор больше (>). В частности, вы хотите видеть только штормы, которые повреждают свойство, поэтому вы будете смотреть на строки данных, где ущерб свойству больше нуля.

  1. Выполните приведенный ниже запрос:

    Выполнить запрос

    StormEvents
    | where DamageProperty > 0
    | project State, EventType, DamageProperty
    | take 10
    
  2. Вы должны получить результаты, аналогичные приведенным на следующем рисунке:

    Screenshot of query results of a where operator with a numerical operator of greater than zero.

  3. Обратите внимание, что во всех возвращенных строках значения DamageProperty больше нуля.

  4. Аналогичным образом можно отфильтровать записи, в которых время события указано ранее определенного периода. Например, выполните следующий запрос, в котором 365d означает "365 дней":

    Выполнить запрос

    StormEvents
    | where DamageProperty > 0
    | where StartTime > ago(365d)
    | project State, EventType, DamageProperty
    
  5. Обратите внимание на то, что этот запрос не возвращает результатов. Поскольку взяты данные за 2007 год, записи за прошлый год отсутствуют.

Фильтрация по строковому значению

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

  1. Выполните следующий запрос, в котором второй оператор where определяет строковое значение "FLORIDA":

    Выполнить запрос

    StormEvents
    | where DamageCrops > 0
    | where State == "FLORIDA"
    | project State, EventType, DamageCrops
    
  2. Вы должны получить результаты, аналогичные приведенным на следующем рисунке:

    Screenshot of query results for two where operators.

  3. Обратите внимание, что все записи, возвращенные из этого запроса, относятся к штату Флорида, а значение в столбце ущерба, причиненного урожаю, больше нуля.

Фильтрация с помощью оператора has

Один из типов событий в результатах последнего запроса называется Thunderstorm Wind. Посмотрим, есть ли другие виды ветра, которые причинили ущерб имуществу во Флориде. Мы будем искать совпадение по строке wind с помощью оператора has. Оператор has выполняет поиск без учета регистра, который полностью соответствует заданным условиям.

  1. Выполните приведенный ниже запрос:

    Выполнить запрос

    StormEvents
    | where DamageProperty > 0
    | where State == "FLORIDA"
    | where EventType has "wind"
    | project StartTime, EventType, DamageProperty
    
  2. Вы должны получить результаты, аналогичные приведенным на следующем рисунке:

    Screenshot of query results for where and has operators.

  3. Обратите внимание, что больше не отображаются такие события, как торнадо, но отображаются типы Thunderstorm Wind (Грозовой ветер) и Strong Wind (Сильный ветер).

Оператор contains похож на has, но он ищет совпадения по подстрокам. Например, следующий запрос вернет такие результаты, как Freezing fog (Ледяной туман) и Frost/Freeze (Мороз или обледенение).

StormEvents | where EventType contains "free"

Оператор has является более производительным, чем contains оператор, поэтому следует использовать has везде, где есть выбор между двумя.

Фильтрация значений datetime

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

Так как период времени задается двумя границами, эффективнее всего создать запрос с выбором значения в этом диапазоне.

Для создания этого диапазона дат используется следующий синтаксис:

whereвремяbetween(datetime(значение)..datetime(значение))

  1. Давайте добавим этот диапазон 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
    
  2. Вы должны получить результаты, аналогичные приведенным на следующем рисунке:

    Screenshot of query results for where operators that include a time range.

  3. Обратите внимание, что все даты находятся в первой половине года, месяцы до шести. Вы также можете заметить, что даже если вы выбрали события из штата Флорида, штат не отображается как выходной столбец, так как он не был указан в операторе project .