演習 - where 演算子を使ってデータをフィルター処理する
表示された結果から特定の列をフィルター処理で含めたり除外したりしたことを思い出してください。 このユニットでは、さまざまな地域や時間帯でどのような気象現象が起きたのか、どのような種類の事象で損害が発生したのかに関する質問に答える方法を学習します。
where
演算子を使用します
ここまでに使ったすべての演算子は、選んだ列を返すものでした。 次は、データの特定の行を見てみましょう。
where
演算子を使うと、特定の条件を満たす結果をフィルター処理できます。 この最初の例では、数値演算子 "より大きい" (>
) を使い、整数列を最小値と比較しています。 具体的には、物的損害を与えた嵐のみを確認したいので、物的損害が 0 より大きいデータの行を調べます。
次のクエリを実行します。
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 年のものなので、過去 1 年間のレコードはありません。
文字列値を使ってフィルター処理する
米国ではさまざまな種類の嵐による損害が発生しているようです。 フロリダ州など特定の場所で発生した嵐に絞り込んでみましょう。
次のクエリを実行します。このクエリでは、文字列値
"FLORIDA"
を持つ 2 番目のwhere
演算子が使用されます。StormEvents | where DamageCrops > 0 | where State == "FLORIDA" | project State, EventType, DamageCrops
次の画像のような結果が得られるはずです。
このクエリから返されたレコードはすべてフロリダ州のものであり、農作物の損害額がゼロより大きいことに注目してください。
has
演算子を使ってフィルター処理する
先ほどのクエリ結果には、事象の種類の 1 つとして Thunderstorm Wind というものがあります。 フロリダで物的損害を引き起こした他の種類の風があるかどうかを見てみましょう。 has
演算子を使って、wind
という文字列の一致を検索します。 has
演算子は大文字と小文字を区別しない検索であり、完全な用語に一致します。
次のクエリを実行します。
StormEvents | where DamageProperty > 0 | where State == "FLORIDA" | where EventType has "wind" | project StartTime, EventType, DamageProperty
次の画像のような結果が得られるはずです。
結果を見ると、Tornado (竜巻) などの事象は表示されなくなりましたが、Thunderstorm Wind (雷雨と風) と Strong Wind (強風) という事象の種類は表示されています。
contains
演算子は has
と似ていますが、任意の部分文字列に一致するものです。 たとえば、次のクエリを使うと、Freezing fog (着氷性の霧) や Frost/Freeze (霜または凍結) などの結果が返されます。
StormEvents | where EventType contains "free"
has
演算子は contains
演算子よりパフォーマンスが高いので、どちらかを選択できる場合は常に has
を使う必要があります。
datetime
値に対するフィルター処理
カレンダー年の上半期に発生した損害額を詳しく見てみましょう。 特定の時間範囲内の事象に限定して検索すると便利な場合があります。 Kusto クエリ言語のインターフェイスには、ドロップダウンのタイム ピッカーがあるものと、日付フィルターをクエリ自体に組み込む必要があるものがあります。
時間範囲は両極の値で制限されるので、この 2 つの時間の間にある値を選ぶクエリを構築するのが最も効率的です。
この日付範囲を構築するための構文は次のとおりです。
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
次の画像のような結果が得られるはずです。
すべての日付が上半期 (1 月から 6 月) であることに注目してください。 また、フロリダ州の事象を選んだにもかかわらず、
project
演算子で指定されていないため、出力列として州が表示されていないことがわかります。