KQL的结构

发布时间 2024-01-03 14:59:08作者: 安全泰哥

KQL,即Kusto Query Language,是一种用于查询大规模数据集(如日志、数据库、文件等)的强大查询语言。它主要用于Azure Data Explorer和Microsoft 365 Defender等服务。KQL包含多种类型的语句和操作符,以支持复杂的数据探索和分析。

KQL(Kusto Query Language)语句通常包含以下几个基本部分,每个部分都承担着特定的功能,以实现复杂的数据查询和分析:

 

0. 控制流和变量:

使用let定义变量,if进行条件判断。

例子:let threshold = 100;

1.数据源:

这是查询的起始点,指定了要查询的数据表或数据集。例如,在Azure Data Explorer中,一个数据源可能是一个表名。

例子:Logs

2.过滤器:

过滤器用于缩小查询的范围,只选择符合特定条件的数据行。这可以通过where子句实现。

例子:where Timestamp > ago(7d)

3.数据处理

数据聚合:

使用summarize子句对数据进行聚合,通常与by子句一起使用,后者指定聚合的键。

例子:summarize Count = count() by UserId

数据排序:

使用sort by或order by对结果进行排序。

例子:sort by Count desc

连接其他数据:

使用join子句将当前的数据集与另一个数据集结合起来。

例子:join kind=inner UserProfiles on UserId

数据呈现:

数据列数限制

通过project子句来选择需要显示的列。这类似于SQL中的SELECT子句。

例子:project UserId, Timestamp, Activity

数据转换或扩展:

使用extend子句创建新的列或使用project-rename重命名现有列。

例子:extend NewColumn = UserId + '_' + Activity

数据行数限制:

使用take或limit子句限制返回的数据行数。

例子:take 100

连接和关联(Joins and Relationships):

join:将两个或多个数据表基于共同的字段进行连接。

union:合并两个或多个表。

时间处理(Time Handling):

make-series:创建时间序列数据。

datetime:生成或解析日期时间值。

字符串处理(String Handling):

contains:检查是否包含子字符串。

startswith/endswith:检查字符串的开始或结束。

split:分割字符串。

示例查询

假设我们有一个名为SalesData的表,包含销售记录,具有如下列:TransactionId, ProductId, SaleAmount, Timestamp 和 Region。

现在我们想要查询过去30天内,每个产品在不同区域的总销售额,并按销售额降序排列前10个结果。

KQL语句

let startDate = ago(30d); SalesData | where Timestamp > startDate | summarize TotalSales = sum(SaleAmount) by ProductId, Region | order by TotalSales desc | take 10

 

各部分解释

 

数据源:

  • SalesData: 这是查询的起始点,指定了要查询的数据表。

控制流和变量定义:

  • let startDate = ago(30d);: 这里定义了一个变量startDate,表示当前时间向前30天的时间点。

过滤器:

  • where Timestamp > startDate: 这个过滤器缩小了查询的范围,只选择过去30天内的数据。

数据聚合:

  • summarize TotalSales = sum(SaleAmount) by ProductId, Region: 使用summarize对销售额进行求和,并按ProductId和Region分组,计算每个产品在每个区域的总销售额。

数据排序:

  • order by TotalSales desc: 将结果按总销售额降序排列。

数据限制:

  • take 10: 限制结果只显示前10行。

这个查询的执行过程是:首先,它定义了一个时间范围变量startDate,接着从SalesData表中选择过去30天的记录,然后按产品和区域对销售额进行汇总,最后按总销售额降序排列,并仅展示前10个最高的结果。这种查询对于理解特定时间段内的销售趋势和区域表现非常有用。