演習 - where 演算子を使ってデータをフィルター処理する

完了

表示された結果から特定の列をフィルター処理で含めたり除外したりしたことを思い出してください。 このユニットでは、さまざまな地域や時間帯でどのような気象現象が起きたのか、どのような種類の事象で損害が発生したのかに関する質問に答える方法を学習します。

where 演算子を使用します

ここまでに使ったすべての演算子は、選んだ列を返すものでした。 次は、データの特定の行を見てみましょう。

where 演算子を使うと、特定の条件を満たす結果をフィルター処理できます。 この最初の例では、数値演算子 "より大きい" (>) を使い、整数列を最小値と比較しています。 具体的には、物的損害を与えた嵐のみを確認したいので、物的損害が 0 より大きいデータの行を調べます。

  1. 次のクエリを実行します。

    クエリを実行する

    StormEvents
    | where DamageProperty > 0
    | project State, EventType, DamageProperty
    | take 10
    
  2. 次の画像のような結果が得られるはずです。

    where 演算子に 0 より大きいという数値演算子を指定した場合のクエリ結果のスクリーンショット。

  3. 返されたすべての行は、実際に DamageProperty の値がゼロより大きいことに注目してください。

  4. 同様に、事象の発生時刻が一定日数よりも前である場所をフィルター処理できます。 たとえば、次のクエリを実行します。365d は 365 日を意味します。

    クエリを実行する

    StormEvents
    | where DamageProperty > 0
    | where StartTime > ago(365d)
    | project State, EventType, DamageProperty
    
  5. このクエリでは結果が返されないことに注意してください。 このデータは 2007 年のものなので、過去 1 年間のレコードはありません。

文字列値を使ってフィルター処理する

米国ではさまざまな種類の嵐による損害が発生しているようです。 フロリダ州など特定の場所で発生した嵐に絞り込んでみましょう。

  1. 次のクエリを実行します。このクエリでは、文字列値 "FLORIDA" を持つ 2 番目の where 演算子が使用されます。

    クエリを実行する

    StormEvents
    | where DamageCrops > 0
    | where State == "FLORIDA"
    | project State, EventType, DamageCrops
    
  2. 次の画像のような結果が得られるはずです。

    2 つの where 演算子のクエリ結果のスクリーンショット。

  3. このクエリから返されたレコードはすべてフロリダ州のものであり、農作物の損害額がゼロより大きいことに注目してください。

has 演算子を使ってフィルター処理する

先ほどのクエリ結果には、事象の種類の 1 つとして Thunderstorm Wind というものがあります。 フロリダで物的損害を引き起こした他の種類の風があるかどうかを見てみましょう。 has 演算子を使って、wind という文字列の一致を検索します。 has 演算子は大文字と小文字を区別しない検索であり、完全な用語に一致します。

  1. 次のクエリを実行します。

    クエリを実行する

    StormEvents
    | where DamageProperty > 0
    | where State == "FLORIDA"
    | where EventType has "wind"
    | project StartTime, EventType, DamageProperty
    
  2. 次の画像のような結果が得られるはずです。

    where および has 演算子のクエリ結果のスクリーンショット。

  3. 結果を見ると、Tornado (竜巻) などの事象は表示されなくなりましたが、Thunderstorm Wind (雷雨と風) と Strong Wind (強風) という事象の種類は表示されています。

contains 演算子は has と似ていますが、任意の部分文字列に一致するものです。 たとえば、次のクエリを使うと、Freezing fog (着氷性の霧) や Frost/Freeze (霜または凍結) などの結果が返されます。

StormEvents | where EventType contains "free"

has 演算子は contains 演算子よりパフォーマンスが高いので、どちらかを選択できる場合は常に has を使う必要があります。

datetime 値に対するフィルター処理

カレンダー年の上半期に発生した損害額を詳しく見てみましょう。 特定の時間範囲内の事象に限定して検索すると便利な場合があります。 Kusto クエリ言語のインターフェイスには、ドロップダウンのタイム ピッカーがあるものと、日付フィルターをクエリ自体に組み込む必要があるものがあります。

時間範囲は両極の値で制限されるので、この 2 つの時間の間にある値を選ぶクエリを構築するのが最も効率的です。

この日付範囲を構築するための構文は次のとおりです。

where time between (datetime(value)..datetime(value))

  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. 次の画像のような結果が得られるはずです。

    時間範囲を含む where 演算子のクエリ結果のスクリーンショット。

  3. すべての日付が上半期 (1 月から 6 月) であることに注目してください。 また、フロリダ州の事象を選んだにもかかわらず、project 演算子で指定されていないため、出力列として州が表示されていないことがわかります。