Kusto 查询语言 (KQL) 图形语义概述
通过 Kusto 查询语言 (KQL) 中的图形语义,可以将数据建模和查询为图形。 图形的结构包括连接它们的节点和边缘。 节点和边缘可以具有描述它们的属性。
图形可用于表示涉及多对多、分层或联网的关系(例如社交网络、建议系统、连接资产或知识图形)的复杂动态数据。 例如,下图演示了一个由四个节点和三个边缘组成的社交网络。 每个节点都有一个属性作为其名称,例如 Bob,并且每个边缘都有一个属性作为其类型,例如 reportsTo。
图形以不同于关系数据库的方式存储数据,这些数据库使用表,需要索引和联接来连接相关数据。 在图形中,每个节点都有一个指向其邻居(相邻)的直接指针,因此无需为任何内容编制索引或联接,这样可轻松快捷地遍历图形。 图形查询可以使用图形结构和含义执行复杂而强大的操作,例如查找路径、模式、最短距离、社区或中心性度量值。
可以使用 KQL 图形语义创建和查询图形,该语义具有一种简单直观的语法,适用于现有 KQL 功能。 还可以将图形查询与其他 KQL 功能(例如基于时间、基于位置的查询和机器学习查询)混合,以便执行更高级且强大的数据分析。 结合使用 KQL 和图形语义,可以获得具有图形灵活性和表现力的 KQL 查询的速度和规模。
例如,您可以使用:
- 基于时间的查询,用来分析一段时间内图形的演变,例如网络结构或节点属性的变化
- 地理空间查询,用来分析节点和边缘的空间分布或邻近度,例如位置或距离对关系的影响
- 机器学习查询,用来将各种算法或模型应用于图形数据,例如聚类分析、分类或异常情况检测
它是如何工作的?
Kusto 中图形语义的每个查询都需要创建新的图形表示形式。 使用图形运算符将边缘和(可选)节点的表格表达式转换为数据的图形表示形式。 创建图形后,可以应用不同的操作来进一步增强或检查图形数据。
图形语义扩展使用内存中图形引擎,它适用于群集内存中的数据,图形分析具有交互性和速度。 图形表示形式的内存消耗受节点数和边缘数及其各自的属性影响。 图形引擎使用属性图形模型,该模型支持节点和边缘的任意属性。 它还与 KQL 的所有现有标量运算符集成,使用户能够编写具有表达力的复杂图形查询,使用 KQL 的完整功能。
为什么在 KQL 中使用图形语义?
在 KQL 中使用图形语义有几个原因,例如以下示例:
KQL 不支持递归联接,因此必须显式定义要运行的遍历(请参阅方案:朋友的朋友)。 可以使用 make-graph 运算符定义变量长度的跃点,当关系距离或深度未固定时,这非常有用。 例如,可以使用此运算符查找在图形中连接的所有资源,或者从交通网络中的源到达的所有位置。
时间感知图形是 KQL 中图形语义的独特功能,允许用户随时间推移将图形数据建模为一系列图形操作事件。 用户可以检查图形随时间的变化,例如图形的网络结构或节点属性的变化,或者图形事件或异常的发生方式。 例如,用户可以使用时序查询来发现图形数据中的趋势、模式或离群值,例如网络密度、中心性或模块化随时间的变化
KQL 查询编辑器的 Intellisense 功能可帮助用户编写和执行查询语言中的查询。 它提供语法突出显示、自动完成、错误检查和建议功能。 它还通过提供特定于图形的关键字、运算符、函数和示例来帮助用户使用图形语义扩展,以指导用户完成图形创建和查询过程。
限制
以下是 KQL 中图形语义功能的一些主要限制:
- 只能创建或查询适合一个群集节点内存的图形。
- 图形数据不会继续存在,也不会分布在群集节点之间,并且会在查询执行后丢弃。
因此,在 KQL 中使用图形语义功能时,应考虑创建和查询大型或密集图形的内存消耗和性能影响。 在可能的情况下,应使用筛选器、投影和聚合来减小图形大小并降低复杂性。