通过


你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

参考文档的语法约定

使用 “版本 ”下拉列表切换服务。 了解有关导航的详细信息
适用于: ✅ Microsoft Fabric ✅ Azure 数据资源管理器 ✅ Azure Monitor ✅ Microsoft Sentinel

本文概述了 Kusto 查询语言(KQL)和管理命令参考文档中遵循的语法约定。

开始学习 Kusto 查询语言的一个好位置是了解整体查询结构。 查看 Kusto 查询时,你注意到的第一件事是使用管道符号 (|)。 Kusto 查询的结构首先从数据源获取数据,然后通过 管道传递数据,每个步骤提供某种级别的处理,然后将数据传递到下一步。 在管道的末尾,你将获得最终结果。 实际上,这是我们的管道:

Get Data | Filter | Summarize | Sort | Select

通过此概念,在管道中传递数据可以直观地形成一种结构,因为很容易在每一步创建数据的精神图片。

为了说明这一点,让我们看看以下查询,该查询将查看 Microsoft Entra 登录日志。 在通读每行时,可以看到指示数据发生情况的关键字。 我们已将管道中的相关阶段作为注释包含在每行中。

注释

可以通过用双斜杠//()在查询中的任何行前面添加注释。

SigninLogs                              // Get data
| evaluate bag_unpack(LocationDetails)  // Ignore this line for now; we'll come back to it at the end.
| where RiskLevelDuringSignIn == 'none' // Filter
   and TimeGenerated >= ago(7d)         // Filter
| summarize Count = count() by city     // Summarize
| sort by Count desc                    // Sort
| take 5                                // Select

由于每个步骤的输出都作为下一步的输入,因此步骤的顺序可以确定查询的结果并影响其性能。 必须根据要退出查询的内容对步骤进行排序。

小窍门

  • 一个很好的经验法则是尽早筛选数据,因此你只会在管道中传递相关数据。 这极大地提高了性能,并确保不会意外地在汇总步骤中包含不相关的数据。
  • 本文指出了一些要记住的其他最佳做法。 有关更完整的列表,请参阅 查询最佳做法

语法约定

约定 Description
Block 要按所示输入的字符串文本。
Italic 使用函数或命令时要提供的值的参数。
[ ] 表示封闭项是可选的。
( ) 表示至少需要一个封闭项。
|(管道) 在方括号或圆括号内使用,表示可以指定由管道字符分隔的项之一。 在此窗体中,管道等效于逻辑 OR 运算符。 在块(|)中时,管道是 KQL 查询语法的一部分。
[, ...] 指示可以多次重复上述参数,用逗号分隔。
; 查询语句终止符。

例子

标量函数

此示例显示了 哈希函数的语法和示例用法,然后说明了每个语法组件如何转换为示例用法。

Syntax

hash( source [,mod])

示例用法

hash("World")
  • 函数的名称和 hash左括号的输入完全如上所示。
  • “World”作为所需 参数的参数传递。
  • 没有为 mod 参数传递任何参数,该参数是可选的,如方括号所示。
  • 右括号的输入完全如上所示。

表格运算符

此示例显示 排序运算符的语法和示例用法,后跟每个语法组件如何转换为示例用法的说明。

Syntax

T| sort bycolumn [] [asc | descnulls first | nulls last] [, ...]

示例用法

StormEvents
| sort by State asc, StartTime desc
  • StormEvents 表作为所需 T 参数的参数传递。
  • | sort by 输入的完全如上所示。 在这种情况下,管道字符是 表格表达式语句 语法的一部分,由块文本表示。 若要了解详细信息,请参阅 什么是查询语句
  • 状态列作为具有可选标志的必需asc参数的参数传递。
  • 逗号后,将传递另一组参数:带可选 desc 标志的 StartTime 列。 [, ...] 语法指示可以传递更多的参数集,但不是必需的。

使用可选参数

若要为另一个可选参数之后的可选参数提供参数,必须为以前的参数提供参数。 此要求是因为参数必须遵循语法中指定的顺序。 如果没有要为参数传递的特定值,请使用同一类型的空值。

顺序可选参数示例

请考虑 http_request插件的语法:

evaluate http_request ( Uri [,RequestHeaders [,选项]] )

RequestHeadersOptions动态类型的可选参数。 若要为 Options 参数提供参数,还必须提供 RequestHeaders 参数的参数。 以下示例演示如何为第一个可选参数 RequestHeaders 提供空值,以便为第二个可选参数 Options 指定值。

evaluate http_request ( "https://contoso.com/", dynamic({}), dynamic({ EmployeeName: Nicole }) )