Kusto 查询语言 (KQL) 概述

Kusto 查询语言是一种功能强大的工具,用于探索数据、发现模式、识别异常和离群值、创建统计建模等。 该查询使用以类似于 SQL 的层次结构组织的架构实体:数据库、表和列。

什么是 Kusto 查询?

Kusto 查询是处理数据并返回结果的只读请求。 该请求用纯文本形式表示,使用的数据流模型易于读取、创作和自动执行。 Kusto 查询由一个或多个查询语句组成。

什么是查询语句?

有三种类型的用户查询语句

所有查询语句都用 ;(分号)分隔,并且仅影响当前查询。

注意

有关应用程序查询语句的信息,请参阅应用程序查询语句

最常见的查询语句类型为表格表达式语句,这意味着它的输入和输出都包含表或表格数据集。 表格语句包含零个或多个运算符,其中每个运算符都以表格输入开头,并返回表格输出。 运算符按 |(竖线)进行排序。 数据从一个运算符流向或发送到下一个运算符。 每个步骤都将对数据进行筛选或操作,然后将结果用于接下来的步骤。

这类似于一个漏斗图,开始时可获得一个完整数据表。 每次数据通过另一个运算符时,都会经过筛选、重排或汇总。 由于通过管道将信息从一个运算符发送到另一个运算符是按顺序进行操作,因此查询运算符顺序非常重要,并且可能会影响结果和性能。 在漏斗图的末尾将会得到精简的输出。

接下来看一个示例查询。

StormEvents 
| where StartTime between (datetime(2007-11-01) .. datetime(2007-12-01))
| where State == "FLORIDA"  
| count 

注意

KQL 对于所有内容(表名、表列名、运算符、函数等)都区分大小写。

此查询有一个表格表达式语句。 该语句以对“StormEvents”表的引用开头,并包含多个运算符(wherecount),每个运算符用竖线进行分隔。 源表的数据行先按 StartTime 列的值进行筛选,然后再按 State 列的值进行筛选。 在上一行中,查询返回包含一列和一行的表,其中包含剩余行的计数。

运行此查询以查看结果:

计数
28

若要尝试更多 Kusto 查询,请参阅教程:使用 Kusto 查询

控制命令

与 Kusto 查询形成对比,控制命令是向 Kusto 发出的请求,请求处理或修改数据或元数据。 例如,以下控制命令创建一个新的 Kusto 表,该表包含两个列,即 LevelText

.create table Logs (Level:string, Text:string)

控制命令有其自己的语法(该语法不属于 Kusto 查询语言语法,虽然二者的许多概念相同)。 具体说来,控制命令不同于查询的一点是:命令文本中的第一个字符为句点 (.)(此字符不能启动查询)。 这种区别可以防范许多种类的安全攻击,因为无法在查询中嵌入控制命令。

并非所有控制命令都修改数据或元数据。 以 .show 开头的一大类命令用于显示元数据或数据。 例如,.show tables 命令返回一个列表,其中包含当前数据库中的所有表。

有关控制命令详细信息,请参阅管理(控制命令)概述

后续步骤