練習 - 使用 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 年起的資料,所以過去一年沒有任何記錄。
使用字串值進行篩選
看起來有許多暴風雨類型已在美國各地造成損害。 讓我們將範圍縮小到特定位置發生的暴風雨,例如佛羅里達州。
執行下列查詢,其會使用具有字串值
"FLORIDA"
的第二個where
運算子:StormEvents | where DamageCrops > 0 | where State == "FLORIDA" | project State, EventType, DamageCrops
您應該會取得如下圖所示的結果:
請注意,從此查詢傳回的所有記錄都是來自佛羅里達州,且作物損害大於零。
使用 has
運算子進行篩選
最後一個查詢結果的其中一個事件類型稱為大雷雨風災。 讓我們看看是否有任何其他種類的風災在佛羅里達州造成財產損害。 我們將使用 has
運算子來搜尋 wind
的字串比對。 has
運算子為不區分大小寫的搜尋方式,其會比對完整字詞。
執行下列查詢:
StormEvents | where DamageProperty > 0 | where State == "FLORIDA" | where EventType has "wind" | project StartTime, EventType, DamageProperty
您應該會取得如下圖所示的結果:
請注意,結果中不會再出現龍捲風等事件,但確實會出現大雷雨強風與強風事件類型。
contains
運算子類似於 has
,但其會比對任何子字串。 例如,下列查詢會傳回諸如「凍霧」與「結霜/結凍」的結果。
StormEvents | where EventType contains "free"
has
運算子比 contains
運算子更具效能,因此在選擇任一個都可以的情況下,建議使用 has
。
篩選 datetime
值
讓我們更仔細地看看日曆年度前半年已造成的損害。 限制搜尋特定時間範圍內的事件可能會有幫助。 某些具備 Kusto 查詢語言的介面有下拉式時間選擇器,但其他介面會要求您將日期篩選併入查詢本身。
因為時間範圍會限制在兩個極端之間,所以建構查詢最有效率,您可以在其中選擇這兩個時間之間的值。
建構此日期範圍的語法如下所示:
where
時間between
(datetime(
值)..datetime(
值))
讓我們將此
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
運算子中並未加以指定。