Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Insert vertex and tag #1360

Merged
merged 10 commits into from
Jan 7, 2022
Merged
Show file tree
Hide file tree
Changes from 8 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion docs-2.0/1.introduction/2.data-model.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ Nebula Graph 数据模型使用 6 种基本的数据模型:
点用来保存实体对象,特点如下:

- 点是用点标识符(`VID`)标识的。`VID`在同一图空间中唯一。VID 是一个 int64,或者 fixed_string(N)。
- 点必须有至少一个 Tag,也可以有多个 Tag。但不能没有 Tag。
foesa-yang marked this conversation as resolved.
Show resolved Hide resolved
- 点可以有 0 到多个 Tag。

- 边(Edge)

Expand Down
7 changes: 3 additions & 4 deletions docs-2.0/2.quick-start/4.nebula-graph-crud.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@

| 组成部分 | 说明|
| :--- | :--- |
| 点(Vertex) | 表示现实世界中的实体。一个点可以有一个或多个标签。 |
| 点(Vertex) | 表示现实世界中的实体。一个点可以有 0 到多个标签。 |
| 标签(Tag) | 点的类型,定义了一组描述点类型的属性。 |
| 边(Edge) | 表示两个点之间**有方向**的关系。|
| 边类型(Edge type) | 边的类型,定义了一组描述边的类型的属性。 |
Expand Down Expand Up @@ -180,10 +180,9 @@ nebula> CREATE EDGE serve(start_year int, end_year int);
- 插入点

```ngql
INSERT VERTEX [IF NOT EXISTS] <tag_name> (<property_name>[, <property_name>...])
INSERT VERTEX [IF NOT EXISTS] [<tag_name> (<property_name>] [, <property_name>...])
[, <tag_name> (<property_name>[, <property_name>...]), ...]
foesa-yang marked this conversation as resolved.
Show resolved Hide resolved
VALUES <vid>: (<property_value>[, <property_value>...])
[, <vid>: (<property_value>[, <property_value>...];
VALUES <vid>: ([<property_value>[, <property_value>...]]);
```

`VID`是 Vertex ID 的缩写,`VID`在一个图空间中是唯一的。参数详情请参见 [INSERT VERTEX](../3.ngql-guide/12.vertex-statements/1.insert-vertex.md)。
Expand Down
2 changes: 1 addition & 1 deletion docs-2.0/2.quick-start/6.cheatsheet-for-ngql-command.md
Original file line number Diff line number Diff line change
Expand Up @@ -384,7 +384,7 @@

| 语句 | 语法 | 示例 | 说明 |
| ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ |
| [INSERT VERTEX](../3.ngql-guide/12.vertex-statements/1.insert-vertex.md) | `INSERT VERTEX [IF NOT EXISTS] <tag_name> (<prop_name_list>) [, <tag_name> (<prop_name_list>), ...] VALUES VID: (<prop_value_list>[, <prop_value_list>])` | `INSERT VERTEX t2 (name, age) VALUES "13":("n3", 12), "14":("n4", 8)` | 在 Nebula Graph 实例的指定图空间中插入一个或多个点。 |
| [INSERT VERTEX](../3.ngql-guide/12.vertex-statements/1.insert-vertex.md) | `INSERT VERTEX [IF NOT EXISTS] [<tag_name> (<property_name>] [, <property_name>...]) [, <tag_name> (<property_name>[, <property_name>...]), ...] VALUES <vid>: ([<property_value>[, <property_value>...]]);` | `INSERT VERTEX t2 (name, age) VALUES "13":("n3", 12), "14":("n4", 8)` | 在 Nebula Graph 实例的指定图空间中插入一个或多个点。 |
| [DELETE VERTEX](../3.ngql-guide/12.vertex-statements/4.delete-vertex.md) | `DELETE VERTEX <vid> [, <vid> ...]` | `DELETE VERTEX "team1"` | 删除点,以及点关联的出边和入边。 |
| [UPDATE VERTEX](../3.ngql-guide/12.vertex-statements/2.update-vertex.md) | `UPDATE VERTEX ON <tag_name> <vid> SET <update_prop> [WHEN <condition>] [YIELD <output>]` | `UPDATE VERTEX ON player "player101" SET age = age + 2 ` | 修改点上 Tag 的属性值。 |
| [UPSERT VERTEX](../3.ngql-guide/12.vertex-statements/3.upsert-vertex.md) | `UPSERT VERTEX ON <tag> <vid> SET <update_prop> [WHEN <condition>] [YIELD <output>]` | `UPSERT VERTEX ON player "player667" SET age = 31` | 结合`UPDATE`和`INSERT`,如果点存在,会修改点的属性值;如果点不存在,会插入新的点。 |
Expand Down
10 changes: 3 additions & 7 deletions docs-2.0/20.appendix/0.FAQ.md
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ Nebula Graph 一直在持续开发,功能或操作的行为可能会有变化

