KQL 查詢的類型

已完成

您已在上一個單元中了解 KQL 查詢的結構。 現在讓我們深入了解 KQL 查詢的不同部分和類型。

本單元提供查詢陳述式和函式的概觀。 在 KQL 中,所有查詢都包含一或多個查詢陳述式。 這些陳述式只會影響使用的特定查詢,除非明確儲存供日後使用。 最常見的查詢陳述式類型是表格式運算式陳述式let 陳述式。 除了其內建函式的廣泛程式庫之外,KQL 還允許儲存或定義用於單一查詢的使用者定義函式

表格式運算式陳述式

大部分查詢至少會使用一個表格式運算式陳述式,這表示其輸入和輸出都包含資料表或表格式資料集。 這些陳述式通常包含運算子,每個運算子的開頭都是表格式輸入,並傳回表格式輸出。

KQL 提供廣泛的運算子,範圍從簡單運算子 (例如 countsortwhere) 到較複雜的運算子 (例如 parsejoinrender)。

例如,下列查詢包含四個表格式運算式陳述式:

StormEvents // tabular expression statement 1
| where EventType == "Flood" // tabular expression statement 2
| sort by DamageProperty asc // tabular expression statement 3
| take 10 // tabular expression statement 4

let 陳述式

let 陳述式會定義名稱與運算式之間的繫結。 let 陳述式可用來將長段查詢分解為較易於理解的小型具名部分。

例如,下列查詢中的 let 陳述式是用來定義純量值:

let n = 10;  // number
let place = "VIRGINIA";  // string
let cutoff = ago(12345d); // datetime 
StormEvents 
| where StartTime > cutoff and State == place 
| take n

內建函式

內建函式是由 KQL 定義的硬式編碼函式,無法修改。 KQL 有豐富的函式程式庫可供使用,其可在官方 KQL 文件中找到。 函式的範圍從簡單的排序和比對,到複雜的統計和地理空間函式。

例如,下列 strcat() 函式會串連字串引數:

print str = strcat("hello", " ", "world")

使用者自訂函數

使用者定義函式如其名稱,是由使用者所定義。 使用者定義的函式可以分成兩個類型:

  • 預存函式:儲存和管理的資料庫結構描述實體的使用者定義函式,類似於資料表。 不同的產品會使用不同的方式來儲存函式。

    例如,Azure 資料總管中的下列查詢會儲存採用參數的函式:

    .create function
    with (docstring = 'Demo function with parameter', folder='Demo')
     MyFunction2(myLimit: long)  {StormEvents | take myLimit}
    

    在其他環境中,例如 Azure 監視器和 Microsoft Sentinel,可以透過 UI 儲存查詢。

  • 查詢定義的函式:在單一查詢範圍內定義和使用的使用者定義的函式。 這類函式的定義會透過 let 陳述式來完成。

    例如,下列查詢會定義,然後使用函式 f

    let f=(a: string, b: string) {
        strcat(a, " (la la la) ", b)
    };
    print f("hello", "world")