教學課程:了解常見的運算子
適用於:✅Microsoft網狀架構✅Azure 數據✅總管 Azure 監視器✅Microsoft Sentinel
Kusto 查詢語言 (KQL) 可用來在 Azure 數據總管、Azure 監視器 Log Analytics、Azure Sentinel 等中寫入查詢。 本教學課程是用來存取和分析數據的基本 KQL 運算符簡介。
如需有關如何在 Azure 監視器中查詢記錄的詳細指引,請參閱 開始使用記錄查詢。
在本教學課程中,您將了解如何:
本教學課程中的範例會使用StormEvents
可在說明叢集中公開使用的數據表。 若要使用您自己的數據進行探索, 請建立您自己的免費叢集。
本教學課程中的範例會使用StormEvents
可在天氣分析範例數據中公開使用的數據表。
必要條件
若要執行下列查詢,您需要具有範例數據的存取權的查詢環境。 您可以使用下列其中一項:
- Microsoft帳戶或Microsoft Entra 使用者身分識別
- 具有Microsoft網狀架構功能的容量的網狀架構工作區
計數資料列
首先, 使用 count 運算符來尋找數據表中的 StormEvents
storm 記錄數目。
StormEvents
| count
輸出
計數 |
---|
59066 |
查看數據的範例
若要了解數據,請使用 take 運算符來檢視記錄範例。 這個運算符會傳回數據表中指定數目的任意數據列,這對於預覽一般數據結構和內容很有用。
StormEvents
| take 5
下表僅顯示22個傳回數據行中的5個。 若要查看完整的輸出,請執行查詢。
StartTime | EndTime | EpisodeId | EventId | 州/省 | EventType | ... |
---|---|---|---|---|---|---|
2007-09-20T21:57:00Z | 2007-09-20T22:05:00Z | 11078 | 60913 | 佛羅里達州 | 龍捲風 | ... |
2007-12-20T07:50:00Z | 2007-12-20T07:53:00Z | 12,554 | 68796 | 密西西比州 | 雷暴風 | ... |
2007-12-30T16:00:00Z | 2007-12-30T16:05:00Z | 11749 | 64588 | 喬治亞州 | 雷暴風 | ... |
2007-09-29T08:11:00Z | 2007-09-29T08:11:00Z | 11091 | 61032 | 大西洋南部 | 沃特斯普特 | ... |
2007-09-18T20:00:00Z | 2007-09-19T18:00:00Z | 11074 | 60904 | 佛羅里達州 | 大雨 | ... |
選取資料行的子集
使用項目運算符來簡化檢視,並選取特定數據行子集。 使用 project
通常比檢視所有數據行更有效率且更容易閱讀。
StormEvents
| take 5
| project State, EventType, DamageProperty
輸出
州/省 | EventType | DamageProperty |
---|---|---|
大西洋南部 | 沃特斯普特 | 0 |
佛羅里達州 | 大雨 | 0 |
佛羅里達州 | 龍捲風 | 6200000 |
喬治亞州 | 雷暴風 | 2000 |
密西西比州 | 雷暴風 | 20000 |
列出唯一值
根據上一個查詢的結果,似乎有多個類型的風暴。 使用 distinct 運算符來列出所有唯一的 storm 類型。
StormEvents
| distinct EventType
數據表中有46種風暴。 以下是其中10個範例。
EventType |
---|
雷暴風 |
冰雹 |
暴洪 |
乾旱 |
冬季天氣 |
冬季風暴 |
大雪 |
強風 |
結霜/凍結 |
洪水 |
... |
依條件篩選
, 其中 運算符會根據特定準則篩選數據列。
下列查詢會尋找特定 State
EventType
中的 storm 事件。
StormEvents
| where State == 'TEXAS' and EventType == 'Flood'
| project StartTime, EndTime, State, EventType, DamageProperty
有146個事件符合這些條件。 以下是其中5個範例。
StartTime | EndTime | 州/省 | EventType | DamageProperty |
---|---|---|---|---|
2007-01-13T08:45:00Z | 2007-01-13T10:30:00Z | 德克薩斯州 | 洪水 | 0 |
2007-01-13T09:30:00Z | 2007-01-13T21:00:00Z | 德克薩斯州 | 洪水 | 0 |
2007-01-13T09:30:00Z | 2007-01-13T21:00:00Z | 德克薩斯州 | 洪水 | 0 |
2007-01-15T22:00:00Z | 2007-01-16T22:00:00Z | 德克薩斯州 | 洪水 | 20000 |
2007-03-12T02:30:00Z | 2007-03-12T06:45:00Z | 德克薩斯州 | 洪水 | 0 |
... | ... | ... | ... | ... |
排序結果
若要檢視德克薩斯州造成最大損壞的最上層洪水,請使用 排序 運算符根據數據行以遞減順序 DamageProperty
排列數據列。 預設排序順序為遞減。 若要依遞增順序排序,請指定 asc
。
StormEvents
| where State == 'TEXAS' and EventType == 'Flood'
| sort by DamageProperty
| project StartTime, EndTime, State, EventType, DamageProperty
輸出
StartTime | EndTime | 州/省 | EventType | DamageProperty |
---|---|---|---|---|
2007-08-18T21:30:00Z | 2007-08-19T23:00:00Z | 德克薩斯州 | 洪水 | 5000000 |
2007-06-27T00:00:00Z | 2007-06-27T12:00:00Z | 德克薩斯州 | 洪水 | 1200000 |
2007-06-28T18:00:00Z | 2007-06-28T23:00:00Z | 德克薩斯州 | 洪水 | 1000000 |
2007-06-27T00:00:00Z | 2007-06-27T08:00:00Z | 德克薩斯州 | 洪水 | 750000 |
2007-06-26T20:00:00Z | 2007-06-26T23:00:00Z | 德克薩斯州 | 洪水 | 750000 |
... | ... | ... | ... | ... |
取得前 n 個數據 列
top 運算符會傳回依指定數據行排序的前 n 個數據列。
下列查詢會傳回造成最受損財產的五起德克薩斯洪水。
StormEvents
| where State == 'TEXAS' and EventType == 'Flood'
| top 5 by DamageProperty
| project StartTime, EndTime, State, EventType, DamageProperty
輸出
StartTime | EndTime | 州/省 | EventType | DamageProperty |
---|---|---|---|---|
2007-08-18T21:30:00Z | 2007-08-19T23:00:00Z | 德克薩斯州 | 洪水 | 5000000 |
2007-06-27T00:00:00Z | 2007-06-27T12:00:00Z | 德克薩斯州 | 洪水 | 1200000 |
2007-06-28T18:00:00Z | 2007-06-28T23:00:00Z | 德克薩斯州 | 洪水 | 1000000 |
2007-06-27T00:00:00Z | 2007-06-27T08:00:00Z | 德克薩斯州 | 洪水 | 750000 |
2007-06-26T20:00:00Z | 2007-06-26T23:00:00Z | 德克薩斯州 | 洪水 | 750000 |
注意
運算子的順序很重要。 如果您將之前where
放在top
這裡,您將會得到不同的結果。 這是因為每個運算子會依序轉換數據。 若要深入瞭解,請參閱 表格式表達式語句。
建立計算結果欄
使用 project
僅指定您想要檢視的數據行,並使用 extend
將匯出數據行附加至數據表結尾。
下列查詢會建立計算Duration
結果列,其與之間的差異StartTime
EndTime
。 由於我們只想要檢視幾個選取的數據行,因此在此情況下,使用 project
是較佳的選擇。
StormEvents
| where State == 'TEXAS' and EventType == 'Flood'
| top 5 by DamageProperty desc
| project StartTime, EndTime, Duration = EndTime - StartTime, DamageProperty
輸出
StartTime | EndTime | 期間 | DamageProperty |
---|---|---|---|
2007-08-18T21:30:00Z | 2007-08-19T23:00:00Z | 1.01:30:00 | 5000000 |
2007-06-27T00:00:00Z | 2007-06-27T12:00:00Z | 12:00:00 | 1200000 |
2007-06-28T18:00:00Z | 2007-06-28T23:00:00Z | 05:00:00 | 1000000 |
2007-06-27T00:00:00Z | 2007-06-27T08:00:00Z | 08:00:00 | 750000 |
2007-06-26T20:00:00Z | 2007-06-26T23:00:00Z | 03:00:00 | 750000 |
如果您查看計算數據 Duration
行,您可能會注意到造成最大破壞的洪水也是最長的洪水。
使用 extend
來檢視計算 Duration
結果列以及所有其他數據行。 數據 Duration
行會新增為最後一個數據行。
StormEvents
| where State == 'TEXAS' and EventType == 'Flood'
| top 5 by DamageProperty desc
| extend Duration = EndTime - StartTime
輸出
StartTime | EndTime | ... | 期間 |
---|---|---|---|
2007-08-18T21:30:00Z | 2007-08-19T23:00:00Z | ... | 1.01:30:00 |
2007-06-27T00:00:00Z | 2007-06-27T12:00:00Z | ... | 12:00:00 |
2007-06-28T18:00:00Z | 2007-06-28T23:00:00Z | ... | 05:00:00 |
2007-06-27T00:00:00Z | 2007-06-27T08:00:00Z | ... | 08:00:00 |
2007-06-26T20:00:00Z | 2007-06-26T23:00:00Z | ... | 03:00:00 |
將值從一個集合對應到另一個集合
靜態對應是變更結果呈現方式的實用技術。 在 KQL 中,執行靜態對應的方法之一是使用動態字典和存取子將值從一個集合對應到另一個集合。
let sourceMapping = dynamic(
{
"Emergency Manager" : "Public",
"Utility Company" : "Private"
});
StormEvents
| where Source == "Emergency Manager" or Source == "Utility Company"
| project EventId, Source, FriendlyName = sourceMapping[Source]
輸出
EventId | 來源 | FriendlyName |
---|---|---|
68796 | 緊急經理 | 公開 |
... | ... | ... |
72609 | 公用程式公司 | 私用 |
... | ... | ... |
後續步驟
現在您已熟悉撰寫 Kusto 查詢的基本概念,請繼續進行下一個教學課程,並瞭解如何使用聚合函數來深入瞭解您的數據。