本文档概述了如何将图查询语言与 Spanner Graph 搭配使用,包括其图模式匹配语法,并介绍了如何针对图运行查询。借助 Spanner Graph,您可以运行查询来查找模式、遍历关系,并从属性图数据中获取数据分析洞见。
本文档中的示例使用您在设置和查询 Spanner Graph 中创建的图表架构。下图对此进行了说明。
运行 Spanner Graph 查询
您可以使用 Google Cloud 控制台、Google Cloud CLI、客户端库、REST API 或 RPC API 运行 Spanner 图查询。
Google Cloud 控制台
以下步骤介绍了如何在Google Cloud 控制台中运行查询。这些步骤假设您有一个名为 test-instance 的实例,其中包含一个名为 example-db 的数据库。如需了解如何创建包含数据库的实例,请参阅设置和查询 Spanner Graph。
在 Google Cloud 控制台中,前往 Spanner 实例页面。
点击名为
test-instance的实例。在数据库下,点击名为
example-db的数据库。打开 Spanner Studio,然后点击 新标签页或使用编辑器标签页。
在查询编辑器中输入查询。
点击运行。
gcloud CLI
如需使用 gcloud CLI 命令行工具提交查询,请执行以下操作:
安装 gcloud CLI(如果尚未安装)。
在 gcloud CLI 中,运行以下命令:
如需了解详情,请参阅 Spanner CLI 快速入门。
REST API
如需使用 REST API 提交查询,请使用以下命令之一:
如需了解详情,请参阅使用 REST API 查询数据和使用 REST 开始使用 Spanner。
RPC API
如需使用 RPC API 提交查询,请使用以下命令之一:
客户端库
如需详细了解如何使用 Spanner 客户端库运行查询,请参阅以下内容:
- 使用 Spanner C++ 客户端库进行查询
- 使用 Spanner C# 客户端库进行查询
- 使用 Spanner Go 客户端库进行查询
- 使用 Spanner Java 客户端库进行查询
- 使用 Spanner Node.js 客户端库进行查询
- 使用 Spanner PHP 客户端库进行查询
- 使用 Spanner Python 客户端库进行查询
- 使用 Spanner Ruby 客户端库进行查询
如需详细了解 Spanner 客户端库,请参阅 Spanner 客户端库概览。
直观呈现 Spanner Graph 查询结果
您可以在 Google Cloud 控制台的 Spanner Studio 中查看 Spanner Graph 查询结果的可视化表示形式。通过查询可视化图表,您可以了解返回的元素(节点和边)之间的连接方式。这可以揭示在表格中查看结果时难以发现的模式、依赖关系和异常情况。如需查看查询的可视化图表,查询必须以 JSON 格式返回完整节点。否则,您只能以表格格式查看查询结果。如需了解详情,请参阅使用 Spanner Graph 查询可视化图表。
Spanner Graph 查询结构
Spanner Graph 查询由多个组件组成,例如属性图名称、节点和边模式以及量词。您可以使用这些组件创建查询,以在图表中查找特定模式。本文档的图模式匹配部分介绍了每个组件。
图 2 中的查询展示了 Spanner Graph 查询的基本结构。查询首先使用 GRAPH 子句指定目标图表 FinGraph。然后,MATCH 子句定义要搜索的模式。在本例中,它是通过 Owns 边连接到 Account 节点的 Person 节点。RETURN 子句用于指定要返回的匹配节点的哪些属性。
图表模式匹配
图表模式匹配可在图表中查找特定模式。最基本的模式是元素模式,例如匹配节点的节点模式和匹配边的边模式。
节点模式
节点模式用于匹配图表中的节点。此模式包含一对匹配的圆括号,其中可选择包含图形模式变量、标签表达式和属性过滤器。
查找所有节点
以下查询会返回图表中的所有节点。变量 n(称为图表模式变量)会绑定到匹配节点。在这种情况下,节点模式会匹配图表中的所有节点。
GRAPH FinGraph
MATCH (n)
RETURN LABELS(n) AS label, n.id;
此查询会返回 label 和 id:
| 标签 | id |
|---|---|
| 账号 | 7 |
| 账号 | 16 |
| 账号 | 20 |
| 用户 | 1 |
| 用户 | 2 |
| 用户 | 3 |
查找具有特定标签的所有节点
以下查询会匹配图中具有 Person
标签的所有节点。该查询会返回匹配节点的 label 以及 id、name 属性。
GRAPH FinGraph
MATCH (p:Person)
RETURN LABELS(p) AS label, p.id, p.name;
此查询会返回匹配节点的以下属性:
| 标签 | id | name |
|---|---|---|
| 用户 | 1 | Alex |
| 用户 | 2 | Dana |
| 用户 | 3 | Lee |
查找与标签表达式匹配的所有节点
您可以创建包含一个或多个逻辑运算符的