悬挂边 (Dangling edge) 是指一条边的起点或者终点在数据库中不存在。

Nebula Graph {{ nebula.release }} 的数据模型中,异常情况下可能会存在"悬挂边";也没有 openCypher 中的 MERGE 语句。对于悬挂边的保证完全依赖应用层面。详见 [INSERT VERTEX](../3.ngql-guide/12.vertex-statements/1.insert-vertex.md), [DELETE VERTEX](../3.ngql-guide/12.vertex-statements/4.delete-vertex.md), [INSERT EDGE](../3.ngql-guide/13.edge-statements/1.insert-edge.md), [DELETE EDGE](../3.ngql-guide/13.edge-statements/4.delete-edge.md)。
Nebula Graph {{ nebula.release }} 的数据模型中,由设计允许图中存在“悬挂边“;没有 openCypher 中的 MERGE 语句。对于悬挂边的保证完全依赖应用层面。详见 [INSERT VERTEX](../3.ngql-guide/12.vertex-statements/1.insert-vertex.md), [DELETE VERTEX](../3.ngql-guide/12.vertex-statements/4.delete-vertex.md), [INSERT EDGE](../3.ngql-guide/13.edge-statements/1.insert-edge.md), [DELETE EDGE](../3.ngql-guide/13.edge-statements/4.delete-edge.md)。
foesa-yang marked this conversation as resolved.
Show resolved Hide resolved

### 如何处理错误信息 `[ERROR (-1005)]: Used memory hits the high watermark(0.800000) of total system memory.`

Expand Down Expand Up @@ -236,11 +236,7 @@ Storage 服务在毫秒级时间内多次收到插入或者更新同一点或边

### 能不能用中文字符做标识符,比如图空间、Tag、Edge type、属性、索引的名称?

不能。

图空间、Tag、Edge type、属性以及索引的名称都需由大小写英文字母、数字或下划线组成,暂不支持使用中文字符。

同时,上述标识符区分大小写,且不可使用[关键字和保留字](../3.ngql-guide/1.nGQL-overview/keywords-and-reserved-words.md)。
能,详情参见[关键字和保留字](../3.ngql-guide/1.nGQL-overview/keywords-and-reserved-words.md)。

### 获取指定点的出度(或者入度)?

Expand Down Expand Up @@ -378,4 +374,4 @@ telnet: connect to address 192.168.1.10: Connection refused
| 未到生效期 | 不可登录且无法使用 | 您的 License 还未到生效时间,请于有效期范围内使用。 |
| 过期前 3 天内 | 可以登录并继续使用 | 您的 License 证书有效时间还剩 <3\|2\|1\|0> 天,过期7天后无法使用,请及时联系销售([[email protected]](mailto:[email protected]))购买并更换新的证书。 |
| 过期后 7 天内 | 可以登录并继续使用 | 您的 License 证书已过期 <0\|1\|2\|3\|4\|5\|6\|7> 天,过期7天后无法使用,请及时联系销售([[email protected]](mailto:[email protected]))购买并更换新的证书。 |
| 过期后 7 天以上 | 不可登录且无法使用 | 您的 License 已过期 7 天以上,产品无法正常使用,请及时联系销售([[email protected]](mailto:[email protected]))购买并更换新的证书。 |
| 过期后 7 天以上 | 不可登录且无法使用 | 您的 License 已过期 7 天以上,产品无法正常使用,请及时联系销售([[email protected]](mailto:[email protected]))购买并更换新的证书。 |
6 changes: 0 additions & 6 deletions docs-2.0/3.ngql-guide/10.tag-statements/6.delete-tag.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,6 @@

