Kusto 查询语言 (KQL):它是什么?
想知道什么是 KQL,以及是否有人在键盘上输入了错误的 SQL?在本文中,我们将介绍所有基础知识:什么是 KQL、它与 SQL 有何不同以及人们使用它来做什么。我们还将分享如何开始使用一些基本 KQL 查询示例。
什么是 KQL?
Kusto 查询语言 (KQL) 是一种只读请求语言,用于为 Azure 数据资源管理器 (ADX)、Azure Monitor Log Analytics、Azure Sentinel 等编写查询。请求以纯文本形式陈述,使用易于阅读、编写和自动化的数据流模型。
在 KQL 中,运算符通过 |(竖线)进行排序,数据在每个步骤中都会经过筛选或处理,然后才会进入下一步。这种信息的顺序管道使得查询运算符的顺序变得非常重要,这会影响结果和性能。
每个查询由一个或多个查询语句组成,这些查询语句可以是表格表达式语句、let 语句或 set 语句,所有语句之间用分号分隔。
KQL 是由 Microsoft 开发的,旨在纠正 SQL 的设计决策,并提供更直观、更强大的查询功能。例如,SQL 的结构以 SELECT 子句开头,这被视为阻碍了查询编写的自然流程。此外,SQL 的僵化结构需要繁琐的嵌套,并且针对不同场景的各种过滤子句也被视为令人困惑。
KQL 用于什么?
由于 KQL 不会修改数据,因此它仅用于获取、筛选、分析和可视化数据。KQL 擅长处理大量结构化和半结构化数据,并且在 Azure 数据资源管理器中特别有用,它可以快速、交互式地分析大量数据。
然而,KQL 除了数据探索之外还有其他优势,例如:
故障排除和诊断:凭借处理日志和遥测数据的能力,KQL 在识别异常、追踪错误和诊断系统问题方面发挥着至关重要的作用。
实时分析: KQL 擅长分析实时数据流,使其成为物联网数据分析、用户行为分析、应用程序性能监控等应用的理想选择。
数据可视化: KQL 查询可与 Azure 数据资源管理器和 Azure 仪表板结合使用,以创建直观、实时的数据可视化。
KQL 与 SQL:KQL 与 SQL 有何不同?
乍一看,SQL 和 KQL 除了名称之外还有很多相似之处。它们都用于检索数据,并且围绕数据库、表和列具有相似的层次结构。然而,它们的设计目的截然不同,因此在结构、用法和功能方面存在重大差异。
底层模型: KQL 使用数据流模型,其中每个步骤的输出和输入都是表格数据集,因此操作的顺序很重要。
用途: SQL 旨在管理关系数据库中的结构化数据。KQL 旨在查询实时分析场景中的大量结构化和半结构化数据,包括日志和遥测数据。
数据修改功能: SQL 是一种读写语言,这意味着它既可以获取也可以修改数据库中的数据。相比之下,KQL 是只读的,这意味着它只能用于查询和分析数据,而不能进行任何修改。
复杂性和学习曲线: SQL 以其复杂性而闻名,具有多个子句、子查询和复杂的连接功能,因此学习曲线更陡峭。相反,KQL 的设计更简单,专注于易于编写的日志查询,并提供内置函数来分析时间序列数据。
与 Azure 数据资源管理器集成: KQL 与 Azure 数据资源管理器原生集成,这意味着它在 Azure 生态系统中提供了更简化的性能和功能。SQL 虽然功能强大,但它是一种更通用的语言,并不专门与单个生态系统绑定。
从 SQL 过渡到 KQL
借助Microsoft 提供的便捷备忘单,您可以更轻松地从 SQL 过渡到 KQL ,该备忘单将 SQL 命令和概念映射到相应的 KQL。此备忘单涵盖了各种类别,例如从表中选择数据、空值评估、比较运算符、分组、聚合等。对于已经熟悉 SQL 并想学习 KQL 的人来说,这是一款很棒的工具。
微软还提供了将 SQL 查询转换为 KQL 的方法。通过在 SQL 查询前面添加注释行 -- 和关键字explain,您可以看到查询的 KQL 版本,这可以帮助您理解 KQL 语法和概念。
如何使用 KQL
虽然有关使用 KQL 的全面指南超出了本文的范围,但以下是有关使用该语言的简要概述:
设置:要开始使用 KQL,您需要有一个 Azure 帐户并设置 Azure 数据资源管理器。
基本查询:基本 KQL 查询遵循以下模式:<table_name> | where <condition> | project <columns>。例如,StormEvents | where State == "FLORIDA" | project StartTime, EndTime, State, EventType将返回佛罗里达州所有风暴事件的开始时间、结束时间、州和事件类型。
函数和运算符: KQL 支持各种运算符,用于算术、比较、逻辑运算和字符串操作。它还拥有丰富的函数库,用于数组处理、日期时间操作、机器学习等。
聚合和连接: KQL 支持通过聚合函数(如汇总、计数、平均值等)汇总数据。您还可以使用连接运算符在表之间执行连接,类似于 SQL 。
时间序列分析:使用make-series运算符,您可以创建时间序列并使用各种内置函数进行进一步分析。
在 KQL 中,所有内容都区分大小写,包括表名、表列名、运算符和函数
有关如何开始使用基本 KQL 配方进行 Azure 监控的详细概述,请查看 Amy Coughlin 的文章“如何使用 KQL 进行 Azure 监控(基本配方指南)”。
KQL 查询的一些示例
单语句 KQL 脚本
推文 | 其中语言 == “英语” | 汇总计数 = count() 按标签 | 按计数降序排序 | 取 10
因此,在此查询中,我们将分析一个名为Tweets的假设表,其中包含有关 Tweets 的数据(您猜对了)。以下是此查询的详细说明。
- Tweets:这指定了我们要查询的表。在本例中,它是包含推文数据的表。
- 其中 Language == "English":这是一个过滤器,仅选择 Language 列为 English 的行。管道符 | 用于将一个操作的输出传递到下一个操作。
- 按 Hashtags 汇总 Count = count():按 Hashtags 列对数据进行分组,并计算每组中的行数。每组的计数存储在名为 Count 的新列中。
- 按 Count desc 排序:按 Count 列的降序对输出进行排序。
- take 10:这将输出限制为前 10 行。
因此,总而言之,整个查询就是找到英语推文中最常用的 10 个主题标签。
多语句 KQL 脚本
让 TopHashtags = Tweets | 总结 Count = count() 按 Hashtags | 按 Count 降序排序 | 取 10;
TopHashtags | 项目标签
在此示例中,有两个查询语句。第一个语句创建一个名为TopHashtags的变量,该变量保存前 10 个主题标签。第二个语句仅从TopHashtags中投影或选择Hashtags列。这两个语句以分号分隔。
使用 KQL 查询检测未签名的驱动程序
下面是一个示例,说明安全分析师如何使用 KQL 通过查询设备事件日志并对数据应用过滤器来检测潜在的安全威胁(例如未签名的驱动程序)。
让 DriverLoads = DeviceImageLoadEvents | 其中 InitiatingProcessFileName == “spoolsv.exe”; DriverLoads
在此查询中,DeviceImageLoadEvents是被查询的表,where 运算符用于筛选数据。查询返回 InitiatingProcessFileName 等于“spoolsv.exe”的所有条目
KQL 命令和控制命令
除了 KQL 查询之外,Kusto 还支持控制命令。这些命令请求 Kusto 处理或修改数据或元数据。例如,控制命令可以创建新的 Kusto 表。
控制命令有自己的语法,与 KQL 语法不同。它们与查询的区别在于,命令文本中的第一个字符是点 (.) 字符,该字符不能启动查询。这种区别有助于通过禁止在查询中嵌入控制命令来防止安全攻击。
了解有关监视 Azure 数据的详细信息
如果您有兴趣了解 Azure 中可以生成值得使用 KQL 查询的数据的功能,请查看 Amy Coughlin 的 Azure 认证课程,标题为“ AZ-204:为 Microsoft Azure 开发解决方案”。 您还可以查看Pluralsight 的 Azure 数据学习路径,其中有适合所有人的视频课程,从 Azure 初学者到专业人士。
有关 KQL 的其他常见问题解答
KQL 容易学习吗?
是的!与 SQL 相比,KQL 的语法和结构设计得易于阅读和编写,这可能使它比 SQL 更适合新手使用。但是,与任何语言一样,掌握 KQL 需要练习和经验。
KQL 比 SQL 更好吗?
KQL 是否“优于”SQL 在很大程度上取决于具体用例。KQL 的数据流模型比 SQL 的刚性结构更直观、更灵活,尤其是对于复杂的数据分析任务而言。然而,SQL 仍然是关系数据库管理系统的标准,拥有庞大的用户群和生态系统。
免责声明:本内容来源于第三方作者授权、网友推荐或互联网整理,旨在为广大用户提供学习与参考之用。所有文本和图片版权归原创网站或作者本人所有,其观点并不代表本站立场。如有任何版权侵犯或转载不当之情况,请与我们取得联系,我们将尽快进行相关处理与修改。感谢您的理解与支持!
请先 登录后发表评论 ~