CREATE TAG 语法

CREATE TAG [IF NOT EXISTS] <tag_name>
    ([<create_definition>, ...])
    [tag_options]

<create_definition> ::=
    <prop_name> <data_type>

<tag_options> ::=
    <option> [, <option> ...]

<option> ::=
    TTL_DURATION [=] <ttl_duration>
    | TTL_COL [=] <prop_name>
    | DEFAULT <default_value>

Nebula Graph 的图结构由带有属性的 tags 和 edges 组成。CREATE TAG 使用一个给定的名称创建一个新的 tag。

CREATE TAG 语法有一些特点,在如下分块中将对这些特点进行讨论:

IF NOT EXISTS

创建 tag 可使用 IF NOT EXISTS 关键字,这个关键字会自动检测对应的 tag 是否存在,如果不存在则创建新的,如果存在则直接返回。

注意: 这里判断 tag 是否存在只是比较 tag 的名字(不包括属性)。

Tag 名称

  • tag_name

    tags 的名称在图中必须唯一,且名称被定义后无法被修改。Tag 的命名规则和 space 的命名规则一致。参见 Schema Object Name

属性名和数据类型

  • prop_name

    prop_name 表示每个属性的名称。在每个 tag 中必须唯一。

  • data_type

    data_type 表示每个属性的数据类型。更多关于 Nebula Graph 支持的数据类型信息请参见 data-type

    NULL 和 NOT NULL 在创建 tag 时不可用。(相比于关系型数据库)。

  • 默认值约束

    您可以在创建标签/边时使用 DEFAULT 约束设置属性的默认值。如果没有指定其他值,那么会将默认值插入新的点。默认值可以为 Nebula Graph 支持的任一数据类型,且支持表达式。如果您不想使用默认值,也可以写一个用户指定的值。

    暂时不支持使用 Alter 更改默认值。

Time-to-Live (TTL) 语法

  • TTL_DURATION

    TTL_DURATION 指定了 vertices 和 edges 的有效期,超过有效期的数据会失效。失效时间为 TTL_COL 设置的属性值加 TTL_DURATION 设置的秒数。

    如果 TTL_DURATION 的值为负或 0,则该 edge 不会失效。

  • TTL_COL

    指定的列(或者属性)必须是 int64 或者 timestamp。

  • 单 TTL 定义

    仅支持指定单个 TTL_COL 字段。

TTL 详细用法参见 TTL 文档

示例

nebula> CREATE TAG course(name string, credits int);
nebula> CREATE TAG notag();  -- 属性为空

nebula> CREATE TAG player_with_default(name string, age int DEFAULT 20);  -- 默认年龄设置为 20 岁
nebula> CREATE TAG woman(name string, age int,
   married bool, salary double, create_time timestamp)
   TTL_DURATION = 100, TTL_COL = "create_time"; -- 时间间隔是 100s,从 create_time 字段的值开始

nebula> CREATE TAG icecream(made timestamp, temperature int)
   TTL_DURATION = 100, TTL_COL = "made";
   --  超过 TTL_DURATION 数据即失效