Kusto 查询语言 (KQL) 概述
Kusto 查询语言 (KQL) 是一种功能强大的工具,用于探索数据、发现模式、识别异常和离群值、创建统计建模等。 KQL 是一种简单但功能强大的语言,可用于查询结构化数据、半结构化数据和非结构化数据。 这种语言富有表达力、易于阅读和理解查询意向,并已针对创作体验进行优化。 Kusto 查询语言最适合用于查询遥测数据、指标和日志,并深度支持文本搜索和分析、时序运算符和函数、分析和聚合、地理空间、矢量相似性搜索,以及许多其他为数据分析提供最佳语言的语言构造。 该查询使用以类似于 SQL 的层次结构组织的架构实体:数据库、表和列。
本文提供查询语言的说明,并提供可帮助你开始编写查询的实践练习。 若要访问查询环境,请使用 Azure 数据资源管理器 Web UI。 若要了解如何使用 KQL,请参阅教程:了解常用运算符。
什么是 Kusto 查询?
Kusto 查询是处理数据并返回结果的只读请求。 该请求用纯文本形式表示,使用的数据流模型易于读取、创作和自动执行。 Kusto 查询由一个或多个查询语句组成。
什么是查询语句?
有三种类型的用户查询语句:
所有查询语句都用 ;
(分号)分隔,并且仅影响当前查询。
注意
有关应用程序查询语句的信息,请参阅应用程序查询语句。
最常见的查询语句类型为表格表达式语句,这意味着它的输入和输出都包含表或表格数据集。 表格语句包含零个或多个运算符,其中每个运算符都以表格输入开头,并返回表格输出。 运算符按 |
(竖线)进行排序。 数据从一个运算符流向或发送到下一个运算符。 每个步骤都将对数据进行筛选或操作,然后将结果用于接下来的步骤。
这类似于一个漏斗图,开始时可获得一个完整数据表。 每次数据通过另一个运算符时,都会经过筛选、重排或汇总。 由于通过管道将信息从一个运算符发送到另一个运算符是按顺序进行操作,因此查询运算符顺序非常重要,并且可能会影响结果和性能。 在漏斗图的末尾将会得到精简的输出。
接下来看一个示例查询。
StormEvents
| where StartTime between (datetime(2007-11-01) .. datetime(2007-12-01))
| where State == "FLORIDA"
| count
计数 |
---|
28 |
注意
KQL 对于所有内容(表名、表列名、运算符、函数等)都区分大小写。
此查询有一个表格表达式语句。 该语句以对“StormEvents”表的引用开头,并包含多个运算符(where
和 count
),每个运算符用竖线进行分隔。 源表的数据行先按 StartTime 列的值进行筛选,然后再按 State 列的值进行筛选。 在上一行中,查询返回包含一列和一行的表,其中包含剩余行的计数。
若要尝试更多 Kusto 查询,请参阅教程:编写 Kusto 查询。
管理命令
与 Kusto 查询形成对比,管理命令是向 Kusto 发出的请求,请求处理或修改数据或元数据。 例如,以下管理命令创建一个新的 Kusto 表,该表包含两个列,即 Level
和 Text
:
.create table Logs (Level:string, Text:string)
管理命令有其自己的语法(该语法不属于 Kusto 查询语言语法,虽然二者的许多概念相同)。 具体说来,管理命令不同于查询的一点是:命令文本中的第一个字符为句点 (.
)(此字符不能启动查询)。
这种区别可以防范许多种类的安全攻击,因为无法在查询中嵌入管理命令。
并非所有管理命令都修改数据或元数据。 以 .show
开头的一大类命令用于显示元数据或数据。 例如,.show tables
命令返回一个列表,其中包含当前数据库中的所有表。
有关管理命令详细信息,请参阅管理命令概述。
其他服务中的 KQL
KQL 由许多其他 Microsoft 服务使用。 有关在这些环境中使用 KQL 的具体信息,请参阅以下链接:
- Azure Monitor 中的日志查询
- Microsoft Sentinel 中的 Kusto 查询语言
- 了解 Azure Resource Graph 查询语言
- 使用 Microsoft 365 Defender 中的高级搜寻功能主动搜寻威胁
- CMPivot 查询