Nubula学习笔记

一、DDL

1、创建图空间

CREATE SPACE [IF NOT EXISTS] <graph_space_name> (
    [partition_num = <partition_number>,]
    [replica_factor = <replica_number>,]
    vid_type = {FIXED_STRING(<N>) | INT[64]}
    )
    [COMMENT = '<comment>'];
参数说明
IF NOT EXISTS检测待创建的图空间是否存在,只有不存在时,才会创建图空间。仅检测图空间的名称,不会检测具体属性。
<graph_space_name>在 Nebula Graph 实例中唯一标识一个图空间。图空间名称以英文字母开头,支持 1~4 字节的 UTF-8 编码字符,包括英文字母(区分大小写)、数字、中文等,但是不包括除下划线外的特殊字符。使用特殊字符或保留关键字时,需要用反引号(`)包围,详情参见关键字和保留字
partition_num指定图空间的分片数量。建议设置为集群中硬盘数量的 20 倍(HDD 硬盘建议为 2 倍)。例如集群中有 3 个硬盘,建议设置 60 个分片。默认值为 100。
replica_factor指定每个分片的副本数量。建议在生产环境中设置为 3,在测试环境中设置为 1。由于需要基于多数表决,副本数量必须是奇数。默认值为 1。
vid_type必选参数。指定点 ID 的数据类型。可选值为FIXED_STRING(<N>)INT64INT等同于INT64FIXED_STRING(<N>)表示数据类型为字符串,最大长度为N,超出长度会报错;INT64表示数据类型为整数。
COMMENT图空间的描述。最大为 256 字节。默认无描述。

例如:CREATE SPACE PersonCarRel(vid_type=FIXED_STRING(30));

2、创建Tag

创建 Tag 前,需要先用USE语句指定工作空间。

CREATE TAG [IF NOT EXISTS] <tag_name>
    (
      <prop_name> <data_type> [NULL | NOT NULL] [DEFAULT <default_value>] [COMMENT '<comment>']
      [{, <prop_name> <data_type> [NULL | NOT NULL] [DEFAULT <default_value>] [COMMENT '<comment>']} ...] 
    )
    [TTL_DURATION = <ttl_duration>]
    [TTL_COL = <prop_name>]
    [COMMENT = '<comment>'];
参数说明
IF NOT EXISTS检测待创建的 Tag 是否存在,只有不存在时,才会创建 Tag。仅检测 Tag 的名称,不会检测具体属性。
<tag_name>每个图空间内的 Tag 必须是唯一的。Tag 名称设置后无法修改。Tag 名称以英文字母开头,支持 1~4 字节的 UTF-8 编码字符,包括英文字母(区分大小写)、数字、中文等,但是不包括除下划线外的特殊字符。使用特殊字符或保留关键字时,需要用反引号(`)包围,详情参见关键字和保留字
<prop_name>属性名称。每个 Tag 中的属性名称必须唯一。属性的命名规则与 Tag 相同。
<data_type>属性的数据类型,目前支持数值布尔字符串以及日期与时间
NULL \| NOT NULL指定属性值是否支持为NULL。默认值为NULL
DEFAULT指定属性的默认值。默认值可以是一个文字值或 Nebula Graph 支持的表达式。如果插入点时没有指定某个属性的值,则使用默认值。
COMMENT对单个属性或 Tag 的描述。最大为 256 字节。默认无描述。
TTL_DURATION指定时间戳差值,单位:秒。时间戳差值必须为 64 位非负整数。属性值和时间戳差值之和如果小于当前时间戳,属性就会过期。默认值为0,表示属性永不过期。
TTL_COL指定要设置存活时间的属性。属性的数据类型必须是int或者timestamp。一个 Tag 只能指定一个字段为TTL_COL。更多 TTL 的信息请参见 TTL

例如:CREATE TAG IF NOT EXISTS Person(name string,age bigint);

            CREATE TAG IF NOT EXISTS Car(brand string,model string);

3、创建边Edge

创建 Edge type 前,需要先用USE语句指定工作空间。

CREATE EDGE [IF NOT EXISTS] <edge_type_name>
    (
      <prop_name> <data_type> [NULL | NOT NULL] [DEFAULT <default_value>] [COMMENT '<comment>']
      [{, <prop_name> <data_type> [NULL | NOT NULL] [DEFAULT <default_value>] [COMMENT '<comment>']} ...] 
    )
    [TTL_DURATION = <ttl_duration>]
    [TTL_COL = <prop_name>]
    [COMMENT = '<comment>'];
