Nebula Graph 查询语言 (nGQL)

    • 易学
    • 易用
    • 专注线上查询,同时为离线计算提供基础
    • 类 SQL,易学易用
    • 可扩展
    • 大小写不敏感
    • 支持图遍历
    • 支持模式匹配
    • 支持聚合运算
    • 支持图计算
    • 支持分布式事务(开发中)
    • 无嵌入支持组合语句,易于阅读
    • 图空间:物理隔离的不同数据集
    • 标签 :拥有一种或多种属性
      • 每个标签都有一个人类可读的名称,并且每个标签内部都会分配一个 32 位的整数
      • 每个标签与一个属性列表相关联,每个属性都有一个名称和类型
      • 标签之间可存在依赖关系作为约束。例如,如果标签 S 依赖于标签 T,则除非标签 T 存在,否则标签 S 无法存在。
    • 节点 :图数据中代表实体的点
      • 每个节点都有一个唯一的 64 位(有符号整数)ID (VID)
      • 一个节点可以拥有多个标签
    • 路径 : 多个节点与边的非分支连接
      • 路径长度为该路径上的边数,比节点数少 1
      • 路径可由一系列节点,边类型及权重表示。一条边是一个长度为 1 的特殊路径
    • 整套语句可分为三部分:查询更改管理
    • 每条语句均可返回一个数据集,第个数据集均包含一个 schema 和多条数据

    语句组合

    • 语句组合有两种方式:
      • 语句可使用管道函数 “| 连接,前一条语句返回的结果可作为下一条语句的查询条件
      • 支持使用 “;“ 批量输入多条语句,批处理时返回最后一条语句结果
    • 简单类型: vid, double, int, bool, string, timestamp
      • vid : 64 位有符号整数,用来表示点 ID
    • 简单类型列表,如: integer[], double[], string[]
    • Map: 键值对列表。键类型必须为 字符,值类型必须与给定 map
    • Object (未来版本支持): 键值对列表。键类型必须为字符,值可以是任意简单类型
    • Tuple List: 只适用于返回值。由元数据和数据(多行)组成 。元数据包含列名和类型。

    类型转换

    • -一个简单的类型值可以隐式转换为列表
    • -列表可以隐式转换为单列元组列表
      • _list” 可用来表示列名

    ::= vid | integer | double | float | bool | string | path | timestamp | year | month | date | datetime

    ::=

    ::= |

    ::= vid (, vid)* | “{“ vid (, vid)* “}”

    ::= [:alpha] ([:alnum:] | “_“)*

    ::= (“_“)*

    ::=

    ::= (, )*

    ::= :

    ::= “:”

    ::=

    ::= (, )* | “{“ (, )* “}”

    ::= “(“ VALUE (, VALUE)* “)”

    ::= “$”

    查询语句

    选择图空间

    Nebula Graph 支持多图空间。不同图空间的数据彼此隔离。在进行查询前,需指定图空间。

    USE

    返回数据集

    返回单个值或数据集

    RETURN

    ::= vid | | |

    创建标签

    使用以下语句创建标签

    CREATE TAG ()

    ::=

    ::= +

    ::=

    创建边类型

    使用以下语句创建的边类型

    CREATE EDGE ()

    :=

    插入节点

    使用以下语句插入一个或多个节点

    INSERT VERTEX [NO OVERWRITE] VALUES

    ::= () (, ())*

    ::= :() (, :())*

    ::= vid

    ::= (, )*

    ::= VALUE (, VALUE)*

    插入边

    使用以下语句插入一条或多条边

    INSERT EDGE [NO OVERWRITE] [()] VALUES ()+

    edge_value ::= -> [@ ] :

    更新节点

    使用以下语句更新节点

    UPDATE VERTEX SET \[WHERE ][YIELD ]

    ::= |

    ::= = {, = }+

    ::= () = () | () =

    更新边

    使用以下语句更新边

    UPDATE EDGE -> [@] OF SET [WHERE ][YIELD ]

    图遍历

    根据指定条件遍历给定节点的关联节点,返回节点 ID 列表或数组

    GO[ STEPS]FROM [OVER [REVERSELY] ][WHERE ][YIELD ]

    ::= integer | integer TO integer | UPTO integer ::= [data_set] [[AS] ] ::= vid | | |

    ::= {, }*

    ::=

    ::= {AND | OR }*

    ::= > | >= | < | <= | == | != | IN

    ::= {, }*

    ::= [AS ]

    WHERE 语句仅适用于最终返回结果,对中间结果不适用。

    跳过 STEP[S] 表示 一步

    从起始点出发一跳,遍历所有满足WHERE 语句的关联点,只返回满足 WHERE 语句的结果。

    多跳查询时,WHERE 语句只适用于最终结果,对中间结果不适用。例如:

    以上语句查询所有生日在 1988/1/1 之后的二度好友。

    又例如:

    以上语句查询所有生日在 1988/1/1 之后的好友,最多查询为 3 度。如果只查询到一条,则会全部返回。如果没有满足条件的数据,则查询 2 度好友,如果还是没有则查询 3 度。

    以下语句查询生日在 1988/1/1 之后的3 度 至 5 度好友。

    搜索

    以下语句对满足筛选条件的节点或边进行搜索。

    FIND VERTEXWHERE [YIELD ]

    FIND EDGEWHERE [YIELD ]

    属性关联很常见,如 WHERE 语句和 YIELD 语句。nGQL 采用如下方式定义属性关联:

    ::= “.”

    ::= | |

    ::=

    ::= ‘[‘ “]”

    以 “$” 开始,特殊变量有两类:$- 和 $$。

    $- 为输入值, $$ 为目标值。

    内建属性

    _id : 节点 ID_type : 边类型_src : 边起始点 ID_dst : 边终点 ID_rank : 权重值