`DELETE TAG`语句可以删除指定点上的指定 Tag。

点可以有一个或多个 Tag。

- 如果某个点只有一个 Tag,删除这个点上的 Tag 后,用户就**无法访问**这个点,下次 Compaction 操作时会删除该点,但点上的边仍然存在。

- 如果某个点有多个 Tag,删除其中一个 Tag,仍然可以访问这个点,但是**无法访问**这个点上已删除 Tag 所定义的所有属性。

## 前提条件

登录的用户必须拥有对应权限才能执行`DELETE TAG`语句。详情请参见[内置角色权限](../../7.data-security/1.authentication/3.role-list.md)。
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,6 @@

在 Nebula Graph 中,可以通过 Tag 变相实现相同操作,创建 Tag 并将 Tag 插入到已有的点上,就可以根据 Tag 名称快速查找点,也可以通过`DELETE TAG`删除某些点上不再需要的 Tag。

!!! caution

请确保点上已经有另一个 Tag,否则删除点上最后一个 Tag 时,会导致点也被删除。

## 示例

例如在 basketballplayer 数据集中,部分篮球运动员同时也是球队股东,可以为股东 Tag`shareholder`创建索引,方便快速查找。如果不再是股东,可以通过`DELETE TAG`语句删除相应运动员的股东 Tag。
Expand Down
27 changes: 15 additions & 12 deletions docs-2.0/3.ngql-guide/12.vertex-statements/1.insert-vertex.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,14 +9,9 @@
## 语法

```ngql
INSERT VERTEX [IF NOT EXISTS] <tag_name> (<prop_name_list>) [, <tag_name> (<prop_name_list>), ...]
VALUES VID: (<prop_value_list>[, <prop_value_list>])

prop_name_list:
[prop_name [, prop_name] ...]

prop_value_list:
[prop_value [, prop_value] ...]
INSERT VERTEX [IF NOT EXISTS] [<tag_name> ([<property_name>] [, <property_name>...])
[, <tag_name> ([<property_name>] [, <property_name>...]), ...] ]
VALUES <vid>: ([<property_value>[, <property_value>...]]);
```

- `IF NOT EXISTS`:用户可以使用`IF NOT EXISTS`关键字检测待插入的 VID 是否存在,只有不存在时,才会插入,如果已经存在,不会进行修改。
Expand All @@ -26,13 +21,17 @@ prop_value_list:
- `IF NOT EXISTS` 仅检测 VID + Tag 的值是否相同,不会检测属性值。
- `IF NOT EXISTS` 会先读取一次数据是否存在,因此对性能会有明显影响。

- `tag_name`:点关联的 Tag(点类型)。Tag 必须提前创建,详情请参见 [CREATE TAG](../10.tag-statements/1.create-tag.md)。
- `tag_name`:点关联的 Tag(点类型)。Tag 的创建,详情请参见 [CREATE TAG](../10.tag-statements/1.create-tag.md)。

!!! caution

- `prop_name_list`:需要设置的属性名称列表
Nebula Graph {{ nebula.release }} 中支持插入无 Tag 的点

- `VID`:点 ID。在 Nebula Graph 2.0 中支持字符串和整数,需要在创建图空间时设置,详情请参见 [CREATE SPACE](../9.space-statements/1.create-space.md)
- `property_name`:需要设置的属性名称

