管道符
nGQL支持使用管道符(|)将多个查询组合起来。
openCypher兼容性
管道符仅适用于原生nGQL。
语法
nGQL和SQL之间的一个主要区别是子查询的组成方式。
在SQL中,子查询是嵌套在查询语句中的。
在nGQL中,子查询是通过类似shell中的管道符(
|
)实现的。
示例
nebula> GO FROM "player100" OVER follow \
YIELD follow._dst AS dstid, $$.player.name AS Name | \
GO FROM $-.dstid OVER follow;
+-------------+
| follow._dst |
+-------------+
| "player101" |
+-------------+
用户可以使用YIELD
显式声明需要返回的结果,如果不使用YIELD
,默认返回目标点ID。
必须在YIELD
子句中为需要的返回结果设置别名,才能在管道符右侧使用引用符$-
,例如示例中的$-.dstid
。
性能提示
Nebula Graph 2.5.0 中的管道对性能有影响,以A | B
为例,体现在以下几个方面:
管道是同步操作。也即需要管道之前的子句
A
执行完毕后,数据才能整体进入管道子句。管道本身是需要序列化和反序列化的,这个是单线程执行的。
如果
A
发大量数据给|
,整个查询请求的总体时延可能会非常大。此时可以尝试拆分这个语句:应用程序发送
A
,将收到的返回结果在应用程序拆分,
并发发送给多个 graphd,
每个 graphd 执行部分 B。
这样通常比单个graphd 执行完整地
A | B
要快很多。