nebula安装教程

一、安装nebula库

1.下载

安装包检验和NebulaGraph 版本
nebula-graph-3.8.0.ubuntu2004.amd64.debnebula-graph-3.8.0.ubuntu2004.amd64.deb.sha256sum.txt3.8.0

2.安装

sudo dpkg -i nebula-graph-3.8.0.ubuntu2004.amd64.deb

3.启动

使用脚本nebula.service管理服务,包括启动、停止、重启、中止和查看。

sudo /usr/local/nebula/scripts/nebula.service
[-v] [-c <config_file_path>]
<start | stop | restart | kill | status>
<metad | graphd | storaged | all>

执行如下命令启动服务:

sudo /usr/local/nebula/scripts/nebula.service start all
[INFO] Starting nebula-metad...
[INFO] Done
[INFO] Starting nebula-graphd...
[INFO] Done
[INFO] Starting nebula-storaged...
[INFO] Done

在这里插入图片描述

执行如下命令查看 NebulaGraph 服务状态:

sudo /usr/local/nebula/scripts/nebula.service status all

在这里插入图片描述

二、连接库

2.1 Console连接

1.在 NebulaGraph Console 下载页面,确认需要的版本,单击 Assets。

  • Linux 或 macOS
chmod 111 nebula-console
./nebula-console -addr <ip> -port <port> -u <username> -p <password>
  [-t 120] [-e "nGQL_statement" | -f filename.nGQL]
  • Windows
nebula-console.exe -addr <ip> -port <port> -u <username> -p <password>
  [-t 120] [-e "nGQL_statement" | -f filename.nGQL]

2.2 Studio连接

2.2.1 安装

1.根据需要选择并下载 DEB 包,建议选择最新版本。常用下载链接如下:

安装包检验和适用 NebulaGraph 版本
nebula-graph-studio-3.10.0.x86_64.debnebula-graph-studio-3.10.0.x86_64.deb.sha2563.8.0
sudo dpkg -i nebula-graph-studio-3.10.0.x86_64.deb

在这里插入图片描述

2.2.2 启动服务

systemctl restart nebula-graph-studio.service

2.2.3 连接

  • 在浏览器地址栏输入 http://<ip_address>:7001
    在这里插入图片描述

在这里插入图片描述

  • Port:Graphd 服务的端口。默认为9669。
  • 用户名 和 密码:根据 NebulaGraph 的身份验证设置填写登录账号和密码。
    • 如果未启用身份验证,可以填写默认用户名 root 和任意密码。
    • 如果已启用身份验证,但是未创建账号信息,用户只能以 GOD 角色登录,必须填写 root 及对应的密码 nebula。
    • 如果已启用身份验证,同时又创建了不同的用户并分配了角色,不同角色的用户使用自己的账号和密码登录。

2.2.4 使用说明

待完善…

三、配置

3.1 用户验证

编辑配置文件nebula-graphd.conf(默认目录为/usr/local/nebula/etc/),设置如下参数:

  • –enable_authorize:是否启用身份验证,可选值:true、false。
  • –failed_login_attempts:可选项,需要手动添加该参数。单个 Graph 节点允许连续输入错误密码的次数。超过该次数时,账户会被锁定。如果有多个 Graph 节点,允许的次数为节点数 * 次数。
  • –password_lock_time_in_secs:可选项,需要手动添加该参数。多次输入错误密码后,账户被锁定的时间。单位:秒。
    在这里插入图片描述

3.2 用户管理

1.创建用户

nebula> CREATE USER user1 WITH PASSWORD 'nebula';
nebula> SHOW USERS;
+---------+
| Account |
+---------+
| "root"  |
| "user1" |
+---------+

2.授权用户

GRANT ROLE <role_type> ON <space_name> TO <user_name>;
# 示例
nebula> GRANT ROLE USER ON basketballplayer TO user1;
ROLE权限说明
God初始最高权限角色,拥有所有操作的权限。类似于 Linux 中的root和 Windows 中的administrator;一个集群只能有一个 God 角色用户,该用户可以管理集群内所有图空间。不支持手动授权 God 角色,只能使用默认 God 角色用户root。
Admin对权限内的图空间拥有 Schema 和 data 的读写权限。可以将权限内的图空间授权给其他用户。
DBA对权限内的图空间拥有 Schema 和 data 的读写权限。无法将权限内的图空间授权给其他用户。
USER对权限内的图空间拥有 Schema 的只读权限。对权限内的图空间拥有 data 的读写权限。
Guest对权限内的图空间拥有 Schema 和 data 的只读权限。

3.撤销用户权限

REVOKE ROLE <role_type> ON <space_name> FROM <user_name>;
# 示例
nebula> REVOKE ROLE USER ON basketballplayer FROM user1;

4.查看指定用户权限

DESCRIBE USER <user_name>;
DESC USER <user_name>;
# 示例
nebula> DESCRIBE USER user1;
+---------+--------------------+
| role    | space              |
+---------+--------------------+
| "ADMIN" | "basketballplayer" |
+---------+--------------------+

5.修改用户密码

CHANGE PASSWORD <user_name> FROM '<old_password>' TO '<new_password>';
# 示例
nebula> CHANGE PASSWORD user1 FROM 'nebula' TO 'nebula123';
# 当前仅 God 角色用户(即root用户)能够执行ALTER USER语句。
ALTER USER <user_name> WITH PASSWORD '<password>';
# 示例
nebula> ALTER USER user2 WITH PASSWORD 'change_password';
nebula> SHOW USERS;
+---------+
| Account |
+---------+
| "root"  |
| "user1" |
| "user2" |
+---------+

