图表查询概览

本文简要介绍了图查询语言 (GQL) 以及如何为 BigQuery Graph 编写图查询。您可以运行图查询,以查找模式、遍历关系并从属性图中获取数据洞见。本文档中的示例引用了一个名为 FinGraph 的图,该图显示了人、他们拥有的账号以及账号之间的转账关系。如需了解图表的定义,请参阅 FinGraph 示例

查询结构

图表查询由图表的名称以及一个或多个线性查询语句组成。每个线性查询都包含一个或多个语句,这些语句可让您处理图数据,以查找模式匹配项、定义变量、过滤和转换中间数据,以及返回结果。您可以通过与在 BigQuery 中运行 SQL 查询相同的方式运行图查询。

图查询结构示例。
图查询的结构示例。

图表模式匹配

图表模式匹配可在图表中查找特定模式。最基本的模式是元素模式,例如匹配节点的节点模式和匹配边的边模式。

节点模式

节点模式用于匹配图表中的节点。此模式包含一对匹配的圆括号,其中可选择包含图形模式变量、标签表达式和属性过滤器。

查找所有节点

以下查询会返回图表中的所有节点。变量 n(称为图表模式变量)会绑定到匹配节点。在这种情况下,节点模式会匹配图表中的所有节点。

GRAPH graph_db.FinGraph
MATCH (n)
RETURN LABELS(n) AS label, n.id;

此查询会返回 labelid

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

查找与标签表达式匹配的所有节点

您可以创建包含一个或多个逻辑运算符的标签表达式。 例如,以下查询会匹配图表中具有 PersonAccount 标签的所有节点。图表模式变量 n 公开具有 PersonAccount 标签的节点的所有属性

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