图表查询概览
本文简要介绍了图查询语言 (GQL) 以及如何为 BigQuery Graph 编写图查询。您可以运行图查询,以查找模式、遍历关系并从属性图中获取数据洞见。本文档中的示例引用了一个名为 FinGraph 的图,该图显示了人、他们拥有的账号以及账号之间的转账关系。如需了解图表的定义,请参阅 FinGraph 示例。
查询结构
图表查询由图表的名称以及一个或多个线性查询语句组成。每个线性查询都包含一个或多个语句,这些语句可让您处理图数据,以查找模式匹配项、定义变量、过滤和转换中间数据,以及返回结果。您可以通过与在 BigQuery 中运行 SQL 查询相同的方式运行图查询。
图表模式匹配
图表模式匹配可在图表中查找特定模式。最基本的模式是元素模式,例如匹配节点的节点模式和匹配边的边模式。
节点模式
节点模式用于匹配图表中的节点。此模式包含一对匹配的圆括号,其中可选择包含图形模式变量、标签表达式和属性过滤器。
查找所有节点
以下查询会返回图表中的所有节点。变量 n(称为图表模式变量)会绑定到匹配节点。在这种情况下,节点模式会匹配图表中的所有节点。
GRAPH graph_db.FinGraph
MATCH (n)
RETURN LABELS(n) AS label, n.id;
此查询会返回 label 和 id:
label |
id |
|---|---|
Account |
7 |
Account |
16 |
Account |
20 |
Person |
1 |
Person |
2 |
Person |
3 |
查找具有特定标签的所有节点
以下查询会匹配图中具有 Person
标签的所有节点。该查询会返回匹配节点的标签和一些属性。
GRAPH graph_db.FinGraph
MATCH (p:Person)
RETURN LABELS(p) AS label, p.id, p.name;
此查询会返回匹配节点的以下属性:
label |
id |
name |
|---|---|---|
Person |
1 |
Alex |
Person |
2 |
Dana |
Person |
3 |
Lee |
查找与标签表达式匹配的所有节点
您可以创建包含一个或多个逻辑运算符的标签表达式。 例如,以下查询会匹配图表中具有 Person 或 Account 标签的所有节点。图表模式变量 n 公开具有 Person 或 Account 标签的节点的所有属性。
GRAPH graph_db.FinGraph
MATCH (n:Person|Account)
RETURN LABELS(n) AS label, n.id, n.birthday, n.create_time;
请注意此查询结果中的以下内容:
- 所有节点都具有
id属性。 - 与
Account标签匹配的节点具有create_time属性,但不具有birthday属性。对于这些节点,birthday属性为NULL。 - 与
Person标签匹配的节点具有birthday属性,但不具有create_time属性。对于这些节点,create_time属性为NULL。
label |
id |
birthday |
create_time |
|---|---|---|---|
Account |
7 |
NULL |
2020-01-10T14:22:20.222Z |
Account |
16 |
NULL |
2020-01-28T01:55:09.206Z |
Account |
20 |
NULL |
2020-02-18T13:44:20.655Z |
Person |
1 |
1991-12-21T08:00:00Z |
NULL |
Person |
2 |
1980-10-31T08:00:00Z |
NULL |
Person |
3 |
1986-12-07T08:00:00Z |
NULL |
查找与标签表达式和属性过滤条件匹配的所有节点
以下查询会匹配图表中具有 Person 标签且属性 id 等于 1 的所有节点:
GRAPH graph_db.FinGraph
MATCH (p:Person {id: 1