KQL 查询的类型

已完成

你在上一单元中了解了 KQL 查询的结构。 现在,我们来更深入地了解 KQL 查询的不同部分和类型。

本单元概述了查询语句和函数。 在 KQL,所有查询均由一个或多个查询语句组成。 除非显式存储供将来使用,否则这些语句仅影响使用它们的特定查询。 最常见的查询语句类型是表格表达式语句let 语句。 除了丰富的内置函数库外,KQL 还允许使用用户定义函数 - 可存储或定义这些函数,便于在单个查询中使用。

表格表达式语句

大多数查询至少使用一个表格表达式语句,这意味着它的输入和输出都包含表或表格数据集。 这些语句通常包含运算符,其中每个运算符都以表格输入开头并返回表格输出。

KQL 提供了多种运算符,从简单运算符(例如 countsortwhere)到更复杂的运算符(例如 parsejoinrender)都包含在内。

例如,以下查询包含 4 个表格表达式语句:

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 Monitor 和 Microsoft Sentinel)中,可以通过 UI 保存查询。

  • 查询定义的函数:这些用户定义函数在单个查询范围内进行定义和使用。 定义此类函数需使用 let 语句。

    例如,以下查询定义并使用了函数 f:

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