教學課程:瞭解常見運算符

Kusto 查詢語言 (KQL) 可用來在 Azure Data ExplorerAzure 監視器 Log AnalyticsAzure Sentinel 等等中撰寫查詢。 本教學課程是用來存取和分析數據的基本 KQL 運算符簡介。

如需如何在 Azure 監視器中查詢記錄的詳細指引,請參閱 開始使用記錄查詢

注意

找不到您要尋找的內容嗎? 本文最近已分割,如下所示:

在本教學課程中,您將了解如何:

本教學課程中的範例會 StormEvents 使用可在 說明 叢集中公開提供的數據表。 若要使用您自己的數據進行探索, 請建立您自己的免費叢集

必要條件

  • 用來登入說明叢集的 Microsoft 帳戶或 Microsoft Entra 使用者身分識別

計數資料列

首先,使用 count 運算符來尋找數據表中的 StormEvents Storm 記錄數目。

StormEvents 
| count

輸出

計數
59066

查看數據的範例

若要了解數據,請使用 take 運算符來檢視記錄範例。 這個運算符會從數據表傳回指定數目的任意數據列,這對於預覽一般數據結構和內容很有用。

StormEvents 
| take 5

下表只顯示22個傳回數據行的6個。 若要查看完整的輸出,請執行查詢。

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 12554 68796 密西西比州 Thunderstorm Wind ...
2007-12-30T16:00:00Z 2007-12-30T16:05:00Z 11749 64588 喬治亞州 Thunderstorm Wind ...
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
喬治亞州 Thunderstorm Wind 2000
密西西比州 Thunderstorm Wind 20000

列出唯一值

根據上一個查詢的結果,它似乎有多個類型的 Storm。 使用 相異 運算符來列出所有唯一的 storm 類型。

StormEvents 
| distinct EventType

數據表中有 46 種類型的 Storm。 以下是其中10個範例。

EventType
Thunderstorm Wind
Hail
Flash Flood
乾旱
冬季天氣
暴風雪
大雪
強風
水/凍結
Flood
...

依條件篩選

where 運算符會根據特定準則篩選數據列。

下列查詢會在特定 EventType的特定 中State尋找 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 德克薩斯州 Flood 0
2007-01-13T09:30:00Z 2007-01-13T21:00:00Z 德克薩斯州 Flood 0
2007-01-13T09:30:00Z 2007-01-13T21:00:00Z 德克薩斯州 Flood 0
2007-01-15T22:00:00Z 2007-01-16T22:00:00Z 德克薩斯州 Flood 20000
2007-03-12T02:30:00Z 2007-03-12T06:45:00Z 德克薩斯州 Flood 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 德克薩斯州 Flood 5000000
2007-06-27T00:00:00Z 2007-06-27T12:00:00Z 德克薩斯州 Flood 1200000
2007-06-28T18:00:00Z 2007-06-28T23:00:00Z 德克薩斯州 Flood 1000000
2007-06-27T00:00:00Z 2007-06-27T08:00:00Z 德克薩斯州 Flood 750000
2007-06-26T20:00:00Z 2007-06-26T23:00:00Z 德克薩斯州 Flood 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 德克薩斯州 Flood 5000000
2007-06-27T00:00:00Z 2007-06-27T12:00:00Z 德克薩斯州 Flood 1200000
2007-06-28T18:00:00Z 2007-06-28T23:00:00Z 德克薩斯州 Flood 1000000
2007-06-27T00:00:00Z 2007-06-27T08:00:00Z 德克薩斯州 Flood 750000
2007-06-26T20:00:00Z 2007-06-26T23:00:00Z 德克薩斯州 Flood 750000

注意

運算子的順序很重要。 如果您在此放置 top 之前 where ,將會得到不同的結果。 這是因為每個運算子會依序轉換數據。 若要深入瞭解,請參閱 表格式表達式語句

建立計算結果欄

項目擴充運算元都可以建立計算結果列。

使用 project 只指定您想要檢視的數據行,並使用 extend 將匯出數據行附加至數據表結尾。

下列查詢會建立計算結果Duration列,StartTimeEndTime其與之間的差異。 由於我們只想要檢視幾個選取的數據行,因此在此情況下,使用 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 Source FriendlyName
68796 Emergency Manager 公開
... ... ...
72609 公用程式公司 私人
... ... ...

後續步驟

既然您已熟悉撰寫 Kusto 查詢的基本概念,請繼續進行下一個教學課程,並瞭解如何使用聚合函數來深入瞭解您的數據。