KQL 查询的类型
你在上一单元中了解了 KQL 查询的结构。 现在,我们来更深入地了解 KQL 查询的不同部分和类型。
本单元概述了查询语句和函数。 在 KQL,所有查询均由一个或多个查询语句组成。 除非显式存储供将来使用,否则这些语句仅影响使用它们的特定查询。 最常见的查询语句类型是表格表达式语句和 let 语句。 除了丰富的内置函数库外,KQL 还允许使用用户定义函数 - 可存储或定义这些函数,便于在单个查询中使用。
表格表达式语句
大多数查询至少使用一个表格表达式语句,这意味着它的输入和输出都包含表或表格数据集。 这些语句通常包含运算符,其中每个运算符都以表格输入开头并返回表格输出。
KQL 提供了多种运算符,从简单运算符(例如 count
、sort
和 where
)到更复杂的运算符(例如 parse
、join
和 render
)都包含在内。
例如,以下查询包含 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")