6.删除用户

DROP USER [IF EXISTS] <user_name>;
# 示例
nebula> DROP USER user1;

3.3 管理 Storage 主机

从 3.0.0 版本开始,在配置文件中添加的 Storage 主机无法直接读写,配置文件的作用仅仅是将 Storage 主机注册至 Meta 服务中。必须使用ADD HOSTS命令后,才能正常读写 Storage 主机。

3.3.1 增加 Storage 主机

向集群中增加 Storage 主机。

ADD HOSTS <ip>:<port> [,<ip>:<port> ...];
ADD HOSTS "<hostname>":<port> [,"<hostname>":<port> ...];

note

  • 增加 Storage 主机在下一个心跳周期之后才能生效,为确保数据同步,请等待 2 个心跳周期(20 秒),然后执行SHOW HOSTS查看是否在线。
  • IP地址和端口请和配置文件中的设置保持一致,例如单机部署的默认为127.0.0.1:9779。
  • 使用域名时,需要用引号包裹,例如 ADD HOSTS “foo-bar”:9779。
  • 确保新增的 Storage 主机没有被其他集群使用过,否则会导致添加 Storage 节点失败。

3.3.2 删除 Storage 主机

DROP HOSTS <ip>:<port> [,<ip>:<port> ...];
DROP HOSTS "<hostname>":<port> [,"<hostname>":<port> ...];

note

  • 无法直接删除正在使用的 Storage 主机,需要先删除关联的图空间,才能删除 Storage 主机。

四、常用语句

