Azure - 尝试使用一下Kusto Query Language(KQL)

1.简单介绍

微软的产品中有时会看到KQL(Kusto Query Language)的身影,比如在Azure Monitor, Azure Sentinel, Microsoft Fabric等服务平台进行数据查询时候,可能会使用到KQL。Microsoft Fabric中的Real-time eventstreams最后有可能存储到eventhouse的KQL database中,这时候也是使用KQL进行查询操作的。相对于SQL, KQL更加简洁,但是一般需要通过transformer来将KQL转换成engine的native language。SQL相对KQL更通用一些,同时有更多内置的functions可以使用。

这边将尝试简单使用一下KQL进行log查询

2.具体说明

KQL是一个强大的查询语言,可以用来查询结构化,半结构化,非结构化的数据的。

KQL的语句分成三种类型

  1. Tabular expression statement
  • 输入和输出都是table类型数据,语法如下,也可以参考mslearn文章
  1. Let statement
  • 为变量赋值的语句,和js有点像
  1. Set statement
  • 使用Set语句可以设置KQL 查询请求的属性,从而改变查询的方式和返回的结果

2.1 实践一下

假定以如下AppExceptiongs table的数据来进行KQL查询,

2.1.1 普通查询
  1. 获取两分钟内发生在特定ClientCity的app exection信息,

    AppExceptions
    | where TimeGenerated > ago(2min)
    | where ClientCity == "Washington"

点击Run按钮,发现有结果返回,

2.1.2 Project 的使用

Project可以选择要包含,删除,重命名在结果集中的列

假定已经获取了过去6小时内App exception的统计数据

假定只要ClientCity, CityStateOrProvince和ExceptionCount列就可以了,当在编辑窗口中输入project关键字时候,发现有5个操作可以使用,根据具体的场景选择即可。这边选择的是project-away,用来删除特定的列。

复制代码
AppExceptions 
| where  TimeGenerated > ago(6hour)
| summarize ExceptionCount=  count() by ClientStateOrProvince, ClientCity, ClientCountryOrRegion
| order by ExceptionCount desc 
| where ClientCity != ""
| project-away ClientCountryOrRegion
2.1.3 Extend的使用

Extend可以创建一个计算列并将新列添加到结果集中

假定当前已经使用KQL语句查询出App usage的数据,现在打算基于ResourceUri列,使用extend新建一个列,要求移除前面的/subscriptions

复制代码
Usage 
| where  TimeGenerated > ago(6hour)
| project  TimeGenerated, ResourceUri,DataType, Solution
| extend ResourceUriUpdated = substring(ResourceUri,string_size("/subscriptions"),string_size(ResourceUri) - string_size("/subscriptions"))
| project-away ResourceUri

运行之后,结果中多出来新建的列ResourceUriUpdated,同时之前的ResourceUri列也删除了。

2.1.4 使用render制作chart

按照ClientCity统计过去1小时内出现的App exection

复制代码
AppExceptions 
| where  TimeGenerated > ago(1hour) 
| summarize count() by ClientCity
| render piechart 
2.1.5 Let的使用

let语句允许声明和重用变量,可以声明动态表或者列表

对特定时间段内发生的App exception进行数量统计,

2.1.6 Set的使用

set可以通过设置请求属性来改变KQL的查询行为和返回结果,比如设置query_take_max_records来限制返回记录的数量,类似于 | take <number>

2.1.7 其他

以上只尝试了KQL其中几个Operator/Function,更多的可以参考mslearn文章

微软也提供了KQL explorer和KQL CLI来更方便地使用KQL。

3.总结

本文简单记录了一下KQL的使用过程。KQL的细节其实也挺多的。当前随着大语言模型的普及,我们可以使用Microsoft 365 Copilot或者GitHub Copilot进行KQL语句的生成,这样我们只需要用自然语言来描述需求,Copilot就能生成一个KQL语句给我们了。

本文如果哪里有错误,麻烦告之,谢谢谢谢!

相关推荐
yio_yin2 小时前
Spring事务管理(数据一致性)
数据库·sql·spring
Csvn4 小时前
📊 SQL 入门 Day 9:CTE(公用表表达式)— 让 SQL 像写代码一样优雅
后端·sql
虹科网络安全4 小时前
艾体宝新闻|从 SQL 注入到服务器接管:CVE-2026-57517 暴露 Web 管理面板的供应链与安全编码风险
服务器·前端·sql
Databend6 小时前
用 QUALIFY 写出更清晰的窗口函数 SQL
数据库·sql·数据分析
难寻安逸7 小时前
DVWA-使用sqlmap 进行sql注入过程
数据库·sql·网络安全
Csvn18 小时前
📊 SQL 入门 Day 8:集合操作 — 用 SQL 做数学里的"并交差"
后端·sql
Irene19911 天前
大数据开发的常见实践:把 SQL 直接写在 Shell 脚本里 ER图 数据血缘
sql·数据血缘·er
川石课堂软件测试1 天前
安全测试|常见SQL注入攻击方式、实例及预防
服务器·数据库·sql·功能测试·测试工具·安全·单元测试
qq_366086221 天前
sql 查询中关于 null 值判断的问题
数据库·sql
金伟API10241 天前
常见的SQL面试题:经典50例
数据库·人工智能·笔记·sql·学习