- `prop_value_list`:根据`prop_name_list`填写属性值。如果没有填写属性值,而 Tag 中对应的属性设置为`NOT NULL`,会返回错误。详情请参见 [CREATE TAG](../10.tag-statements/1.create-tag.md)。
- `vid`:点 ID。在 Nebula Graph {{ nebula.release }} 中支持字符串和整数,需要在创建图空间时设置,详情请参见 [CREATE SPACE](../9.space-statements/1.create-space.md)。

- `property_value`:根据`prop_name_list`填写属性值。如果没有填写属性值,而 Tag 中对应的属性设置为`NOT NULL`,会返回错误。详情请参见 [CREATE TAG](../10.tag-statements/1.create-tag.md)。

!!! caution

Expand All @@ -47,6 +46,9 @@ prop_value_list:
## 示例

```ngql
# 插入不包含 Tag 的点。
nebula> INSERT VERTEX VALUES "1":();

# 插入不包含属性的点。
nebula> CREATE TAG IF NOT EXISTS t1();
nebula> INSERT VERTEX t1() VALUES "10":();
Expand Down Expand Up @@ -118,6 +120,7 @@ nebula> FETCH PROP on t5 "004" YIELD properties(vertex);
```ngql
# 插入点 1。
nebula> INSERT VERTEX t2 (name, age) VALUES "1":("n2", 13);

# 使用 IF NOT EXISTS 修改点 1,因为点 1 已存在,不会进行修改。
nebula> INSERT VERTEX IF NOT EXISTS t2 (name, age) VALUES "1":("n3", 14);
nebula> FETCH PROP ON t2 "1" YIELD properties(vertex);
Expand Down
24 changes: 18 additions & 6 deletions docs-2.0/3.ngql-guide/12.vertex-statements/4.delete-vertex.md
Original file line number Diff line number Diff line change
@@ -1,35 +1,47 @@
# DELETE VERTEX

`DELETE VERTEX`语句可以删除点,以及点关联的出边和入边。
`DELETE VERTEX`语句可以删除点,但是默认不删除该点关联的出边和入边。

!!! Compatibility

Nebula Graph 2.x 默认删除点及关联该点的出边和入,Nebula Graph {{nebula.release}} 默认只删除点,不删除该点关联的出边和入边。
foesa-yang marked this conversation as resolved.
Show resolved Hide resolved

`DELETE VERTEX`语句一次可以删除一个或多个点。用户可以结合管道符一起使用,详情请参见[管道符](../5.operators/4.pipe.md)。

!!! note

- `DELETE VERTEX`是直接删除点和关联的边
- `DELETE VERTEX`是直接删除点,不删除关联的边

- `DELETE TAG`是删除指定点上的指定 Tag。当点上只有一个 Tag 时,执行`DELETE TAG`会删除点,但是不会删除关联的边。
- `DELETE TAG`是删除指定点上的指定 Tag。

## 语法

```ngql
DELETE VERTEX <vid> [, <vid> ...];
DELETE VERTEX <vid> [ { , <vid> }... ] [WITH EDGE];
foesa-yang marked this conversation as resolved.
Show resolved Hide resolved
```

- `WITH EDGE`: 删除该点关联的出边和入边。


## 示例

```ngql
# 删除 VID 为 `team1` 的点,不删除该点关联的出边和入边。
nebula> DELETE VERTEX "team1";

# 删除 VID 为 `team1` 的点,并删除该点关联的出边和入边。
nebula> DELETE VERTEX "team1" WITH EDGE;

```

```ngql
# 结合管道符,删除符合条件的点。
nebula> GO FROM "player100" OVER serve WHERE properties(edge).start_year == "2021" YIELD dst(edge) AS id | DELETE VERTEX $-.id;
```

## 删除过程与删除邻边
## 删除过程

Nebula Graph 先找到并删除目标点的所有邻边(出边和入边),然后删除目标点
Nebula Graph 找到目标点并删除,该目标点的所有邻边(出边和入边)将成为悬挂边

!!! caution

Expand Down