4.1 函数

  • 数学函数

    函数说明
    double abs(double x)返回 x 的绝对值。
    double floor(double x)返回小于或等于 x 的最大整数。
    double ceil(double x)返回大于或等于 x 的最小整数。
    double round(double x)返回离 x 最近的整数值,如果 x 恰好在中间,则返回离 0 较远的整数。
    double sqrt(double x)返回 x 的平方根。
    double cbrt(double x)返回 x 的立方根。
    double hypot(double x, double y)返回直角三角形(直角边长为 x 和 y)的斜边长。
    double pow(double x, double y)返回 xy 的值。
    double exp(double x)返回 ex 的值。
    double exp2(double x)返回 2x 的值。
    double log(double x)返回以自然数 e 为底 x 的对数。
    double log2(double x)返回以 2 为底 x 的对数。
    double log10(double x)返回以 10 为底 x 的对数。
    double sin(double x)返回 x 的正弦值。
    double asin(double x)返回 x 的反正弦值。
    double cos(double x)返回 x 的余弦值。
    double acos(double x)返回 x 的反余弦值。
    double tan(double x)返回 x 的正切值。
    double atan(double x)返回 x 的反正切值。
    double rand()返回 [0,1) 内的随机浮点数。
    int rand32(int min, int max)返回[min, max)内的一个随机 32 位整数。 用户可以只传入一个参数,该参数会判定为max,此时min默认为0。 如果不传入参数,此时会从带符号的 32 位 int 范围内随机返回。
    int rand64(int min, int max)返回[min, max)内的一个随机 64 位整数。 用户可以只传入一个参数,该参数会判定为max,此时min默认为0。 如果不传入参数,此时会从带符号的 64 位 int 范围内随机返回。
    bit_and()逐位做 AND 操作。
    bit_or()逐位做 OR 操作。
    bit_xor()逐位做 XOR 操作。
    int size()返回列表或映射中元素的数量,或字符串的长度。
    int range(int start, int end, int step)返回[start,end]中指定步长的值组成的列表。步长step默认为 1。
    int sign(double x)返回 x 的正负号。 如果 x 为0,则返回0。 如果 x 为负数,则返回-1。 如果 x 为正数,则返回1
    double e()返回自然对数的底 e(2.718281828459045)。
    double pi()返回数学常数π(3.141592653589793)。
    double radians()将角度转换为弧度。radians(180)返回3.141592653589793
  • 聚合函数

    函数说明
    avg()返回参数的平均值。
    count()语法:`count({expr
    max()返回参数的最大值。
    min()返回参数的最小值。
    collect()collect()函数返回一个符合表达式返回结果的列表。该函数可以将多条记录或值合并进一个列表,实现数据聚合。
    std()返回参数的总体标准差。
    sum()返回参数的和。
  • 字符串函数

    函数说明
    int strcasecmp(string a, string b)比较两个字符串(不区分大小写)。当 a=b 时,返回 0,当 a>b 是,返回大于 0 的数,当 a<b 时,返回小于 0 的数。
    string lower(string a)返回小写形式的字符串。
    string toLower(string a)lower()相同。
    string upper(string a)返回大写形式的字符串。
    string toUpper(string a)upper()相同。
    int length(a)返回给定字符串的长度或路径的长度,单位分别是字节和跳数。
    string trim(string a)删除字符串头部和尾部的空格。
    string ltrim(string a)删除字符串头部的空格。
    string rtrim(string a)删除字符串尾部的空格。
    string left(string a, int count)返回字符串左侧count个字符组成的子字符串。如果count超过字符串 a 的长度,则返回字符串 a。
    string right(string a, int count)返回字符串右侧count个字符组成的子字符串。如果count超过字符串 a 的长度,则返回字符串 a。
    string lpad(string a, int size, string letters)在字符串 a 的左侧填充letters字符串,并返回size长度的字符串。
    string rpad(string a, int size, string letters)在字符串 a 的右侧填充letters字符串,并返回size长度的字符串。
    string substr(string a, int pos, int count)从字符串 a 的指定位置pos开始(不包括pos位置的字符),提取右侧的count个字符,组成新的字符串并返回。
    string substring(string a, int pos, int count)substr()相同。
    string reverse(string)逆序返回字符串。
    string replace(string a, string b, string c)将字符串 a 中的子字符串 b 替换为字符串 c。
    list split(string a, string b)在子字符串 b 处拆分字符串 a,返回一个字符串列表。
    concat()concat()函数至少需要两个或以上字符串参数,并将所有参数连接成一个字符串。
    语法:concat(string1,string2,...)
    concat_ws()concat_ws()函数将两个或以上字符串参数与预定义的分隔符(separator)相连接。
    extract()extract() 从指定字符串中提取符合正则表达式的子字符串。
    json_extract()json_extract() 将指定 JSON 字符串转换为 map 类型。
  • 日期时间函数

    函数说明
    int now()根据当前系统返回当前时间戳。
    timestamp timestamp()根据当前系统返回当前时间戳。
    date date()根据当前系统返回当前日期(UTC 时间)。
    time time()根据当前系统返回当前时间(UTC 时间)。
    datetime datetime()根据当前系统返回当前日期和时间(UTC 时间)。
  • Schema 相关函数

    • 原生 nGQL 语句适用

      函数说明
      id(vertex)返回点 ID。数据类型和点 ID 的类型保持一致。
      map properties(vertex)返回点的所有属性。
      map properties(edge)返回边的所有属性。
      string type(edge)返回边的 Edge type。
      src(edge)返回边的起始点 ID。数据类型和点 ID 的类型保持一致。
      dst(edge)返回边的目的点 ID。数据类型和点 ID 的类型保持一致。
      int rank(edge)返回边的 rank。
      vertex返回点的信息。包括点 ID、Tag、属性和值。
      edge返回边的信息。包括 Edge type、起始点 ID、目的点 ID、rank、属性和值。
      vertices返回子图中的点的信息。详情参见 GET SUBGRAPH
      edges返回子图中的边的信息。详情参见 GET SUBGRAPH
      path返回路径信息。详情参见 FIND PATH
    • openCypher 兼容语句适用

      函数说明
      id(<vertex>)返回点 ID。数据类型和点 ID 的类型保持一致。
      list tags(<vertex>)返回点的 Tag,与 labels() 作用相同。
      list labels(<vertex>)返回点的 Tag,与 tags() 作用相同,用于兼容 openCypher 语法。
      map properties(<vertex_or_edge>)返回点或边的所有属性。
      string type(<edge>)返回边的 Edge type。
      src(<edge>)返回边的起始点 ID。数据类型和点 ID 的类型保持一致。
      dst(<edge>)返回边的目的点 ID。数据类型和点 ID 的类型保持一致。
      vertex startNode(<path>)获取一条边或一条路径并返回它的起始点 ID。
      string endNode(<path>)获取一条边或一条路径并返回它的目的点 ID。
      int rank(<edge>)返回边的 rank。
  • 列表函数

    函数说明
    keys(expr)返回一个列表,包含字符串形式的点、边或映射的所有属性。
    labels(vertex)返回点的 Tag 列表。
    nodes(path)返回路径中所有点的列表。
    range(start, end [, step])返回[start,end]范围内固定步长的列表,默认步长step为 1。
    relationships(path)返回路径中所有关系的列表。
    reverse(list)返回将原列表逆序排列的新列表。
    tail(list)返回不包含原列表第一个元素的新列表。
    head(list)返回列表的第一个元素。
    last(list)返回列表的最后一个元素。
    reduce()将表达式逐个应用于列表中的元素,然后和累加器中的当前结果累加,最后返回完整结果。
  • 类型转换函数

    函数说明
    bool toBoolean()将字符串转换为布尔。
    float toFloat()将整数或字符串转换为浮点数。
    string toString()将任意数据类型转换为字符串类型。
    int toInteger()将浮点或字符串转换为整数。
    set toSet()将列表或集合转换为集合。
    int hash()hash()函数返回参数的哈希值。其参数可以是数字、字符串、列表、布尔值、NULL 等类型的值,或者计算结果为这些类型的表达式。
  • 谓词函数

    谓词函数只返回truefalse,通常用于WHERE子句中。

    <predicate>(<variable> IN <list> WHERE <condition>)
    
    函数说明
    exists()如果指定的属性在点、边或映射中存在,则返回true,否则返回false
    any()如果指定的谓词适用于列表中的至少一个元素,则返回true,否则返回false
    all()如果指定的谓词适用于列表中的每个元素,则返回true,否则返回false
    none()如果指定的谓词不适用于列表中的任何一个元素,则返回true,否则返回false
    single()如果指定的谓词适用于列表中的唯一一个元素,则返回true,否则返回false
  • 条件表达式函数

    函数说明
    CASE使用条件来过滤 nGQL 查询语句的结果,常用于YIELDRETURN子句中。
    CASE表达式会遍历所有条件,并在满足第一个条件时停止读取后续条件,然后返回结果。
    如果不满足任何条件,将通过ELSE子句返回结果。如果没有ELSE子句且不满足任何条件,则返回NULL
    coalesce()返回所有表达式中第一个非空元素。

4.2 通用查询语句

  • MATCH

    MATCH <pattern> [<clause_1>]  RETURN <output>  [<clause_2>];
    
    模式示例说明
    匹配点(v)用户可以在一对括号中使用自定义变量来表示模式中的点。例如(v)
    匹配 TagMATCH (v:player) RETURN v用户可以在点的右侧用:<tag_name>表示模式中的 Tag。
    匹配多 TagMATCH (v:player:team) RETURN v用户可以用英文冒号(:)匹配多 Tag 的点。
    匹配点的属性MATCH (v:player{name:"Tim Duncan"}) RETURN v

    MATCH (v) WITH v, properties(v) as props, keys(properties(v)) as kk WHERE [i in kk where props[i] == "Tim Duncan"] RETURN v
    用户可以在 Tag 的右侧用{<prop_name>: <prop_value>}表示模式中点的属性;或者不指定 Tag 直接匹配点的属性。
    匹配单点 IDMATCH (v) WHERE id(v) == 'player101' RETURN v用户可以使用点 ID 去匹配点。id()函数可以检索点的 ID。
    匹配多点 IDMATCH (v:player { name: 'Tim Duncan' })--(v2) WHERE id(v2) IN ["player101", "player102"] RETURN v2要匹配多个点的 ID,可以用WHERE id(v) IN [vid_list]
    匹配连接的点MATCH (v:player{name:"Tim Duncan"})--(v2) RETURN v2.player.name AS Name用户可以使用--符号表示两个方向的边,并匹配这些边连接的点。用户可以在--符号上增加<>符号指定边的方向。
    匹配路径MATCH p=(v:player{name:"Tim Duncan"})-->(v2) RETURN p连接起来的点和边构成了路径。用户可以使用自定义变量命名路径。
    匹配边MATCH (v:player{name:"Tim Duncan"})-[e]-(v2) RETURN e
    MATCH ()<-[e]-() RETURN e
    除了用----><--表示未命名的边之外,用户还可以在方括号中使用自定义变量命名边。例如-[e]-
    匹配 Edge typeMATCH ()-[e:follow]->() RETURN e和点一样,用户可以用:<edge_type>表示模式中的 Edge type,例如-[e:follow]-
    匹配边的属性 MATCH (v:player{name:"Tim Duncan"})-[e:follow{degree:95}]->(v2) RETURN e

    MATCH ()-[e]->() WITH e, properties(e) as props, keys(properties(e)) as kk WHERE [i in kk where props[i] == 90] RETURN e
    用户可以用{<prop_name>: <prop_value>}表示模式中 Edge type 的属性,例如[e:follow{likeness:95}];或者不指定 Edge type 直接匹配边的属性。
    匹配多个 Edge type`MATCH (v:player{name:“Tim Duncan”})-[e:follow:serve]->(v2) RETURN e`
    匹配多条边MATCH (v:player{name:"Tim Duncan"})-[]->(v2)<-[e:serve]-(v3) RETURN v2, v3用户可以扩展模式,匹配路径中的多条边。
    匹配定长路径MATCH p=(v:player{name:"Tim Duncan"})-[e:follow*2]->(v2) RETURN DISTINCT v2 AS Friends用户可以在模式中使用:<edge_type>*<hop>匹配定长路径。hop必须是一个非负整数。e的数据类型是列表。
    匹配变长路径MATCH p=(v:player{name:"Tim Duncan"})-[e:follow*1..3]->(v2) RETURN v2 AS FriendsminHop:可选项。表示路径的最小长度。minHop必须是一个非负整数,默认值为 1。
    maxHop:可选项。表示路径的最大长度。maxHop必须是一个非负整数,默认为无穷大。e的数据类型是列表。
    匹配多个 Edge type 的变长路径`MATCH p=(v:player{name:“Tim Duncan”})-[e:followserve*2]->(v2) RETURN DISTINCT v2`
    检索点或边的信息MATCH (v:player{name:"Tim Duncan"}) RETURN v
    MATCH (v:player{name:"Tim Duncan"})-[e]->(v2) RETURN e
    使用`RETURN {<vertex_name>
    检索点 IDMATCH (v:player{name:"Tim Duncan"}) RETURN id(v)使用id()函数检索点 ID。
    检索 TagMATCH (v:player{name:"Tim Duncan"}) RETURN labels(v)使用labels()函数检索点上的 Tag 列表。
    检索列表labels(v)中的第 N 个元素,可以使用labels(v)[n-1]
    检索点或边的单个属性MATCH (v:player{name:"Tim Duncan"}) RETURN v.player.age使用`RETURN {<vertex_name>
    检索点或边的所有属性MATCH p=(v:player{name:"Tim Duncan"})-[]->(v2) RETURN properties(v2)使用properties()函数检索点或边的所有属性。
    检索 Edge typeMATCH p=(v:player{name:"Tim Duncan"})-[e]->() RETURN DISTINCT type(e)使用type()函数检索匹配的 Edge type。
    检索路径MATCH p=(v:player{name:"Tim Duncan"})-[*3]->() RETURN p使用RETURN <path_name>检索匹配路径的所有信息。
    检索路径中的点MATCH p=(v:player{name:"Tim Duncan"})-[]->(v2) RETURN nodes(p)使用nodes()函数检索路径中的所有点。
    检索路径中的边MATCH p=(v:player{name:"Tim Duncan"})-[]->(v2) RETURN relationships(p)使用relationships()函数检索路径中的所有边。
    检索路径长度MATCH p=(v:player{name:"Tim Duncan"})-[*..2]->(v2) RETURN p AS Paths, length(p) AS Length使用length()函数检索路径的长度。
  • OPTIONAL MATCH

    模式示例说明
    作为MATCH语句的可选项去匹配图数据库中的模式MATCH (m)-[]->(n) WHERE id(m)=="player100" OPTIONAL MATCH (n)-[]->(l) RETURN id(m),id(n),id(l)如果图数据库中没有对应的模式,对应的列返回NULL
  • LOOKUP

    LOOKUP ON {<vertex_tag> | <edge_type>} 
    [WHERE <expression> [AND <expression> ...]] 
    YIELD <return_list> [AS <alias>]
    
    模式示例说明
    检索点LOOKUP ON player WHERE player.name == "Tony Parker" YIELD player.name AS name, player.age AS age返回 Tag 为playernameTony Parker的点。
    检索边LOOKUP ON follow WHERE follow.degree == 90 YIELD follow.degree返回 Edge type 为followdegree90的边。
    通过 Tag 列出所有点LOOKUP ON player YIELD properties(vertex),id(vertex)查找所有 Tag 为player的点 VID。
    通过 Edge type 列出边LOOKUP ON follow YIELD edge AS e查找 Edge type 为follow的所有边的信息。
    统计点`LOOKUP ON player YIELD id(vertex)YIELD COUNT(*) AS Player_Count`
    统计边`LOOKUP ON follow YIELD edge as eYIELD COUNT(*) AS Like_Count`
  • GO

    GO [[<M> TO] <N> {STEP|STEPS} ] FROM <vertex_list>
    OVER <edge_type_list> [{REVERSELY | BIDIRECT}]
    [ WHERE <conditions> ]
    YIELD [DISTINCT] <return_list>
    [{SAMPLE <sample_list> | LIMIT <limit_list>}]
    [| GROUP BY {col_name | expr | position} YIELD <col_name>]
    [| ORDER BY <expression> [{ASC | DESC}]]
    [| LIMIT [<offset_value>,] <number_rows>]
    
    示例说明
    GO FROM "player102" OVER serve YIELD dst(edge)返回 player102 所属队伍。
    GO 2 STEPS FROM "player102" OVER follow YIELD dst(edge)返回距离 player102 两跳的朋友。
    GO FROM "player100", "player102" OVER serve WHERE properties(edge).start_year > 1995 YIELD DISTINCT properties($$).name AS team_name, properties(edge).start_year AS start_year, properties($^).name AS player_name添加过滤条件。
    GO FROM "player100" OVER follow, serve YIELD properties(edge).degree, properties(edge).start_year遍历多个 Edge type。属性没有值时,会显示NULL
    GO FROM "player100" OVER follow REVERSELY YIELD src(edge) AS destination返回 player100 入方向的邻居点。
    `GO FROM “player100” OVER follow REVERSELY YIELD src(edge) AS idGO FROM − . i d O V E R s e r v e W H E R E p r o p e r t i e s ( -.id OVER serve WHERE properties( .idOVERserveWHEREproperties(^).age > 20 YIELD properties( ) . n a m e A S F r i e n d O f , p r o p e r t i e s ( ^).name AS FriendOf, properties( ).nameASFriendOf,properties($).name AS Team`
    GO FROM "player102" OVER follow YIELD dst(edge) AS both返回 player102 所有邻居点。
    `GO 2 STEPS FROM “player100” OVER follow YIELD src(edge) AS src, dst(edge) AS dst, properties($$).age AS ageGROUP BY $-.dst YIELD − . d s t A S d s t , c o l l e c t s e t ( -.dst AS dst, collect_set( .dstASdst,collectset(-.src) AS src, collect($-.age) AS age`
  • FETCH

    • 获取点的属性值

      FETCH PROP ON {<tag_name>[, tag_name ...] | *} 
      <vid> [, vid ...] 
      YIELD <return_list> [AS <alias>]
      
      示例说明
      FETCH PROP ON player "player100" YIELD properties(vertex)FETCH语句中指定 Tag 获取对应点的属性值。
      FETCH PROP ON player "player100" YIELD player.name AS name使用YIELD子句指定返回的属性。
      FETCH PROP ON player "player101", "player102", "player103" YIELD properties(vertex)指定多个点 ID 获取多个点的属性值,点之间用英文逗号(,)分隔。
      FETCH PROP ON player, t1 "player100", "player103" YIELD properties(vertex)FETCH语句中指定多个 Tag 获取属性值。Tag 之间用英文逗号(,)分隔。
      FETCH PROP ON * "player100", "player106", "team200" YIELD properties(vertex)FETCH语句中使用*获取当前图空间所有标签里,点的属性值。
    • 获取边的属性值

      FETCH PROP ON <edge_type> <src_vid> -> <dst_vid>[@<rank>] [, <src_vid> -> <dst_vid> ...]
      YIELD <output>;
      
      示例说明
      FETCH PROP ON serve "player100" -> "team204" YIELD properties(edge)获取连接 player100 和 team204 的边 serve 的所有属性值。
      FETCH PROP ON serve "player100" -> "team204" YIELD serve.start_year使用YIELD子句指定返回的属性。
      FETCH PROP ON serve "player100" -> "team204", "player133" -> "team202" YIELD properties(edge)指定多个边模式 (<src_vid> -> <dst_vid>[@<rank>]) 获取多个边的属性值。模式之间用英文逗号(,)分隔。
      FETCH PROP ON serve "player100" -> "team204"@1 YIELD properties(edge)要获取 rank 不为 0 的边,请在 FETCH 语句中设置 rank。
      `GO FROM “player101” OVER follow YIELD follow._src AS s, follow._dst AS dFETCH PROP ON follow $-.s -> $-.d YIELD follow.degree`
      $var = GO FROM "player101" OVER follow YIELD follow._src AS s, follow._dst AS d; FETCH PROP ON follow $var.s -> $var.d YIELD follow.degree自定义变量构建查询。
  • SHOW

    语句语法示例说明
    SHOW CHARSETSHOW CHARSETSHOW CHARSET显示当前的字符集。
    SHOW COLLATIONSHOW COLLATIONSHOW COLLATION显示当前的排序规则。
    SHOW CREATE SPACESHOW CREATE SPACE <space_name>SHOW CREATE SPACE basketballplayer显示指定图空间的创建语句。
    SHOW CREATE TAG/EDGE`SHOW CREATE {TAG <tag_name>EDGE <edge_name>}`SHOW CREATE TAG player
    SHOW HOSTS`SHOW HOSTS [GRAPHSTORAGEMETA]`
    SHOW INDEX STATUS`SHOW {TAGEDGE} INDEX STATUS`SHOW TAG INDEX STATUS
    SHOW INDEXES`SHOW {TAGEDGE} INDEXES`SHOW TAG INDEXES
    SHOW PARTSSHOW PARTS [<part_id>]SHOW PARTS显示图空间中指定分片或所有分片的信息。
    SHOW ROLESSHOW ROLES IN <space_name>SHOW ROLES in basketballplayer显示分配给用户的角色信息。
    SHOW SNAPSHOTSSHOW SNAPSHOTSSHOW SNAPSHOTS显示所有快照信息。
    SHOW SPACESSHOW SPACESSHOW SPACES显示现存的图空间。
    SHOW STATSSHOW STATSSHOW STATS显示最近STATS作业收集的图空间统计信息。
    SHOW TAGS/EDGES`SHOW TAGSEDGES`SHOW TAGSSHOW EDGES
    SHOW USERSSHOW USERSSHOW USERS显示用户信息。
    SHOW SESSIONSSHOW SESSIONS SHOW SESSIONS显示所有会话信息。
    SHOW SESSIONSSHOW SESSION <Session_Id>SHOW SESSION 1623304491050858指定会话 ID 进行查看。
    SHOW QUERIESSHOW [ALL] QUERIESSHOW QUERIES查看当前 Session 中正在执行的查询请求信息。
    SHOW META LEADERSHOW META LEADERSHOW META LEADER显示当前 Meta 集群的 leader 信息。

4.3 子句和选项

子句语法示例说明
GROUP BY GROUP BY <var> YIELD <var>, <aggregation_function(var)>`GO FROM “player100” OVER follow BIDIRECT YIELD $$.player.name as NameGROUP BY $-.Name YIELD $-.Name as Player, count(*) AS Name_Count`
LIMIT`YIELD [LIMIT [<offset_value>,] <number_rows>]``GO FROM “player100” OVER follow REVERSELY YIELD . p l a y e r . n a m e A S F r i e n d , .player.name AS Friend, .player.nameASFriend,.player.age AS Age
SKIPRETURN <var> [SKIP <offset>] [LIMIT <number_rows>]MATCH (v:player{name:"Tim Duncan"}) --> (v2) RETURN v2.player.name AS Name, v2.player.age AS Age ORDER BY Age DESC SKIP 1用户可以单独使用SKIP <offset>设置偏移量,后面不需要添加LIMIT <number_rows>
SAMPLE<go_statement> SAMPLE <sample_list>;GO 3 STEPS FROM "player100" OVER * YIELD properties($$).name AS NAME, properties($$).age AS Age SAMPLE [1,2,3];在结果集中均匀取样并返回指定数量的数据。
ORDER BY` ORDER BY [ASCDESC] [, [ASCDESC] …]`
RETURN`RETURN {<vertex_name><edge_name><vertex_name>.
TTLCREATE TAG <tag_name>(<property_name_1> <property_value_1>, <property_name_2> <property_value_2>, ...) ttl_duration= <value_int>, ttl_col = <property_name>CREATE TAG t2(a int, b int, c string) ttl_duration= 100, ttl_col = "a"创建 Tag 并设置 TTL 选项。
WHERE`WHERE {<vertexedge_alias>.<property_name> {>==
YIELDYIELD [DISTINCT] <col> [AS <alias>] [, <col> [AS <alias>] ...] [WHERE <conditions>];`GO FROM “player100” OVER follow YIELD dst(edge) AS IDFETCH PROP ON player $-.ID YIELD player.age AS Age
WITH`MATCH $expressions WITH {nodes()labels()…}`
UNWINDUNWIND <list> AS <alias> <RETURN clause>UNWIND [1,2,3] AS n RETURN n拆分列表。

4.4 图空间语句

语句语法示例说明
CREATE SPACE`CREATE SPACE [IF NOT EXISTS] <graph_space_name> ( [partition_num = <partition_number>,] [replica_factor = <replica_number>,] vid_type = {FIXED_STRING()INT[64]} ) [COMMENT = ‘’]`CREATE SPACE my_space_1 (vid_type=FIXED_STRING(30))
CREATE SPACECREATE SPACE <new_graph_space_name> AS <old_graph_space_name>CREATE SPACE my_space_4 as my_space_3克隆现有图空间的 Schema。
USEUSE <graph_space_name>USE space1指定一个图空间,或切换到另一个图空间,将其作为后续查询的工作空间。
SHOW SPACESSHOW SPACESSHOW SPACES列出 {{nebula.name}} 示例中的所有图空间。
DESCRIBE SPACEDESC[RIBE] SPACE <graph_space_name>DESCRIBE SPACE basketballplayer显示指定图空间的信息。
CLEAR SPACECLEAR SPACE [IF EXISTS] <graph_space_name>清空图空间中的点和边,但不会删除图空间本身以及其中的 Schema 信息。
DROP SPACEDROP SPACE [IF EXISTS] <graph_space_name>DROP SPACE basketballplayer删除指定图空间的所有内容。

4.5 TAG 语句

语句语法示例说明
CREATE TAG`CREATE TAG [IF NOT EXISTS] <tag_name> ( <prop_name> <data_type> [NULLNOT NULL] [DEFAULT <default_value>] [COMMENT ‘’] [{, <prop_name> <data_type> [NULLNOT NULL] [DEFAULT <default_value>] [COMMENT ‘’]} …] ) [TTL_DURATION = <ttl_duration>] [TTL_COL = <prop_name>] [COMMENT = ‘’] `
DROP TAGDROP TAG [IF EXISTS] <tag_name>DROP TAG test;删除当前工作空间内所有点上的指定 Tag。
ALTER TAGALTER TAG <tag_name> <alter_definition> [, alter_definition] ...] [ttl_definition [, ttl_definition] ... ] [COMMENT = '<comment>']ALTER TAG t1 ADD (p3 int, p4 string)修改 Tag 的结构。例如增删属性、修改数据类型,也可以为属性设置、修改 TTL(Time-To-Live)。
SHOW TAGSSHOW TAGSSHOW TAGS显示当前图空间内的所有 Tag 名称。
DESCRIBE TAGDESC[RIBE] TAG <tag_name>DESCRIBE TAG player查看指定 Tag 的详细信息,例如字段名称、数据类型等。
DELETE TAGDELETE TAG <tag_name_list> FROM <VID>DELETE TAG test1 FROM "test"删除指定点上的指定 Tag。

4.6 Edge type 语句

语句语法示例说明
CREATE EDGE`CREATE EDGE [IF NOT EXISTS] <edge_type_name> ( <prop_name> <data_type> [NULLNOT NULL] [DEFAULT <default_value>] [COMMENT ‘’] [{, <prop_name> <data_type> [NULLNOT NULL] [DEFAULT <default_value>] [COMMENT ‘’]} …] ) [TTL_DURATION = <ttl_duration>] [TTL_COL = <prop_name>] [COMMENT = ‘’] `
DROP EDGEDROP EDGE [IF EXISTS] <edge_type_name>DROP EDGE e1删除当前工作空间内的指定 Edge type。
ALTER EDGEALTER EDGE <edge_type_name> <alter_definition> [, alter_definition] ...] [ttl_definition [, ttl_definition] ... ] [COMMENT = '<comment>']ALTER EDGE e1 ADD (p3 int, p4 string)修改 Edge type 的结构。
SHOW EDGESSHOW EDGESSHOW EDGES显示当前图空间内的所有 Edge type 名称。
DESCRIBE EDGEDESC[RIBE] EDGE <edge_type_name>DESCRIBE EDGE follow查看指定 Edge type 的详细信息,例如字段名称、数据类型等。

4.7 点语句

语句语法示例说明
INSERT VERTEXINSERT VERTEX [IF NOT EXISTS] [tag_props, [tag_props] ...] VALUES <vid>: ([prop_value_list])INSERT VERTEX t2 (name, age) VALUES "13":("n3", 12), "14":("n4", 8)在 {{nebula.name}} 实例的指定图空间中插入一个或多个点。
DELETE VERTEXDELETE VERTEX <vid> [, <vid> ...]DELETE VERTEX "team1"删除点,以及点关联的出边和入边。
UPDATE VERTEXUPDATE VERTEX ON <tag_name> <vid> SET <update_prop> [WHEN <condition>] [YIELD <output>]UPDATE VERTEX ON player "player101" SET age = age + 2 修改点上 Tag 的属性值。
UPSERT VERTEXUPSERT VERTEX ON <tag> <vid> SET <update_prop> [WHEN <condition>] [YIELD <output>]UPSERT VERTEX ON player "player667" SET age = 31结合UPDATEINSERT,如果点存在,会修改点的属性值;如果点不存在,会插入新的点。

4.8 边语句

语句语法示例说明
INSERT EDGEINSERT EDGE [IF NOT EXISTS] <edge_type> ( <prop_name_list> ) VALUES <src_vid> -> <dst_vid>[@<rank>] : ( <prop_value_list> ) [, <src_vid> -> <dst_vid>[@<rank>] : ( <prop_value_list> ), ...]INSERT EDGE e2 (name, age) VALUES "11"->"13":("n1", 1)在 {{nebula.name}} 实例的指定图空间中插入一条或多条边。
DELETE EDGEDELETE EDGE <edge_type> <src_vid> -> <dst_vid>[@<rank>] [, <src_vid> -> <dst_vid>[@<rank>] ...]DELETE EDGE serve "player100" -> "team204"@0删除边。一次可以删除一条或多条边。
UPDATE EDGEUPDATE EDGE ON <edge_type> <src_vid> -> <dst_vid> [@<rank>] SET <update_prop> [WHEN <condition>] [YIELD <output>]UPDATE EDGE ON serve "player100" -> "team204"@0 SET start_year = start_year + 1修改边上 Edge type 的属性。
UPSERT EDGEUPSERT EDGE ON <edge_type> <src_vid> -> <dst_vid> [@rank] SET <update_prop> [WHEN <condition>] [YIELD <properties>]UPSERT EDGE on serve "player666" -> "team200"@0 SET end_year = 2021结合UPDATEINSERT,如果边存在,会更新边的属性;如果边不存在,会插入新的边。

4.9 索引

  • 原生索引

    索引配合LOOKUPMATCH语句使用。

    语句语法示例说明
    CREATE INDEX`CREATE {TAGEDGE} INDEX [IF NOT EXISTS] <index_name> ON {<tag_name><edge_name>} ([<prop_name_list>]) [COMMENT = ‘’]`
    SHOW CREATE INDEX`SHOW CREATE {TAGEDGE} INDEX <index_name>`show create tag index index_2
    SHOW INDEXES`SHOW {TAGEDGE} INDEXES`SHOW TAG INDEXES
    DESCRIBE INDEX`DESCRIBE {TAGEDGE} INDEX <index_name>`DESCRIBE TAG INDEX player_index_0
    REBUILD INDEX`REBUILD {TAGEDGE} INDEX [<index_name_list>]`REBUILD TAG INDEX single_person_index
    SHOW INDEX STATUS`SHOW {TAGEDGE} INDEX STATUS`SHOW TAG INDEX STATUS
    DROP INDEX`DROP {TAGEDGE} INDEX [IF EXISTS] <index_name>`DROP TAG INDEX player_index_0
  • 全文索引

    语法示例说明
    SIGN IN TEXT SERVICE [(<elastic_ip:port> [,<username>, <password>]), (<elastic_ip:port>), ...]SIGN IN TEXT SERVICE (127.0.0.1:9200){{nebula.name}} 的全文索引是基于 Elasticsearch 实现,部署 Elasticsearch 集群之后,可以使用SIGN IN语句登录 Elasticsearch 客户端。
    SHOW TEXT SEARCH CLIENTSSHOW TEXT SEARCH CLIENTS列出文本搜索客户端。
    SIGN OUT TEXT SERVICESIGN OUT TEXT SERVICE退出所有文本搜索客户端。
    `CREATE FULLTEXT {TAGEDGE} INDEX <index_name> ON {<tag_name><edge_name>} (<prop_name> [,<prop_name>]…) [ANALYZER=“<analyzer_name>”]`
    SHOW FULLTEXT INDEXESSHOW FULLTEXT INDEXES显示全文索引。
    REBUILD FULLTEXT INDEXREBUILD FULLTEXT INDEX重建全文索引。
    DROP FULLTEXT INDEX <index_name>DROP FULLTEXT INDEX nebula_index_1删除全文索引。
    `LOOKUP ON {<edge_type>} WHERE ES_QUERY(<index_name>, “ ”) YIELD <return_list> [ LIMIT [,] <number_rows>]`

4.10 子图和路径

类型语法示例说明
子图`GET SUBGRAPH [WITH PROP] [<step_count> {STEPSTEPS}] FROM {, …} [{INOUT
路径`FIND { SHORTESTALLNOLOOP } PATH [WITH PROP] FROM <vertex_id_list> TO <vertex_id_list> OVER <edge_type_list> [REVERSELY

4.11 查询调优

类型语法示例说明
EXPLAIN`EXPLAIN [format=“row”“dot”] <your_nGQL_statement>`EXPLAIN format="row" SHOW TAGS
EXPLAIN format="dot" SHOW TAGS
PROFILE`PROFILE [format=“row”“dot”] <your_nGQL_statement>`PROFILE format="row" SHOW TAGS
PROFILE format="dot" SHOW TAGS

4.2 运维

  • SUBMIT JOB BALANCE

    语法说明
    SUBMIT JOB BALANCE LEADER启动任务均衡分布所有图空间中的 leader。该命令会返回任务 ID。
  • 作业管理

    语法说明
    SUBMIT JOB COMPACT触发 RocksDB 的长耗时compact操作。
    SUBMIT JOB FLUSH将内存中的 RocksDB memfile 写入硬盘。
    SUBMIT JOB STATS启动一个作业,该作业对当前图空间进行统计。作业完成后,用户可以使用SHOW STATS语句列出统计结果。
    SHOW JOB <job_id>显示当前图空间内指定作业和相关任务的信息。Meta 服务将SUBMIT JOB请求解析为多个任务,然后分配给进程 nebula-storaged。
    SHOW JOBS列出当前图空间内所有未过期的作业。
    STOP JOB停止当前图空间内未完成的作业。
    RECOVER JOB重新执行当前图空间内失败的作业,并返回已恢复的作业数量。
  • 终止查询

    语法示例说明
    KILL QUERY (session=<session_id>, plan=<plan_id>)KILL QUERY(SESSION=1625553545984255,PLAN=163)在一个会话中执行命令终止另一个会话中的查询。
  • 终止会话

    语法示例说明
    `KILL {SESSIONSESSIONS} `KILL SESSION 1672887983842984
    `SHOW SESSIONSYIELD $-.SessionId AS sid [WHERE <filter_clause>]KILL {SESSION
    `SHOW SESSIONSKILL SESSIONS $-.SessionId``SHOW SESSIONS
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值