共用方式為


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

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

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

注意

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

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

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

必要條件

計數資料列

首先, 使用 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 12554 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
雷暴風
冰雹
山洪暴發
乾旱
冬季天氣
冬季風暴
大雪
強風
結霜/凍結
洪水
...

依條件篩選

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

下列查詢會尋找特定 StateEventType中的 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結果列,其與之間的差異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 來源 FriendlyName
68796 緊急經理 公開
... ... ...
72609 公用程式公司 私用
... ... ...

後續步驟

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