参数说明
IF NOT EXISTS检测待创建的 Edge type 是否存在,只有不存在时,才会创建 Edge type。仅检测 Edge type 的名称,不会检测具体属性。
<edge_type_name>每个图空间内的 Edge type 必须是唯一的。Edge type 名称设置后无法修改。Edge type 名称以英文字母开头,支持 1~4 字节的 UTF-8 编码字符,包括英文字母(区分大小写)、数字、中文等,但是不包括除下划线外的特殊字符。使用特殊字符或保留关键字时,需要用反引号(`)包围,详情参见关键字和保留字
<prop_name>属性名称。每个 Edge type 中的属性名称必须唯一。属性的命名规则与 Edge type 相同。
<data_type>属性的数据类型,目前支持数值布尔字符串以及日期与时间
NULL \| NOT NULL指定属性值是否支持为NULL。默认值为NULL
DEFAULT指定属性的默认值。默认值可以是一个文字值或 Nebula Graph 支持的表达式。如果插入边时没有指定某个属性的值,则使用默认值。
COMMENT对单个属性或 Edge type 的描述。最大为 256 字节。默认无描述。
TTL_DURATION指定时间戳差值,单位:秒。时间戳差值必须为 64 位非负整数。属性值和时间戳差值之和如果小于当前时间戳,属性就会过期。默认值为0,表示属性永不过期。
TTL_COL指定要设置存活时间的属性。属性的数据类型必须是int或者timestamp。一个 Edge type 只能指定一个字段为TTL_COL。更多 TTL 的信息请参见 TTL

例如:CREATE EDGE IF NOT EXISTS relation(degree int);

二、DQL

1、查询点

① Match

MATCH 语法如下:

MATCH <pattern> [<clause_1>]  RETURN <output>  [<clause_2>];
  • pattern:pattern 的详细说明请参见模式MATCH语句支持匹配一个或多个模式,多个模式之间用英文逗号(,)分隔。例如(a)-[]->(b),(c)-[]->(d)
  • clause_1:支持WHEREWITHUNWINDOPTIONAL MATCH子句,也可以使用MATCH作为子句。
  • output:定义需要返回的输出。可以使用AS设置输出的别名。
  • clause_2:支持ORDER BYLIMIT子句。

match (v) where id(v) == "ID值" return v;

其中 match固定语法

        (v)是形式参数

          where id(v) 固定语法

            字符串类型 == 后需要加引号

点为数值类型:

match (v) where id(v) == 13001338694 return v;

字符串类型 == 后不需要加引号

nebula> MATCH (v)  RETURN v  LIMIT 3;

+-----------------------------------------------------------+

| v |

+-----------------------------------------------------------+

|("player102" :player{age: 33, name: "LaMarcus Aldridge"}) |

|("player106" :player{age: 25, name: "Kyle Anderson"}) | 

|("player115" :player{age: 40, name: "Kobe Bryant"}) |

+-----------------------------------------------------------+

nebula> MATCH (v:player)  RETURN v  LIMIT 3;

+-----------------------------------------------------------+

| v |

+-----------------------------------------------------------+

| ("player102" :player{age: 33, name: "LaMarcus Aldridge"}) |

| ("player106" :player{age: 25, name: "Kyle Anderson"}) |

| ("player115" :player{age: 40, name: "Kobe Bryant"}) |

+-----------------------------------------------------------+

使用WHERE子句也可以实现相同的操作:

nebula> MATCH (v:player) \
        WHERE v.player.name == "Tim Duncan" \
        RETURN v;
+----------------------------------------------------+
| v                                                  |
+----------------------------------------------------+
| ("player100" :player{age: 42, name: "Tim Duncan"}) |
+----------------------------------------------------+

②FETCH

语法

FETCH PROP ON {<tag_name>[, tag_name ...] | *}
<vid> [, vid ...]
YIELD <return_list> [AS <alias>];
参数说明
tag_nameTag 名称。
*表示当前图空间中的所有 Tag。
vid点 ID。
YIELD定义需要返回的输出。详情请参见 YIELD
AS设置别名。

FETCH PROP ON [Person ] ["13001338694"] yield [Person.age,Person.name];

其中 FETCH PROP ON为固定语法 

        Person 为tagName

        "13001338694" 为 Vid

        yield 为固定语法

        Person.age,Person.nam 为属性值

③ Go

GO [[<M> TO] <N> STEPS ] FROM <vertex_list>
OVER <edge_type_list> [{REVERSELY | BIDIRECT}]
[ WHERE <conditions> ]
YIELD [DISTINCT] <return_list>
[{ SAMPLE <sample_list> | <limit_by_list_clause> }]
[| GROUP BY {<col_name> | expression> | <position>} YIELD <col_name>]
[| ORDER BY <expression> [{ASC | DESC}]]
[| LIMIT [<offset>,] <number_rows>];

<vertex_list> ::=
    <vid> [, <vid> ...]

<edge_type_list> ::=
   <edge_type> [, <edge_type> ...]
   | *

<return_list> ::=
    <col_name> [AS <col_alias>] [, <col_name> [AS <col_alias>] ...]
  • <N> STEPS:指定跳数。如果没有指定跳数,默认值N1。如果N0,Nebula Graph 不会检索任何边。
  • M TO N STEPS:遍历M~N跳的边。如果M0,输出结果和M1相同,即GO 0 TO 2GO 1 TO 2是相同的。
  • <vertex_list>:用逗号分隔的点 ID 列表,或特殊的引用符$-.id。详情参见管道符
  • <edge_type_list>:遍历的 Edge type 列表。
  • REVERSELY | BIDIRECT:默认情况下检索的是<vertex_list>的出边(正向),REVERSELY表示反向,即检索入边;BIDIRECT 为双向,即检索正向和反向,通过返回 <edge_type>._type 字段判断方向,其正数为正向,负数为反向。
  • WHERE <conditions>:指定遍历的过滤条件。用户可以在起始点、目的点和边使用WHERE子句,还可以结合ANDORNOTXOR一起使用。详情参见 WHERE

    Note

    遍历多个 Edge type 时,WHERE子句有一些限制。例如不支持WHERE edge1.prop1 > edge2.prop2

  • YIELD [DISTINCT] <return_list>:定义需要返回的输出。<return_list>建议使用 Schema 函数,当前支持src(edge)dst(edge)type(edge)等,暂不支持嵌套函数。详情参见 YIELD
  • SAMPLE <sample_list>:用于在结果集中取样。详情参见 SAMPLE
  • <limit_by_list_clause>:用于在遍历过程中逐步限制输出数量。详情参见 LIMIT
  • GROUP BY:根据指定属性的值将输出分组。详情参见 GROUP BY。分组后需要再次使用YIELD定义需要返回的输出。
  • ORDER BY:指定输出结果的排序规则。详情参见 ORDER BY

    Note

    没有指定排序规则时,输出结果的顺序不是固定的。

  • LIMIT [<offset>,] <number_rows>]:限制输出结果的行数。详情参见 LIMIT

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值