From 88f9089c1e922ac74b02335cf443eca189091964 Mon Sep 17 00:00:00 2001 From: "abby.huang" <78209557+abby-cyber@users.noreply.github.com> Date: Fri, 24 Dec 2021 13:52:28 +0800 Subject: [PATCH 01/33] Update deploy-license.md (#1341) --- .../4.deployment-and-installation/deploy-license.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/docs-2.0/4.deployment-and-installation/deploy-license.md b/docs-2.0/4.deployment-and-installation/deploy-license.md index 4d993cd1dbe..e2f3d757148 100644 --- a/docs-2.0/4.deployment-and-installation/deploy-license.md +++ b/docs-2.0/4.deployment-and-installation/deploy-license.md @@ -1,4 +1,4 @@ -# 设置企业版 License +# 设置 Nebula Graph 企业版 License Nebula Graph 企业版需要用户设置 License 才可以正常启动并使用企业版功能,本文介绍如何设置企业版的 License 文件。 @@ -14,13 +14,13 @@ Nebula Graph 企业版需要用户设置 License 才可以正常启动并使用 - License 快过期时,请及时发送邮件至`inquiry@vesoft.com`申请续期。 -- License 的过期缓冲为 3 天: +- License 的过期缓冲为 7 天: - - 过期 7 天前和过期当天,服务启动时会打印日志进行提醒。 + - 过期 3 天前和过期当天,服务启动时会打印日志进行提醒。 - - 过期后仍可继续使用 3 天。 + - 过期后仍可继续使用 7 天。 - - 过期 3 天后,服务无法启动,并会打印日志进行提醒。 + - 过期 7 天后,服务无法启动,并会打印日志进行提醒。 ## License 说明 From 2ed848b1db27db97f6795dd70991d28da0c0b194 Mon Sep 17 00:00:00 2001 From: cooper-lzy <78672629+cooper-lzy@users.noreply.github.com> Date: Tue, 28 Dec 2021 11:36:49 +0800 Subject: [PATCH 02/33] add cypher parameter (#1342) * add cypher parameter * update * update * Update docs-2.0/nebula-console.md Co-authored-by: randomJoe211 <69501902+randomJoe211@users.noreply.github.com> * Update docs-2.0/nebula-console.md Co-authored-by: randomJoe211 <69501902+randomJoe211@users.noreply.github.com> * Update docs-2.0/3.ngql-guide/1.nGQL-overview/1.overview.md Co-authored-by: abby.huang <78209557+abby-cyber@users.noreply.github.com> * Update docs-2.0/nebula-console.md Co-authored-by: abby.huang <78209557+abby-cyber@users.noreply.github.com> * Update nebula-console.md * Update nebula-console.md Co-authored-by: randomJoe211 <69501902+randomJoe211@users.noreply.github.com> Co-authored-by: abby.huang <78209557+abby-cyber@users.noreply.github.com> --- .../1.nGQL-overview/1.overview.md | 2 +- docs-2.0/nebula-console.md | 167 ++++++++++++++++++ .../reuse/source_connect-to-nebula-graph.md | 131 -------------- mkdocs.yml | 2 + 4 files changed, 170 insertions(+), 132 deletions(-) create mode 100644 docs-2.0/nebula-console.md diff --git a/docs-2.0/3.ngql-guide/1.nGQL-overview/1.overview.md b/docs-2.0/3.ngql-guide/1.nGQL-overview/1.overview.md index 4ea2605b33b..c702b464146 100644 --- a/docs-2.0/3.ngql-guide/1.nGQL-overview/1.overview.md +++ b/docs-2.0/3.ngql-guide/1.nGQL-overview/1.overview.md @@ -100,7 +100,7 @@ nebula> CREATE TAG IF NOT EXISTS player(name string, age int); |语句|-|不支持 openCypher 9 的所有 DML 语句(如`CREATE`、`MERGE`等),不支持所有的 DCL, 和支持部分 `MATCH` 语法和函数(不支持`OPTIONAL MATCH`,不支持多`MATCH`,不支持 `WHERE` 中使用图 pattern)。 | |语句文本换行 | 换行符 | `\` + 换行符 | |Label 与 Tag 是不同的概念| Label 用于寻找点(点的索引)。 | Tag 用于定义点的一种类型及相应的属性,无索引功能。 | -| 预编译与参数化查询 | 支持 | 不支持 | +| 预编译与参数化查询 | 支持 | 仅支持参数化查询。 | !!! compatibility diff --git a/docs-2.0/nebula-console.md b/docs-2.0/nebula-console.md new file mode 100644 index 00000000000..d5d3018e695 --- /dev/null +++ b/docs-2.0/nebula-console.md @@ -0,0 +1,167 @@ +# Nebula Console + +Nebula Console 是 Nebula Graph 的原生命令行客户端,用于连接 Nebula Graph 集群并执行查询,同时支持管理参数、导出命令的执行结果、导入测试数据集等。 + +使用 Nebula Console 连接 Nebula Graph 请参见[步骤 3:连接 Nebula Graph](2.quick-start/3.connect-to-nebula-graph.md)。 + +!!! note + + 命令不区分大小写。 + +## 管理参数 + +可以保存参数,用于参数化查询。 + +!!! note + + - VID 不支持参数化查询。 + + - `SAMPLE`子句中不支持参数化查询。 + + - 会话释放后,参数不会保留。 + +保存参数命令如下: + +```ngql +nebula> :param => ; +``` + +示例: + +```ngql +nebula> :param p1 => "Tim Duncan"; +nebula> MATCH (v:player{name:$p1})-[:follow]->(n) RETURN v,n; ++----------------------------------------------------+-------------------------------------------------------+ +| v | n | ++----------------------------------------------------+-------------------------------------------------------+ +| ("player100" :player{age: 42, name: "Tim Duncan"}) | ("player125" :player{age: 41, name: "Manu Ginobili"}) | +| ("player100" :player{age: 42, name: "Tim Duncan"}) | ("player101" :player{age: 36, name: "Tony Parker"}) | ++----------------------------------------------------+-------------------------------------------------------+ + +nebula> :param p2 => {"a":3,"b":false,"c":"Tim Duncan"}; +nebula> RETURN $p2.b AS b; ++-------+ +| b | ++-------+ +| false | ++-------+ +``` + +查看当前保存的参数命令如下: + +```ngql +nebula> :params; +``` + +## 导出执行结果 + +导出命令执行的返回结果,可以保存为 CSV 文件或 DOT 文件。 + +!!! note + + - 文件保存在当前工作目录中,即 Linux 命令`pwd`显示的目录。 + + - 命令只对下一条查询语句生效。 + + - DOT 文件的内容可以复制后在 [GraphvizOnline](https://dreampuf.github.io/GraphvizOnline/) 网页中粘贴,生成可视化的执行计划图。 + +- 导出 CSV 文件命令如下: + + ```ngql + nebula> :CSV ; + ``` + +- 导出 DOT 文件命令如下: + + ```ngql + nebula> :dot ; + ``` + + 示例: + + ```ngql + nebula> :dot a.dot; + nebula> PROFILE FORMAT="dot" GO FROM "player100" OVER follow; + ``` + +## 加载测试数据集 + +测试数据集名称为 nba,详细 Schema 信息和数据信息请使用相关`SHOW`命令查看。 + +加载测试数据集命令如下: + +```ngql +nebula> :play nba; +``` + +## 重复执行 + +重复执行下一个命令 N 次,然后打印平均执行时间。命令如下: + +```ngql +nebula> :repeat N; +``` + +示例: + +```ngql +nebula> :repeat 3; +nebula> GO FROM "player100" OVER follow YIELD dst(edge); ++-------------+ +| dst(EDGE) | ++-------------+ +| "player101" | +| "player125" | ++-------------+ +Got 2 rows (time spent 2602/3214 us) + +Fri, 20 Aug 2021 06:36:05 UTC + ++-------------+ +| dst(EDGE) | ++-------------+ +| "player101" | +| "player125" | ++-------------+ +Got 2 rows (time spent 583/849 us) + +Fri, 20 Aug 2021 06:36:05 UTC + ++-------------+ +| dst(EDGE) | ++-------------+ +| "player101" | +| "player125" | ++-------------+ +Got 2 rows (time spent 496/671 us) + +Fri, 20 Aug 2021 06:36:05 UTC + +Executed 3 times, (total time spent 3681/4734 us), (average time spent 1227/1578 us) +``` + +## 睡眠 + +睡眠 N 秒。常用于修改 Schema 的操作中,因为修改 Schema 是异步实现的,需要在下一个心跳周期才同步数据。命令如下: + +```ngql +nebula> :sleep N; +``` + +## 断开连接 + +用户可以使用`:EXIT`或者`:QUIT`从 Nebula Graph 断开连接。为方便使用,Nebula Console 支持使用不带冒号(:)的小写命令,例如`quit`。 + +示例: + +```ngql +nebula> :QUIT; + +Bye root! +``` + +## 常见问题 + +### 如何通过源码安装 Nebula Console? + +下载和编译 Nebula Console 的最新源码,请参见 [GitHub nebula console](https://github.com/vesoft-inc/nebula-console#build-nebula-graph-console) 页面的说明。 diff --git a/docs-2.0/reuse/source_connect-to-nebula-graph.md b/docs-2.0/reuse/source_connect-to-nebula-graph.md index 27bca556ebc..cc4d111fb06 100644 --- a/docs-2.0/reuse/source_connect-to-nebula-graph.md +++ b/docs-2.0/reuse/source_connect-to-nebula-graph.md @@ -78,134 +78,3 @@ Nebula Graph 支持多种类型客户端,包括 CLI 客户端、GUI 客户端 | `-f/-file` | 设置存储 nGQL 语句的文件的路径。连接成功后会执行该文件内的 nGQL 语句并返回结果,执行完毕后自动断开连接。 | 用户可以使用`./nebula-console --help`命令获取所有参数的说明,也可以在[项目仓库](https://github.com/vesoft-inc/nebula-console/tree/{{console.branch}})找到更多说明。 - -## Nebula Console 命令 - -Nebula Console 提供部分命令,可以导出 CSV 文件、导出 DOT 文件、导入测试数据集等。 - -!!! note - - 命令不区分大小写。 - -### 导出 CSV 文件 - -CSV 文件用于保存命令执行的返回结果。 - -!!! note - - - CSV 文件保存在当前工作目录中,即 Linux 命令`pwd`显示的目录。 - - - 命令只对下一条查询语句生效。 - -导出 CSV 文件命令如下: - -```ngql -nebula> :CSV -``` - -### 导出 DOT 文件 - -DOT 文件同样用于保存命令执行的返回结果,其保存的结果信息和 CSV 文件不同。 - -!!! Note - - - DOT 文件保存在当前工作目录中,即 Linux 命令`pwd`显示的目录。 - - - DOT 文件的内容可以复制后在 [GraphvizOnline](https://dreampuf.github.io/GraphvizOnline/) 网页中粘贴,生成可视化的执行计划图。 - - - 命令只对下一条查询语句生效。 - -导出 DOT 文件命令如下: - -```ngql -nebula> :dot -``` - -示例: - -```ngql -nebula> :dot a.dot -nebula> PROFILE FORMAT="dot" GO FROM "player100" OVER follow; -``` - -### 加载测试数据集 - -测试数据集名称为 nba,详细 Schema 信息和数据信息请使用相关`SHOW`命令查看。 - -加载测试数据集命令如下: - -```ngql -nebula> :play nba -``` - -### 重复执行 - -重复执行下一个命令 N 次,然后打印平均执行时间。命令如下: - -```ngql -nebula> :repeat N -``` - -示例: - -```ngql -nebula> :repeat 3 -nebula> GO FROM "player100" OVER follow YIELD dst(edge); -+-------------+ -| dst(EDGE) | -+-------------+ -| "player101" | -| "player125" | -+-------------+ -Got 2 rows (time spent 2602/3214 us) - -Fri, 20 Aug 2021 06:36:05 UTC - -+-------------+ -| dst(EDGE) | -+-------------+ -| "player101" | -| "player125" | -+-------------+ -Got 2 rows (time spent 583/849 us) - -Fri, 20 Aug 2021 06:36:05 UTC - -+-------------+ -| dst(EDGE) | -+-------------+ -| "player101" | -| "player125" | -+-------------+ -Got 2 rows (time spent 496/671 us) - -Fri, 20 Aug 2021 06:36:05 UTC - -Executed 3 times, (total time spent 3681/4734 us), (average time spent 1227/1578 us) -``` - -### 睡眠 - -睡眠 N 秒。常用于修改 Schema 的操作中,因为修改 Schema 是异步实现的,需要在下一个心跳周期才同步数据。命令如下: - -```ngql -nebula> :sleep N -``` - -### 断开连接 - -用户可以使用`:EXIT`或者`:QUIT`从 Nebula Graph 断开连接。为方便使用,Nebula Console 支持使用不带冒号(:)的小写命令,例如`quit`。 - -示例: - -```ngql -nebula> :QUIT - -Bye root! -``` - -## 常见问题 - -### 如何通过源码安装 Nebula Console? - -下载和编译 Nebula Console 的最新源码,请参见 [GitHub nebula console](https://github.com/vesoft-inc/nebula-console#build-nebula-graph-console) 页面的说明。 diff --git a/mkdocs.yml b/mkdocs.yml index 7e8573e582e..3c1d8d8cada 100755 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -354,6 +354,8 @@ nav: - Nebula Python: 14.client/5.nebula-python-client.md - Nebula Go: 14.client/6.nebula-go-client.md + - Nebula Console: nebula-console.md + - Nebula Graph Studio: - Studio 版本更新说明: nebula-studio/about-studio/st-ug-release-note.md - 认识 Nebula Graph Studio: From 672cfb5b0a2b1a94d3d2d629cf620dece0c193ef Mon Sep 17 00:00:00 2001 From: randomJoe211 <69501902+randomJoe211@users.noreply.github.com> Date: Tue, 28 Dec 2021 13:43:08 +0800 Subject: [PATCH 03/33] Update kafka value parser (#1336) * Update kafka value parser * Update ex-ug-import-from-kafka.md * Update ex-ug-import-from-kafka.md * Update ex-ug-import-from-kafka.md * Update ex-ug-import-from-kafka.md * Update ex-ug-import-from-kafka.md * Update ex-ug-import-from-kafka.md --- .../use-exchange/ex-ug-import-from-kafka.md | 34 ++++++++----------- 1 file changed, 14 insertions(+), 20 deletions(-) diff --git a/docs-2.0/nebula-exchange/use-exchange/ex-ug-import-from-kafka.md b/docs-2.0/nebula-exchange/use-exchange/ex-ug-import-from-kafka.md index aefbbb6f850..52685d35b55 100644 --- a/docs-2.0/nebula-exchange/use-exchange/ex-ug-import-from-kafka.md +++ b/docs-2.0/nebula-exchange/use-exchange/ex-ug-import-from-kafka.md @@ -76,10 +76,6 @@ ### 步骤 2:修改配置文件 -!!! note - - 如果部分数据存储在 Kafka 的 value 域内,需要自行修改源码,从 Kafka 中获取 value 域,将 value 通过 from_json 函数解析,然后作为 Dataframe 返回。 - 编译 Exchange 后,复制`target/classes/application.conf`文件设置 Kafka 数据源相关的配置。在本示例中,复制的文件名为`kafka_application.conf`。各个配置项的详细说明请参见[配置说明](../parameter-reference/ex-ug-parameter.md)。 ```conf @@ -145,16 +141,15 @@ # 消息类别。 topic: "topic_name1" - # Kafka 数据有固定的域名称:key、value、topic、partition、offset、timestamp、timestampType。 - # Spark 读取为 DataFrame 后,如果需要指定多个字段,用英文逗号(,)隔开。 - # 在 fields 里指定字段名称,例如用 key 对应 Nebula 中的 name, value 对应 Nebula 中的 age,示例如下: - fields: [key,value] - nebula.fields: [name,age] + # 在 fields 里指定 Kafka value 中的字段名称,多个字段用英文逗号(,)隔开。Spark Structured Streaming 读取 Kafka 数据后会将其以 JSON 格式存储于 value 字段中,而这里的 fields 要配置 JSON 的 key 名。示例如下: + fields: [personName, personAge] + # 设置与 fields 中的 key 对应的 Nebula Graph 属性名,key 的 value 将保存为相应的属性值。下方设置会将 personName 的 value 保存到 Nebula Graph 中的 name 属性,personAge 的 value 则保存到 age 属性。 + nebula.fields: [name, age] # 指定表中某一列数据为 Nebula Graph 中点 VID 的来源。 # 这里的值 key 和上面的 key 重复,表示 key 既作为 VID,也作为属性 name。 vertex:{ - field:key + field:personId } # 单批次写入 Nebula Graph 的数据条数。 @@ -177,7 +172,7 @@ fields: [key] nebula.fields: [name] vertex:{ - field:key + field:teamId } batch: 10 partition: 10 @@ -207,20 +202,19 @@ # 消息类别。 topic: "topic_name3" - # Kafka 数据有固定的域名称:key、value、topic、partition、offset、timestamp、timestampType。 - # Spark 读取为 DataFrame 后,如果需要指定多个字段,用英文逗号(,)隔开。 - # 在 fields 里指定字段名称,例如用 key 对应 Nebula 中的 degree,示例如下: - fields: [key] + # 在 fields 里指定 Kafka value 中的字段名称,多个字段用英文逗号(,)隔开。Spark Structured Streaming 读取 Kafka 数据后会将其以 JSON 格式存储于 value 字段中,而这里的 fields 要配置 JSON 的 key 名。示例如下: + fields: [degree] + # 设置与 fields 中的 key 对应的 Nebula Graph 属性名,key 的 value 将保存为相应的属性值。下方设置会将 degree 的 value 保存到 Nebula Graph 中的 degree 属性。 nebula.fields: [degree] # 在 source 里,将 topic 中某一列作为边的起始点数据源。 # 在 target 里,将 topic 中某一列作为边的目的点数据源。 source:{ - field:timestamp + field:srcPersonId } target:{ - field:offset + field:dstPersonId } # 单批次写入 Nebula Graph 的数据条数。 @@ -243,14 +237,14 @@ service: "127.0.0.1:9092" topic: "topic_name4" - fields: [timestamp,offset] + fields: [startYear,endYear] nebula.fields: [start_year,end_year] source:{ - field:key + field:personId } target:{ - field:value + field:teamId } batch: 10 From 7b59c45959bafd90197a4e8a86cda7979657119a Mon Sep 17 00:00:00 2001 From: "abby.huang" <78209557+abby-cyber@users.noreply.github.com> Date: Tue, 28 Dec 2021 18:55:49 +0800 Subject: [PATCH 04/33] add license FAQ (#1343) * add license FAQ * Update 0.FAQ.md * Update 0.FAQ.md * Update 0.FAQ.md --- docs-2.0/20.appendix/0.FAQ.md | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/docs-2.0/20.appendix/0.FAQ.md b/docs-2.0/20.appendix/0.FAQ.md index fccb8797b32..62eb5bd6a35 100644 --- a/docs-2.0/20.appendix/0.FAQ.md +++ b/docs-2.0/20.appendix/0.FAQ.md @@ -326,7 +326,7 @@ storaged 扩缩容之后,还需要运行 [Balance Data 和 Balance Leader 命 ## 关于连接 -### 防火墙中需要开放哪些端口 +### 防火墙中需要开放哪些端口? 如果没有修改过[配置文件](../5.configurations-and-logs/1.configurations/1.configurations.md) 中预设的端口,请在防火墙中开放如下端口: @@ -340,7 +340,7 @@ storaged 扩缩容之后,还需要运行 [Balance Data 和 Balance Leader 命 周边工具各自使用不用的端口,请参考各工具文档。 -### 如何测试端口是否已开放 +### 如何测试端口是否已开放? 用户可以使用如下 telnet 命令检查端口状态: @@ -366,3 +366,16 @@ $ telnet 192.168.1.10 9777 Trying 192.168.1.10... telnet: connect to address 192.168.1.10: Connection refused ``` + +## 关于 License + +### License 过期前后,是否有信息提示?License 过期后如何续期? + +在License 过期前的 3 天内和过期后的 7 天内,用户会收到系统发出的 License 过期告警提示。 + +| License 使用时间 | 产品使用状态 | 消息提示及续费方式 | +| ---------------- | ------------------ | ------------------------------------------------------------ | +| 未到生效期 | 不可登录且无法使用 | 您的 License 还未到生效时间,请于有效期范围内使用。 | +| 过期前 3 天内 | 可以登录并继续使用 | 您的 License 证书有效时间还剩 <3|2|1|0> 天,过期7天后无法使用,请及时联系销售([inqury@vesoft.com](mailto:inqury@vesoft.com))购买并更换新的证书。 | +| 过期后 7 天内 | 可以登录并继续使用 | 您的 License 证书已过期 <0|1|2|3|4|5|6|7> 天,过期7天后无法使用,请及时联系销售([inqury@vesoft.com](mailto:inqury@vesoft.com))购买并更换新的证书。 | +| 过期后 7 天以上 | 不可登录且无法使用 | 您的 License 已过期 7 天以上,产品无法正常使用,请及时联系销售([inqury@vesoft.com](mailto:inqury@vesoft.com))购买并更换新的证书。 | \ No newline at end of file From ca468ff3c5c4b0bc5b952cbb0a913319270b1fc0 Mon Sep 17 00:00:00 2001 From: "abby.huang" <78209557+abby-cyber@users.noreply.github.com> Date: Wed, 29 Dec 2021 14:37:05 +0800 Subject: [PATCH 05/33] escape character display error (#1346) --- docs-2.0/20.appendix/0.FAQ.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs-2.0/20.appendix/0.FAQ.md b/docs-2.0/20.appendix/0.FAQ.md index 62eb5bd6a35..782a4a24e1c 100644 --- a/docs-2.0/20.appendix/0.FAQ.md +++ b/docs-2.0/20.appendix/0.FAQ.md @@ -376,6 +376,6 @@ telnet: connect to address 192.168.1.10: Connection refused | License 使用时间 | 产品使用状态 | 消息提示及续费方式 | | ---------------- | ------------------ | ------------------------------------------------------------ | | 未到生效期 | 不可登录且无法使用 | 您的 License 还未到生效时间,请于有效期范围内使用。 | -| 过期前 3 天内 | 可以登录并继续使用 | 您的 License 证书有效时间还剩 <3|2|1|0> 天,过期7天后无法使用,请及时联系销售([inqury@vesoft.com](mailto:inqury@vesoft.com))购买并更换新的证书。 | -| 过期后 7 天内 | 可以登录并继续使用 | 您的 License 证书已过期 <0|1|2|3|4|5|6|7> 天,过期7天后无法使用,请及时联系销售([inqury@vesoft.com](mailto:inqury@vesoft.com))购买并更换新的证书。 | +| 过期前 3 天内 | 可以登录并继续使用 | 您的 License 证书有效时间还剩 <3\|2\|1\|0> 天,过期7天后无法使用,请及时联系销售([inqury@vesoft.com](mailto:inqury@vesoft.com))购买并更换新的证书。 | +| 过期后 7 天内 | 可以登录并继续使用 | 您的 License 证书已过期 <0\|1\|2\|3\|4\|5\|6\|7> 天,过期7天后无法使用,请及时联系销售([inqury@vesoft.com](mailto:inqury@vesoft.com))购买并更换新的证书。 | | 过期后 7 天以上 | 不可登录且无法使用 | 您的 License 已过期 7 天以上,产品无法正常使用,请及时联系销售([inqury@vesoft.com](mailto:inqury@vesoft.com))购买并更换新的证书。 | \ No newline at end of file From 7cbb1ae473ac10ea7f91a50b46150eb541803d1c Mon Sep 17 00:00:00 2001 From: cooper-lzy <78672629+cooper-lzy@users.noreply.github.com> Date: Wed, 29 Dec 2021 17:53:30 +0800 Subject: [PATCH 06/33] add show local session command (#1345) --- .../6.show/17.show-sessions.md | 12 +++++++----- .../6.show/18.show-queries.md | 12 ++++++------ 2 files changed, 13 insertions(+), 11 deletions(-) diff --git a/docs-2.0/3.ngql-guide/7.general-query-statements/6.show/17.show-sessions.md b/docs-2.0/3.ngql-guide/7.general-query-statements/6.show/17.show-sessions.md index be49d01360f..1e98f7862a1 100644 --- a/docs-2.0/3.ngql-guide/7.general-query-statements/6.show/17.show-sessions.md +++ b/docs-2.0/3.ngql-guide/7.general-query-statements/6.show/17.show-sessions.md @@ -1,19 +1,21 @@ # SHOW SESSIONS -`SHOW SESSIONS`语句显示所有会话信息,也可以指定会话 ID 进行查看。 +登录 Nebula Graph 数据库时,会创建对应会话,用户可以查询会话信息。 ## 注意事项 -使用 Nebula Console 登录数据库时,会创建一个会话,操作结束执行`exit`退出登录时,客户端会调用 API `release`,释放会话并清除会话信息。 +- 执行`exit`退出登录时,客户端会调用 API `release`,释放会话并清除会话信息。如果没有正常退出,且没有在配置文件 [nebula-graphd.conf](../../../5.configurations-and-logs/1.configurations/3.graph-config.md) 设置空闲会话超时时间(`session_idle_timeout_secs`),会话不会自动释放。对于未自动释放的会话,需要手动删除指定会话 (TODO: coding)。 -如果没有正常退出,且没有在配置文件 [nebula-graphd.conf](../../../5.configurations-and-logs/1.configurations/3.graph-config.md) 设置空闲会话超时时间(`session_idle_timeout_secs`),会话不会自动释放。 +- `SHOW SESSIONS`查询所有 Graph 服务上的会话信息。 -对于未自动释放的会话,需要手动删除指定会话 (TODO: coding)。 +- `SHOW LOCAL SESSIONS`从当前连接的 Graph 服务获取会话信息,不会查询其他 Graph 服务上的会话信息。 + +- `SHOW SESSION `查询指定 Session ID 的会话信息。 ## 语法 ```ngql -SHOW SESSIONS; +SHOW [LOCAL] SESSIONS; SHOW SESSION ; ``` diff --git a/docs-2.0/3.ngql-guide/7.general-query-statements/6.show/18.show-queries.md b/docs-2.0/3.ngql-guide/7.general-query-statements/6.show/18.show-queries.md index 3b6374e44f9..48707c24f7f 100644 --- a/docs-2.0/3.ngql-guide/7.general-query-statements/6.show/18.show-queries.md +++ b/docs-2.0/3.ngql-guide/7.general-query-statements/6.show/18.show-queries.md @@ -8,27 +8,27 @@ ## 注意事项 -- `SHOW QUERIES`从本地缓存获取当前 Session 中查询的状态,几乎没有延迟。 +- `SHOW LOCAL QUERIES`从本地缓存获取当前 Session 中查询的状态,几乎没有延迟。 -- `SHOW ALL QUERIES`从 Meta 服务获取所有 Session 中的查询信息。这些信息会根据参数`session_reclaim_interval_secs`定义的周期同步到 Meta 服务,因此在客户端获取到的信息可能属于上个同步周期。 +- `SHOW QUERIES`从 Meta 服务获取所有 Session 中的查询信息。这些信息会根据参数`session_reclaim_interval_secs`定义的周期同步到 Meta 服务,因此在客户端获取到的信息可能属于上个同步周期。 ## 语法 ```ngql -SHOW [ALL] QUERIES; +SHOW [LOCAL] QUERIES; ``` ## 示例 ```ngql -nebula> SHOW QUERIES; +nebula> SHOW LOCAL QUERIES; +------------------+-----------------+--------+----------------------+----------------------------+----------------+-----------+-----------------+ | SessionID | ExecutionPlanID | User | Host | StartTime | DurationInUSec | Status | Query | +------------------+-----------------+--------+----------------------+----------------------------+----------------+-----------+-----------------+ | 1625463842921750 | 46 | "root" | ""192.168.x.x":9669" | 2021-07-05T05:44:19.502903 | 0 | "RUNNING" | "SHOW QUERIES;" | +------------------+-----------------+--------+----------------------+----------------------------+----------------+-----------+-----------------+ -nebula> SHOW ALL QUERIES; +nebula> SHOW QUERIES; +------------------+-----------------+---------+----------------------+----------------------------+----------------+-----------+---------------------------------------------------------+ | SessionID | ExecutionPlanID | User | Host | StartTime | DurationInUSec | Status | Query | +------------------+-----------------+---------+----------------------+----------------------------+----------------+-----------+---------------------------------------------------------+ @@ -36,7 +36,7 @@ nebula> SHOW ALL QUERIES; +------------------+-----------------+---------+----------------------+----------------------------+----------------+-----------+---------------------------------------------------------+ # 返回耗时 TOP 10 的查询。 -nebula> SHOW ALL QUERIES | ORDER BY $-.DurationInUSec DESC | LIMIT 10; +nebula> SHOW QUERIES | ORDER BY $-.DurationInUSec DESC | LIMIT 10; +------------------+-----------------+---------+----------------------+----------------------------+----------------+-----------+-------------------------------------------------------+ | SessionID | ExecutionPlanID | User | Host | StartTime | DurationInUSec | Status | Query | +------------------+-----------------+---------+----------------------+----------------------------+----------------+-----------+-------------------------------------------------------+ From df6de2898795a139f4c3f8ad9d130c3c2a0de5d1 Mon Sep 17 00:00:00 2001 From: cooper-lzy <78672629+cooper-lzy@users.noreply.github.com> Date: Wed, 29 Dec 2021 17:53:50 +0800 Subject: [PATCH 07/33] Detecting schema change (#1339) --- docs-2.0/2.quick-start/4.nebula-graph-crud.md | 8 +------- .../3.ngql-guide/10.tag-statements/1.create-tag.md | 8 +------- docs-2.0/3.ngql-guide/10.tag-statements/3.alter-tag.md | 8 +------- .../11.edge-type-statements/3.alter-edge.md | 8 +------- .../1.create-native-index.md | 6 +----- .../3.ngql-guide/9.space-statements/1.create-space.md | 10 +--------- 6 files changed, 6 insertions(+), 42 deletions(-) diff --git a/docs-2.0/2.quick-start/4.nebula-graph-crud.md b/docs-2.0/2.quick-start/4.nebula-graph-crud.md index b76d3573e4f..ee44a2fac52 100644 --- a/docs-2.0/2.quick-start/4.nebula-graph-crud.md +++ b/docs-2.0/2.quick-start/4.nebula-graph-crud.md @@ -49,7 +49,7 @@ nebula> SHOW HOSTS; !!! caution - Nebula Graph 中执行如下创建和修改操作,是异步实现的。要在**下一个**心跳周期之后才能生效;否则访问会报错。 + Nebula Graph 中执行如下创建和修改操作,是异步实现的。要在**下一个**心跳周期之后才能生效,否则访问会报错。为确保数据同步,后续操作能顺利进行,请等待 2 个心跳周期(20 秒)。 - `CREATE SPACE` - `CREATE TAG` @@ -63,12 +63,6 @@ nebula> SHOW HOSTS; 默认心跳周期是 10 秒。修改心跳周期参数`heartbeat_interval_secs`,请参见[配置简介](../5.configurations-and-logs/1.configurations/1.configurations.md)。 -为确保数据同步,后续操作能顺利进行,可采取以下方法之一: - -- 执行`SHOW`或`DESCRIBE`命令检查相应对象的状态,确保创建或修改已完成。如果没有完成,请等待几秒重试。 - -- 等待 2 个心跳周期(20 秒)。 - ## 创建和选择图空间 ### nGQL 语法 diff --git a/docs-2.0/3.ngql-guide/10.tag-statements/1.create-tag.md b/docs-2.0/3.ngql-guide/10.tag-statements/1.create-tag.md index 36275c6fdd3..4c923005ef1 100644 --- a/docs-2.0/3.ngql-guide/10.tag-statements/1.create-tag.md +++ b/docs-2.0/3.ngql-guide/10.tag-statements/1.create-tag.md @@ -59,12 +59,6 @@ nebula> CREATE TAG IF NOT EXISTS woman(name string, age int, \ ## 创建 Tag 说明 -尝试使用新创建的 Tag 可能会失败,因为创建是异步实现的。 - -Nebula Graph 将在下一个心跳周期内完成 Tag 的创建,为了确保创建成功,可以使用如下方法之一: - -- 在 [`SHOW TAGS`](4.show-tags.md) 语句的结果中查找新的 Tag,如果找不到,请等待几秒重试。 - -- 等待两个心跳周期,例如 20 秒。 +尝试使用新创建的 Tag 可能会失败,因为创建是异步实现的。为确保数据同步,后续操作能顺利进行,请等待 2 个心跳周期(20 秒)。 如果需要修改心跳间隔,请为[所有配置文件](../../5.configurations-and-logs/1.configurations/1.configurations.md)修改参数`heartbeat_interval_secs`。 diff --git a/docs-2.0/3.ngql-guide/10.tag-statements/3.alter-tag.md b/docs-2.0/3.ngql-guide/10.tag-statements/3.alter-tag.md index 7cb673ba2c6..ee55d93f313 100644 --- a/docs-2.0/3.ngql-guide/10.tag-statements/3.alter-tag.md +++ b/docs-2.0/3.ngql-guide/10.tag-statements/3.alter-tag.md @@ -40,12 +40,6 @@ nebula> ALTER TAG t1 COMMENT = 'test1'; ## 修改 Tag 说明 -尝试使用刚修改的 Tag 可能会失败,因为修改是异步实现的。 - -Nebula Graph 将在下一个心跳周期内完成 Tag 的修改,为了确保修改成功,可以使用如下方法之一: - -- 在 [`DESCRIBE TAG`](5.describe-tag.md) 语句的结果中查看 Tag 信息,确认修改成功。如果没有修改成功,请等待几秒重试。 - -- 等待两个心跳周期,例如 20 秒。 +尝试使用刚修改的 Tag 可能会失败,因为修改是异步实现的。为确保数据同步,后续操作能顺利进行,请等待 2 个心跳周期(20 秒)。 如果需要修改心跳间隔,请为[所有配置文件](../../5.configurations-and-logs/1.configurations/1.configurations.md)修改参数`heartbeat_interval_secs`。 diff --git a/docs-2.0/3.ngql-guide/11.edge-type-statements/3.alter-edge.md b/docs-2.0/3.ngql-guide/11.edge-type-statements/3.alter-edge.md index e7575eee34a..a52ee12d09a 100644 --- a/docs-2.0/3.ngql-guide/11.edge-type-statements/3.alter-edge.md +++ b/docs-2.0/3.ngql-guide/11.edge-type-statements/3.alter-edge.md @@ -40,12 +40,6 @@ nebula> ALTER EDGE e1 COMMENT = 'edge1'; ## 修改 Edge type 说明 -尝试使用刚修改的 Edge type 可能会失败,因为修改是异步实现的。 - -Nebula Graph 将在下一个心跳周期内完成 Edge type 的修改,为了确保修改成功,可以使用如下方法之一: - -- 在 [`DESCRIBE EDGE`](5.describe-edge.md) 语句的结果中查看 Edge type 信息,确认修改成功。如果没有修改成功,请等待几秒重试。 - -- 等待两个心跳周期,例如 20 秒。 +尝试使用刚修改的 Edge type 可能会失败,因为修改是异步实现的。为确保数据同步,后续操作能顺利进行,请等待 2 个心跳周期(20 秒)。 如果需要修改心跳间隔,请为[所有配置文件](../../5.configurations-and-logs/1.configurations/1.configurations.md)修改参数`heartbeat_interval_secs`。 \ No newline at end of file diff --git a/docs-2.0/3.ngql-guide/14.native-index-statements/1.create-native-index.md b/docs-2.0/3.ngql-guide/14.native-index-statements/1.create-native-index.md index 49bd6bb65ba..7b0949d9014 100644 --- a/docs-2.0/3.ngql-guide/14.native-index-statements/1.create-native-index.md +++ b/docs-2.0/3.ngql-guide/14.native-index-statements/1.create-native-index.md @@ -54,11 +54,7 @@ 日常增量写入时保持 `--disable_auto_compaction = false`。 - 新创建的索引并不会立刻生效。创建新的索引并尝试立刻使用(例如`LOOKUP`或者`REBUILD INDEX`) 通常会失败(报错`can't find xxx in the space`)。因为创建步骤是异步实现的,Nebula Graph 要在下一个心跳周期才能完成索引的创建。可以使用如下方法之一: - - - 在 [`SHOW TAG/EDGE INDEXES`](2.show-native-indexes.md) 语句的结果中查找到新的索引。或者, - - - 等待两个心跳周期,例如 20 秒。如果需要修改心跳间隔,请为[所有配置文件](../../5.configurations-and-logs/1.configurations/1.configurations.md)修改参数`heartbeat_interval_secs`。 + 新创建的索引并不会立刻生效。创建新的索引并尝试立刻使用(例如`LOOKUP`或者`REBUILD INDEX`) 通常会失败(报错`can't find xxx in the space`)。因为创建步骤是异步实现的,Nebula Graph 要在下一个心跳周期才能完成索引的创建。为确保数据同步,后续操作能顺利进行,请等待 2 个心跳周期(20 秒)。如果需要修改心跳间隔,请为[所有配置文件](../../5.configurations-and-logs/1.configurations/1.configurations.md)修改参数`heartbeat_interval_secs`。 !!! danger diff --git a/docs-2.0/3.ngql-guide/9.space-statements/1.create-space.md b/docs-2.0/3.ngql-guide/9.space-statements/1.create-space.md index 84303e5f14c..1b0a77536a4 100644 --- a/docs-2.0/3.ngql-guide/9.space-statements/1.create-space.md +++ b/docs-2.0/3.ngql-guide/9.space-statements/1.create-space.md @@ -87,15 +87,7 @@ nebula> SHOW CREATE SPACE my_space_4; !!! caution - 立刻尝试使用刚创建的图空间可能会失败,因为创建是异步实现的。 - -Nebula Graph 将在下一个心跳周期内完成图空间的创建,为了确保创建成功,可以使用如下方法之一: - -- 在 [`SHOW SPACES`](3.show-spaces.md) 或 [`DESCRIBE SPACE`](4.describe-space.md) 语句的结果中查找新的图空间,如果找不到,请等待几秒重试。 - -- 等待两个心跳周期,例如 20 秒。 - -如果需要修改心跳间隔,请为[所有配置文件](../../5.configurations-and-logs/1.configurations/1.configurations.md)修改参数`heartbeat_interval_secs`。但过短的心跳周期(<5 秒)可能会导致分布式系统中的机器误判对端失联。 + 立刻尝试使用刚创建的图空间可能会失败,因为创建是异步实现的。为确保数据同步,后续操作能顺利进行,请等待 2 个心跳周期(20 秒)。如果需要修改心跳间隔,请为[所有配置文件](../../5.configurations-and-logs/1.configurations/1.configurations.md)修改参数`heartbeat_interval_secs`。但过短的心跳周期(<5 秒)可能会导致分布式系统中的机器误判对端失联。 ## 检查分片分布情况 From 4d682b0c0ec1f3385209666cb45ab73ac7a1b102 Mon Sep 17 00:00:00 2001 From: "abby.huang" <78209557+abby-cyber@users.noreply.github.com> Date: Thu, 30 Dec 2021 18:59:43 +0800 Subject: [PATCH 08/33] clear disk space after compaction (#1347) * Update 5.drop-space.md * clear disk space after compaction * Update 5.drop-space.md * Update docs-2.0/3.ngql-guide/9.space-statements/5.drop-space.md --- docs-2.0/3.ngql-guide/9.space-statements/5.drop-space.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs-2.0/3.ngql-guide/9.space-statements/5.drop-space.md b/docs-2.0/3.ngql-guide/9.space-statements/5.drop-space.md index 89fee8f9b70..f8e16bc83ee 100644 --- a/docs-2.0/3.ngql-guide/9.space-statements/5.drop-space.md +++ b/docs-2.0/3.ngql-guide/9.space-statements/5.drop-space.md @@ -14,7 +14,7 @@ DROP SPACE [IF EXISTS] ; `IF EXISTS`关键字可以检测待删除的图空间是否存在,只有存在时,才会删除图空间。 -`DROP SPACE`语句不会立刻删除硬盘上对应图空间的目录和文件,请使用`USE`语句指定其他任意图空间,然后执行`SUBMIT JOB COMPACT`。 +`DROP SPACE`语句不会删除硬盘上对应图空间的目录和文件。如需删除无效空间的目录和文件,在 Storage 服务的配置文件中设置`auto_remove_invalid_space=true`。关于 Storage 服务的配置文件的路径,参见 [Storage 服务配置](../../5.configurations-and-logs/1.configurations/4.storage-config.md)。 !!! caution From f9e515e0bdf80badee587329d6d50de44decab0f Mon Sep 17 00:00:00 2001 From: cooper-lzy <78672629+cooper-lzy@users.noreply.github.com> Date: Fri, 31 Dec 2021 10:06:53 +0800 Subject: [PATCH 09/33] enhance param command (#1344) * enhance param command * update --- docs-2.0/nebula-console.md | 66 ++++++++++++++++++++++---------------- 1 file changed, 39 insertions(+), 27 deletions(-) diff --git a/docs-2.0/nebula-console.md b/docs-2.0/nebula-console.md index d5d3018e695..484d740bb2f 100644 --- a/docs-2.0/nebula-console.md +++ b/docs-2.0/nebula-console.md @@ -20,38 +20,50 @@ Nebula Console 是 Nebula Graph 的原生命令行客户端,用于连接 Nebul - 会话释放后,参数不会保留。 -保存参数命令如下: +- 保存参数命令如下: -```ngql -nebula> :param => ; -``` + ```ngql + nebula> :param => ; + ``` -示例: + 示例: -```ngql -nebula> :param p1 => "Tim Duncan"; -nebula> MATCH (v:player{name:$p1})-[:follow]->(n) RETURN v,n; -+----------------------------------------------------+-------------------------------------------------------+ -| v | n | -+----------------------------------------------------+-------------------------------------------------------+ -| ("player100" :player{age: 42, name: "Tim Duncan"}) | ("player125" :player{age: 41, name: "Manu Ginobili"}) | -| ("player100" :player{age: 42, name: "Tim Duncan"}) | ("player101" :player{age: 36, name: "Tony Parker"}) | -+----------------------------------------------------+-------------------------------------------------------+ - -nebula> :param p2 => {"a":3,"b":false,"c":"Tim Duncan"}; -nebula> RETURN $p2.b AS b; -+-------+ -| b | -+-------+ -| false | -+-------+ -``` + ```ngql + nebula> :param p1 => "Tim Duncan"; + nebula> MATCH (v:player{name:$p1})-[:follow]->(n) RETURN v,n; + +----------------------------------------------------+-------------------------------------------------------+ + | v | n | + +----------------------------------------------------+-------------------------------------------------------+ + | ("player100" :player{age: 42, name: "Tim Duncan"}) | ("player125" :player{age: 41, name: "Manu Ginobili"}) | + | ("player100" :player{age: 42, name: "Tim Duncan"}) | ("player101" :player{age: 36, name: "Tony Parker"}) | + +----------------------------------------------------+-------------------------------------------------------+ + + nebula> :param p2 => {"a":3,"b":false,"c":"Tim Duncan"}; + nebula> RETURN $p2.b AS b; + +-------+ + | b | + +-------+ + | false | + +-------+ + ``` -查看当前保存的参数命令如下: +- 查看当前保存的所有参数,命令如下: -```ngql -nebula> :params; -``` + ```ngql + nebula> :params; + ``` + +- 查看指定参数,命令如下: + + ```ngql + nebula> :params ; + ``` + +- 删除指定参数,命令如下: + + ```ngql + nebula> :param =>; + ``` ## 导出执行结果 From 8361024852c3f2a67c468e964aac3826166ca553 Mon Sep 17 00:00:00 2001 From: "abby.huang" <78209557+abby-cyber@users.noreply.github.com> Date: Fri, 31 Dec 2021 15:15:47 +0800 Subject: [PATCH 10/33] add utilization rate note & version compatibility (#1333) * add utilization note * update * Update docs-2.0/nebula-dashboard/6.monitor-parameter.md * Update docs-2.0/nebula-dashboard/1.what-is-dashboard.md * Update docs-2.0/nebula-dashboard-ent/7.monitor-parameter.md * Update docs-2.0/nebula-dashboard/6.monitor-parameter.md * Update 6.monitor-parameter.md * Update 7.monitor-parameter.md * Update 7.monitor-parameter.md * Update 6.monitor-parameter.md --- .../nebula-dashboard-ent/1.what-is-dashboard-ent.md | 10 ++++++++++ .../2.deploy-connect-dashboard-ent.md | 6 +----- docs-2.0/nebula-dashboard-ent/7.monitor-parameter.md | 9 +++++---- docs-2.0/nebula-dashboard/1.what-is-dashboard.md | 8 ++++++++ docs-2.0/nebula-dashboard/2.deploy-dashboard.md | 8 -------- docs-2.0/nebula-dashboard/6.monitor-parameter.md | 9 ++++++--- 6 files changed, 30 insertions(+), 20 deletions(-) diff --git a/docs-2.0/nebula-dashboard-ent/1.what-is-dashboard-ent.md b/docs-2.0/nebula-dashboard-ent/1.what-is-dashboard-ent.md index 53b8adef087..b47db1947ca 100644 --- a/docs-2.0/nebula-dashboard-ent/1.what-is-dashboard-ent.md +++ b/docs-2.0/nebula-dashboard-ent/1.what-is-dashboard-ent.md @@ -31,3 +31,13 @@ Nebula Dashboard(简称 Dashboard)是一款用于监控和管理 Nebula Grap !!! note 监控服务由 prometheus 提供,更新频率和保留时间等都可以自行修改。详情请参见 [prometheus 官方文档](https://prometheus.io/docs/prometheus/latest/configuration/configuration/)。 + +## 版本兼容性 + +Nebula Graph 的版本和 Dashboard 企业版的版本对应关系如下。 + +|Nebula Graph 版本|Dashboard 版本| +|:---|:---| +|2.0.1~2.6.1|1.0.2| +|2.0.1~2.6.1|1.0.1| +|2.0.1~2.6.1|1.0.0| diff --git a/docs-2.0/nebula-dashboard-ent/2.deploy-connect-dashboard-ent.md b/docs-2.0/nebula-dashboard-ent/2.deploy-connect-dashboard-ent.md index 9b9a6025634..004b2f1459e 100644 --- a/docs-2.0/nebula-dashboard-ent/2.deploy-connect-dashboard-ent.md +++ b/docs-2.0/nebula-dashboard-ent/2.deploy-connect-dashboard-ent.md @@ -6,11 +6,7 @@ 在部署 Dashboard 之前,用户需要确认以下信息: -- 选择并下载符合版本的 Dashboard,Dashboard 版本和 Nebula Graph 的版本对应关系如下。 - - | Dashboard 版本 | Nebula Graph 版本 | - | :-------------------------- | :--------------- | - | {{ dashboard_ent.release }} | 2.x | +- 选择并下载符合版本的 Dashboard。关于 Dashboard 版本和 Nebula Graph 的版本对应关系,参见[版本兼容性](1.what-is-dashboard-ent.md)。 - 准备版本为 5.7 以上的 [MySQL](https://www.mysql.com/cn/) 环境,创建名称为`dashboard`的数据库。 - 确保在安装开始前,以下端口处于未被使用状态。 diff --git a/docs-2.0/nebula-dashboard-ent/7.monitor-parameter.md b/docs-2.0/nebula-dashboard-ent/7.monitor-parameter.md index 937122969b7..89ba9accc39 100644 --- a/docs-2.0/nebula-dashboard-ent/7.monitor-parameter.md +++ b/docs-2.0/nebula-dashboard-ent/7.monitor-parameter.md @@ -2,12 +2,13 @@ 本文介绍 Dashboard 中展示的 Nebula Graph 监控指标。 -!!! note - - 磁盘容量和流量的默认单位为字节(Byte),页面显示时单位会随着数据量级而变化,例如流量低于 1 KB/s 时单位为 Bytes/s。 - ## 机器 +!!! note + + - 以下机器指标适用于 Linux 操作系统。 + - 磁盘容量和流量的默认单位为字节(Byte),页面显示时单位会随着数据量级而变化,例如流量低于 1 KB/s 时单位为 Bytes/s。 + - 对于所有版本的企业版 Dashboard,机器的 Buff 和 Cache 所占的内存没有被计算在内存使用率中。 ### CPU |参数|说明| diff --git a/docs-2.0/nebula-dashboard/1.what-is-dashboard.md b/docs-2.0/nebula-dashboard/1.what-is-dashboard.md index 0fefb5630bf..cf78d052d43 100644 --- a/docs-2.0/nebula-dashboard/1.what-is-dashboard.md +++ b/docs-2.0/nebula-dashboard/1.what-is-dashboard.md @@ -34,6 +34,14 @@ Nebula Dashboard(简称 Dashboard)是一款用于监控 Nebula Graph 集群 监控服务由 prometheus 提供,更新频率和保留时间等都可以自行修改。详情请参见 [prometheus 官方文档](https://prometheus.io/docs/prometheus/latest/configuration/configuration/)。 +## 版本兼容性 + +Nebula Graph 的版本和 Dashboard 社区版的版本对应关系如下。 + +|Nebula Graph 版本|Dashboard 版本| +|:---|:---| +|2.0.1~2.5.1|1.0.2| +|2.0.1~2.5.1|1.0.1| ## 更新说明 [Release](https://github.com/vesoft-inc/nebula-dashboard/releases/tag/{{dashboard.branch}}) diff --git a/docs-2.0/nebula-dashboard/2.deploy-dashboard.md b/docs-2.0/nebula-dashboard/2.deploy-dashboard.md index c80a7124197..47f940a3966 100644 --- a/docs-2.0/nebula-dashboard/2.deploy-dashboard.md +++ b/docs-2.0/nebula-dashboard/2.deploy-dashboard.md @@ -2,14 +2,6 @@ 安装部署 Dashboard 涉及 5 种服务,本文将详细介绍如何通过 tar 包安装部署。下载和编译 Nebula Dashboard 的最新源码,请参见 [GitHub nebula dashboard](https://github.com/vesoft-inc/nebula-dashboard#readme) 页面的说明。 -## Nebula Graph 版本 - -Dashboard 版本和 Nebula Graph 的版本对应关系如下。 - -|Dashboard 版本|Nebula Graph 版本| -|:---|:---| -|{{ dashboard.release }}|2.x| - ## 前提条件 在部署 Dashboard 之前,用户需要确认以下信息: diff --git a/docs-2.0/nebula-dashboard/6.monitor-parameter.md b/docs-2.0/nebula-dashboard/6.monitor-parameter.md index 34854bba09e..7f2e38c4ff4 100644 --- a/docs-2.0/nebula-dashboard/6.monitor-parameter.md +++ b/docs-2.0/nebula-dashboard/6.monitor-parameter.md @@ -2,11 +2,13 @@ 本文介绍 Dashboard 中展示的 Nebula Graph 监控指标。 -!!! note +## 机器 - 磁盘容量和流量的默认单位为字节(Byte),页面显示时单位会随着数据量级而变化,例如流量低于 1 KB/s 时单位为 Bytes/s。 +!!! note -## 机器 + - 以下机器指标适用于 Linux 操作系统。 + - 磁盘容量和流量的默认单位为字节(Byte),页面显示时单位会随着数据量级而变化,例如流量低于 1 KB/s 时单位为 Bytes/s。 + - 对于高于 v1.0.2 版本的社区版 Dashboard,机器的 Buff 和 Cache 所占的内存没有被计算在内存使用率中。 ### CPU @@ -27,6 +29,7 @@ |`memory_actual_used`| 实际使用内存(不包括缓存)| |`memory_free`| 空闲内存| + ### 负载 |参数|说明| From ef1e9a283f7269c9c6d80d99cb8336bee7765eca Mon Sep 17 00:00:00 2001 From: "max.zhu@vesoft.com" <86282370+izhuxiaoqing@users.noreply.github.com> Date: Fri, 31 Dec 2021 15:16:08 +0800 Subject: [PATCH 11/33] Update ex-ug-what-is-explorer.md (#1350) --- .../nebula-explorer/about-explorer/ex-ug-what-is-explorer.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs-2.0/nebula-explorer/about-explorer/ex-ug-what-is-explorer.md b/docs-2.0/nebula-explorer/about-explorer/ex-ug-what-is-explorer.md index 630c2252f4d..1007b2b1509 100644 --- a/docs-2.0/nebula-explorer/about-explorer/ex-ug-what-is-explorer.md +++ b/docs-2.0/nebula-explorer/about-explorer/ex-ug-what-is-explorer.md @@ -1,6 +1,6 @@ # 什么是 Nebula Explorer -Nebula Explorer (简称 Explorer)是一款可以通过 Web 访问的图探索可视化工具,搭配 Nebula Graph 内核使用,用于与图数据进行可视化交互。即使没有图数据操作经验,用户也可以快速成为图专家。 +Nebula Explorer (简称 Explorer)是一款可以通过 Web 访问的可视化图探索工具,搭配 Nebula Graph 内核使用,用于与图数据进行可视化交互。即使没有图数据操作经验,用户也可以快速成为图专家。 ![Explorer](../figs/explorer.png) From 2462273256927f73a94482b5dae3646d9bb2a8f6 Mon Sep 17 00:00:00 2001 From: "max.zhu@vesoft.com" <86282370+izhuxiaoqing@users.noreply.github.com> Date: Fri, 31 Dec 2021 15:16:21 +0800 Subject: [PATCH 12/33] Update st-ug-what-is-graph-studio.md (#1349) --- .../nebula-studio/about-studio/st-ug-what-is-graph-studio.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs-2.0/nebula-studio/about-studio/st-ug-what-is-graph-studio.md b/docs-2.0/nebula-studio/about-studio/st-ug-what-is-graph-studio.md index b956ef59419..517be590e82 100644 --- a/docs-2.0/nebula-studio/about-studio/st-ug-what-is-graph-studio.md +++ b/docs-2.0/nebula-studio/about-studio/st-ug-what-is-graph-studio.md @@ -1,6 +1,6 @@ # 什么是 Nebula Graph Studio -Nebula Graph Studio(简称 Studio)是一款可以通过 Web 访问的图数据库开源可视化工具,搭配 [Nebula Graph](../../README.md) 内核使用,提供构图、数据导入、编写 nGQL 查询、图探索等一站式服务。用户可以在 Nebula Graph GitHub 仓库中查看最新源码,详情参见 [nebula-studio](https://github.com/vesoft-inc/nebula-studio)。 +Nebula Graph Studio(简称 Studio)是一款可以通过 Web 访问的开源图数据库可视化工具,搭配 [Nebula Graph](../../README.md) 内核使用,提供构图、数据导入、编写 nGQL 查询、图探索等一站式服务。用户可以在 Nebula Graph GitHub 仓库中查看最新源码,详情参见 [nebula-studio](https://github.com/vesoft-inc/nebula-studio)。 ## 发行版本 From 01cdac7e746e3c402239e4639b564a14e76c3918 Mon Sep 17 00:00:00 2001 From: "max.zhu@vesoft.com" <86282370+izhuxiaoqing@users.noreply.github.com> Date: Fri, 31 Dec 2021 15:16:40 +0800 Subject: [PATCH 13/33] Update 1.what-is-nebula-graph.md (#1348) --- docs-2.0/1.introduction/1.what-is-nebula-graph.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs-2.0/1.introduction/1.what-is-nebula-graph.md b/docs-2.0/1.introduction/1.what-is-nebula-graph.md index df746f7afc0..e9fd4024f94 100644 --- a/docs-2.0/1.introduction/1.what-is-nebula-graph.md +++ b/docs-2.0/1.introduction/1.what-is-nebula-graph.md @@ -1,6 +1,6 @@ # 什么是 Nebula Graph -Nebula Graph 是一款开源的、分布式的、易扩展的原生图数据库,能够承载数千亿个点和数万亿条边的超大规模数据集,并且提供毫秒级查询。 +Nebula Graph 是一款开源的、分布式的、易扩展的原生图数据库,能够承载包含数千亿个点和数万亿条边的超大规模数据集,并且提供毫秒级查询。 ![Nebula Graph 鸟瞰图](nebula-birdview.png) From 368c19e02bd4afa5e3f9bc4f06bf9588b3125239 Mon Sep 17 00:00:00 2001 From: monchickey <75814968+monchickey@users.noreply.github.com> Date: Fri, 31 Dec 2021 16:01:02 +0800 Subject: [PATCH 14/33] Update 3.graph-config.md And 4.storage-config.md (#1351) * Update 3.graph-config.md Fix service name Meta to Graph. * Update 4.storage-config.md Fix the service name is Storage. * Update docs-2.0/5.configurations-and-logs/1.configurations/4.storage-config.md Co-authored-by: abby.huang <78209557+abby-cyber@users.noreply.github.com> --- .../1.configurations/3.graph-config.md | 4 ++-- .../1.configurations/4.storage-config.md | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/docs-2.0/5.configurations-and-logs/1.configurations/3.graph-config.md b/docs-2.0/5.configurations-and-logs/1.configurations/3.graph-config.md index 9cf67d1ad1a..608d18e1487 100644 --- a/docs-2.0/5.configurations-and-logs/1.configurations/3.graph-config.md +++ b/docs-2.0/5.configurations-and-logs/1.configurations/3.graph-config.md @@ -9,11 +9,11 @@ Graph 服务提供了两份初始配置文件`nebula-graphd.conf.default`和`neb ## 配置文件使用方式 -如需使用初始配置文件,从上述两个文件选择其一,删除后缀`.default`或`.production`,Meta 服务才能将其识别为配置文件并从中获取配置信息。 +如需使用初始配置文件,从上述两个文件选择其一,删除后缀`.default`或`.production`,Graph 服务才能将其识别为配置文件并从中获取配置信息。 ## 配置文件参数值说明 -配置文件内没有设置某个参数表示参数使用的是默认值。文件内只预设了部分参数的值,而且两份初始配置文件内的参数值也略有不同,本文的预设值以`nebula-metad.conf.default`为准。 +配置文件内没有设置某个参数表示参数使用的是默认值。文件内只预设了部分参数的值,而且两份初始配置文件内的参数值也略有不同,本文的预设值以`nebula-graphd.conf.default`为准。 如需查看所有的参数及其当前值,参见[配置管理](1.configurations.md)。 diff --git a/docs-2.0/5.configurations-and-logs/1.configurations/4.storage-config.md b/docs-2.0/5.configurations-and-logs/1.configurations/4.storage-config.md index c451f5fb730..9f33a87d814 100644 --- a/docs-2.0/5.configurations-and-logs/1.configurations/4.storage-config.md +++ b/docs-2.0/5.configurations-and-logs/1.configurations/4.storage-config.md @@ -4,16 +4,16 @@ Storage 服务提供了两份初始配置文件`nebula-storaged.conf.default`和 !!! caution - * 不建议修改`local_config`的值为`false`。修改后 Nebula Graph 服务启动后会先尝试从 Meta 服务获取缓存的配置信息,可能导致集群配置不一致,造成未知风险。 + * 不建议修改`local_config`的值为`false`。修改配置并重启 Storage 服务,会先尝试从 Meta 服务获取缓存的配置信息,可能导致集群配置不一致,造成未知风险。 * 不建议修改文档未介绍的配置项,除非已经熟悉源代码并完全了解配置项的作用。 ## 配置文件使用方式 -如需使用初始配置文件,从上述两个文件选择其一,删除后缀`.default`或`.production`,Meta 服务才能将其识别为配置文件并从中获取配置信息。 +如需使用初始配置文件,从上述两个文件选择其一,删除后缀`.default`或`.production`,Storage 服务才能将其识别为配置文件并从中获取配置信息。 ## 配置文件参数值说明 -配置文件内没有设置某个参数表示参数使用的是默认值。文件内只预设了部分参数的值,而且两份初始配置文件内的参数值也略有不同,本文的预设值以`nebula-metad.conf.default`文件为准,其中没有的参数则以`nebula-storaged.conf.production`文件为准。 +配置文件内没有设置某个参数表示参数使用的是默认值。文件内只预设了部分参数的值,而且两份初始配置文件内的参数值也略有不同,本文的预设值以`nebula-storaged.conf.default`文件为准,其中没有的参数则以`nebula-storaged.conf.production`文件为准。 !!! Note From fe0bf6b169956ff862709590649a3dbec54d81bb Mon Sep 17 00:00:00 2001 From: randomJoe211 <69501902+randomJoe211@users.noreply.github.com> Date: Wed, 5 Jan 2022 13:43:56 +0800 Subject: [PATCH 15/33] Add exchange spark compatibility (#1354) * Add exchange spark compatibility * add note for jar version --- .../about-exchange/ex-ug-limitations.md | 29 +++++++++++++++---- .../parameter-reference/ex-ug-parameter.md | 2 +- 2 files changed, 25 insertions(+), 6 deletions(-) diff --git a/docs-2.0/nebula-exchange/about-exchange/ex-ug-limitations.md b/docs-2.0/nebula-exchange/about-exchange/ex-ug-limitations.md index e74887ba822..92547dc7aea 100644 --- a/docs-2.0/nebula-exchange/about-exchange/ex-ug-limitations.md +++ b/docs-2.0/nebula-exchange/about-exchange/ex-ug-limitations.md @@ -31,11 +31,30 @@ Exchange 2.x 支持以下操作系统: 为保证 Exchange 正常工作,请确认机器上已经安装如下软件: -- Apache Spark:2.4.x - -- Java:1.8 - -- Scala:2.10.7、2.11.12 或 2.12.10 +- Java 1.8 版本 + +- Scala 2.10.7、2.11.12 或 2.12.10 版本 + +- Apache Spark。使用 Exchange 从不同数据源导出数据对 Spark 版本的要求如下: + + !!! note + 使用 Exchange 时,需根据 Spark 版本选择相应的 JAR 文件。例如,当 Spark 版本为 2.4 时,选择 nebula-exchange_spark_2.4-{{exchange.release}}.jar。 + + | 数据源 | Spark 2.2 | Spark 2.4 | Spark 3 | + | - | - | - | - | + | CSV 文件 | 支持 | 支持 | 支持 | + | JSON 文件 | 支持 | 支持 | 支持 | + | ORC 文件 | 支持 | 支持 | 支持 | + | Parquet 文件 | 支持 | 支持 | 支持 | + | HBase | 支持 | 支持 | 支持 | + | MySQL | 支持 | 支持 | 支持 | + | ClickHouse | 支持 | 支持 | 支持 | + | Neo4j | 不支持 | 支持 | 不支持 | + | Hive | 支持 | 支持 | 支持 | + | MaxCompute | 不支持 | 支持 | 不支持 | + | Pulsar | 不支持 | 支持 | 未测试 | + | Kafka | 不支持 | 支持 | 未测试 | + | Nebula Graph | 不支持 | 支持 | 不支持 | 在以下使用场景,还需要部署 Hadoop Distributed File System (HDFS): diff --git a/docs-2.0/nebula-exchange/parameter-reference/ex-ug-parameter.md b/docs-2.0/nebula-exchange/parameter-reference/ex-ug-parameter.md index 024d6490789..e2806264772 100644 --- a/docs-2.0/nebula-exchange/parameter-reference/ex-ug-parameter.md +++ b/docs-2.0/nebula-exchange/parameter-reference/ex-ug-parameter.md @@ -179,7 +179,7 @@ |`tags.topic`|string|-|是|消息类别。| |`tags.interval.seconds`|int|`10`|是|读取消息的间隔。单位:秒。| -### SST 源特有参数 +### 生成 SST 时的特有参数 |参数|数据类型|默认值|是否必须|说明| |:---|:---|:---|:---|:---| From 174207912c4d006995e195f569c853aca695ac14 Mon Sep 17 00:00:00 2001 From: Wey Gu <1651790+wey-gu@users.noreply.github.com> Date: Wed, 5 Jan 2022 15:31:29 +0800 Subject: [PATCH 16/33] Update 1.resource-preparations.md (#1353) to enable a smooth first time build attempt --- .../4.deployment-and-installation/1.resource-preparations.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs-2.0/4.deployment-and-installation/1.resource-preparations.md b/docs-2.0/4.deployment-and-installation/1.resource-preparations.md index 51e82119d2c..68d12f9c238 100644 --- a/docs-2.0/4.deployment-and-installation/1.resource-preparations.md +++ b/docs-2.0/4.deployment-and-installation/1.resource-preparations.md @@ -148,7 +148,7 @@ $ ./third-party/install-gcc.sh --prefix=/opt // 启用 GCC。 - $ source /opt/vesoft/toolset/gcc/7.5.0/enable + $ source /opt/vesoft/toolset/gcc/9.3.0/enable ``` 3. 执行脚本`install-third-party.sh`。 From c13167a7f52d75b9ba26414f3fa226521d1c2dae Mon Sep 17 00:00:00 2001 From: cooper-lzy <78672629+cooper-lzy@users.noreply.github.com> Date: Wed, 5 Jan 2022 15:37:52 +0800 Subject: [PATCH 17/33] Schema support mixed Chinese and English (#1357) --- .../1.nGQL-overview/keywords-and-reserved-words.md | 9 ++++----- docs-2.0/3.ngql-guide/10.tag-statements/1.create-tag.md | 2 +- .../11.edge-type-statements/1.create-edge.md | 2 +- .../14.native-index-statements/1.create-native-index.md | 2 +- .../3.ngql-guide/9.space-statements/1.create-space.md | 2 +- 5 files changed, 8 insertions(+), 9 deletions(-) diff --git a/docs-2.0/3.ngql-guide/1.nGQL-overview/keywords-and-reserved-words.md b/docs-2.0/3.ngql-guide/1.nGQL-overview/keywords-and-reserved-words.md index 51f91912c26..d13eca71178 100644 --- a/docs-2.0/3.ngql-guide/1.nGQL-overview/keywords-and-reserved-words.md +++ b/docs-2.0/3.ngql-guide/1.nGQL-overview/keywords-and-reserved-words.md @@ -2,7 +2,7 @@ 关键字在 nGQL 中有重要意义,分为保留关键字和非保留关键字。 -非保留关键字作为标识符时可以不使用引号。保留关键字作为标识符时,需要用反引号(\`)包围,例如 \`AND\`。 +非保留关键字作为标识符时可以不使用引号。保留关键字或特殊字符作为标识符时,需要用反引号(\`)包围,例如 \`AND\`。 !!! Note @@ -20,11 +20,10 @@ Execution succeeded nebula> CREATE TAG 中文(简体 string); Execution succeeded -``` - -- `TAG`是保留关键字,要将`TAG`作为标识符,用户必须使用反引号(\`)括起来。 -- `SPACE`是非保留关键字,可以直接作为标识符使用。 +nebula> CREATE TAG `¥%特殊 字符&*+-*/` (`q~!()= wer` string); +Execution succeeded +``` ## 保留关键字 diff --git a/docs-2.0/3.ngql-guide/10.tag-statements/1.create-tag.md b/docs-2.0/3.ngql-guide/10.tag-statements/1.create-tag.md index 4c923005ef1..cd79ce64cd4 100644 --- a/docs-2.0/3.ngql-guide/10.tag-statements/1.create-tag.md +++ b/docs-2.0/3.ngql-guide/10.tag-statements/1.create-tag.md @@ -31,7 +31,7 @@ CREATE TAG [IF NOT EXISTS] |参数|说明| |:---|:---| |`IF NOT EXISTS`|检测待创建的 Tag 是否存在,只有不存在时,才会创建 Tag。仅检测 Tag 的名称,不会检测具体属性。| -|``|每个图空间内的 Tag 必须是唯一的。Tag 名称设置后无法修改。Tag 名称支持 1~4 字节的 UTF-8 编码字符,包括英文字母(区分大小写)、数字、中文等,但是不包括除下划线外的特殊字符。使用保留关键字时,需要用反引号(\`)包围,详情参见[关键字和保留字](../../3.ngql-guide/1.nGQL-overview/keywords-and-reserved-words.md)。| +|``|每个图空间内的 Tag 必须是唯一的。Tag 名称设置后无法修改。Tag 名称支持 1~4 字节的 UTF-8 编码字符,包括英文字母(区分大小写)、数字、中文等,但是不包括除下划线外的特殊字符。使用特殊字符或保留关键字时,需要用反引号(\`)包围,详情参见[关键字和保留字](../../3.ngql-guide/1.nGQL-overview/keywords-and-reserved-words.md)。| |``|属性名称。每个 Tag 中的属性名称必须唯一。属性的命名规则与 Tag 相同。| |``|属性的数据类型,目前支持[数值](../3.data-types/1.numeric.md)、[布尔](../3.data-types/2.boolean.md)、[字符串](../3.data-types/3.string.md)以及[日期与时间](../3.data-types/4.date-and-time.md)。| |`NULL \| NOT NULL`|指定属性值是否支持为`NULL`。默认值为`NULL`。| diff --git a/docs-2.0/3.ngql-guide/11.edge-type-statements/1.create-edge.md b/docs-2.0/3.ngql-guide/11.edge-type-statements/1.create-edge.md index 808cd9ba3c9..2800e143b50 100644 --- a/docs-2.0/3.ngql-guide/11.edge-type-statements/1.create-edge.md +++ b/docs-2.0/3.ngql-guide/11.edge-type-statements/1.create-edge.md @@ -31,7 +31,7 @@ CREATE EDGE [IF NOT EXISTS] |参数|说明| |:---|:---| |`IF NOT EXISTS`|检测待创建的 Edge type 是否存在,只有不存在时,才会创建 Edge type。仅检测 Edge type 的名称,不会检测具体属性。| -|``|每个图空间内的 Edge type 必须是唯一的。Edge type 名称设置后无法修改。Edge type 名称支持 1~4 字节的 UTF-8 编码字符,包括英文字母(区分大小写)、数字、中文等,但是不包括除下划线外的特殊字符。使用保留关键字时,需要用反引号(\`)包围,详情参见[关键字和保留字](../../3.ngql-guide/1.nGQL-overview/keywords-and-reserved-words.md)。| +|``|每个图空间内的 Edge type 必须是唯一的。Edge type 名称设置后无法修改。Edge type 名称支持 1~4 字节的 UTF-8 编码字符,包括英文字母(区分大小写)、数字、中文等,但是不包括除下划线外的特殊字符。使用特殊字符或保留关键字时,需要用反引号(\`)包围,详情参见[关键字和保留字](../../3.ngql-guide/1.nGQL-overview/keywords-and-reserved-words.md)。| |``|属性名称。每个 Edge type 中的属性名称必须唯一。属性的命名规则与 Edge type 相同。| |``|属性的数据类型,目前支持[数值](../3.data-types/1.numeric.md)、[布尔](../3.data-types/2.boolean.md)、[字符串](../3.data-types/3.string.md)以及[日期与时间](../3.data-types/4.date-and-time.md)。| |`NULL \| NOT NULL`|指定属性值是否支持为`NULL`。默认值为`NULL`。| diff --git a/docs-2.0/3.ngql-guide/14.native-index-statements/1.create-native-index.md b/docs-2.0/3.ngql-guide/14.native-index-statements/1.create-native-index.md index 7b0949d9014..3d51a2afca5 100644 --- a/docs-2.0/3.ngql-guide/14.native-index-statements/1.create-native-index.md +++ b/docs-2.0/3.ngql-guide/14.native-index-statements/1.create-native-index.md @@ -70,7 +70,7 @@ CREATE {TAG | EDGE} INDEX [IF NOT EXISTS] ON { | `|索引名。索引名在一个图空间中必须是唯一的。推荐的命名方式为`i_tagName_propName`。索引名称支持 1~4 字节的 UTF-8 编码字符,包括英文字母(区分大小写)、数字、中文等,但是不包括除下划线外的特殊字符。使用保留关键字时,需要用反引号(\`)包围,详情参见[关键字和保留字](../../3.ngql-guide/1.nGQL-overview/keywords-and-reserved-words.md)。| +|``|索引名。索引名在一个图空间中必须是唯一的。推荐的命名方式为`i_tagName_propName`。索引名称支持 1~4 字节的 UTF-8 编码字符,包括英文字母(区分大小写)、数字、中文等,但是不包括除下划线外的特殊字符。使用特殊字符或保留关键字时,需要用反引号(\`)包围,详情参见[关键字和保留字](../../3.ngql-guide/1.nGQL-overview/keywords-and-reserved-words.md)。| |` \| `|指定索引关联的 Tag 或 Edge 名称。| |``|为**变长**字符串属性创建索引时,必须用`prop_name(length)`指定索引长度;为 Tag 或 Edge type 本身创建索引时,忽略``。| |`COMMENT`|索引的描述。最大为 256 字节。默认无描述。| diff --git a/docs-2.0/3.ngql-guide/9.space-statements/1.create-space.md b/docs-2.0/3.ngql-guide/9.space-statements/1.create-space.md index 1b0a77536a4..c046c528d7e 100644 --- a/docs-2.0/3.ngql-guide/9.space-statements/1.create-space.md +++ b/docs-2.0/3.ngql-guide/9.space-statements/1.create-space.md @@ -23,7 +23,7 @@ CREATE SPACE [IF NOT EXISTS] ( |参数|说明| |:---|:---| |`IF NOT EXISTS`|检测待创建的图空间是否存在,只有不存在时,才会创建图空间。仅检测图空间的名称,不会检测具体属性。| -|``|在 Nebula Graph 实例中唯一标识一个图空间。图空间名称支持 1~4 字节的 UTF-8 编码字符,包括英文字母(区分大小写)、数字、中文等,但是不包括除下划线外的特殊字符。使用保留关键字时,需要用反引号(\`)包围,详情参见[关键字和保留字](../../3.ngql-guide/1.nGQL-overview/keywords-and-reserved-words.md)。| +|``|在 Nebula Graph 实例中唯一标识一个图空间。图空间名称支持 1~4 字节的 UTF-8 编码字符,包括英文字母(区分大小写)、数字、中文等,但是不包括除下划线外的特殊字符。使用特殊字符或保留关键字时,需要用反引号(\`)包围,详情参见[关键字和保留字](../../3.ngql-guide/1.nGQL-overview/keywords-and-reserved-words.md)。| |`partition_num`|指定图空间的分片数量。建议设置为 5 倍的集群硬盘数量。例如集群中有 3 个硬盘,建议设置 15 个分片。默认值为 100。| |`replica_factor`|指定每个分片的副本数量。建议在生产环境中设置为 3,在测试环境中设置为 1。由于需要基于多数表决,副本数量必须是**奇数**。默认值为 1。| |`vid_type`|必选参数。指定点 ID 的数据类型。可选值为`FIXED_STRING()`和`INT64`。`INT`等同于`INT64`。`FIXED_STRING()`表示数据类型为字符串,最大长度为`N`,超出长度会报错;`INT64`表示数据类型为整数。| From b09f69f5d7753c62b085036db5d477e3bdabb262 Mon Sep 17 00:00:00 2001 From: cooper-lzy <78672629+cooper-lzy@users.noreply.github.com> Date: Wed, 5 Jan 2022 17:42:40 +0800 Subject: [PATCH 18/33] Add constraints on invalid password attempts (#1356) * Add constraints on invalid password attempts * update * update --- .../7.data-security/1.authentication/1.authentication.md | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/docs-2.0/7.data-security/1.authentication/1.authentication.md b/docs-2.0/7.data-security/1.authentication/1.authentication.md index 0c0865b9984..1a7f9eccbba 100644 --- a/docs-2.0/7.data-security/1.authentication/1.authentication.md +++ b/docs-2.0/7.data-security/1.authentication/1.authentication.md @@ -16,7 +16,13 @@ Nebula Graph 支持两种身份验证方式:本地身份验证和 LDAP 验证 ### 启用本地身份验证 -1. 编辑配置文件`nebula-graphd.conf`(默认目录为`/usr/local/nebula/etc/`),设置`--enable_authorize=true`并保存退出。 +1. 编辑配置文件`nebula-graphd.conf`(默认目录为`/usr/local/nebula/etc/`),设置如下参数: + + - `--enable_authorize`:是否启用身份验证,可选值:`true`、`false`。 + + - `--failed_login_attempts`:可选项,需要手动添加该参数。单个 Graph 节点允许连续输入错误密码的次数。超过该次数时,账户会被锁定。如果有多个 Graph 节点,允许的次数为`节点数 * 次数`。 + + - `--password_lock_time_in_secs`:可选项,需要手动添加该参数。多次输入错误密码后,账户被锁定的时间。单位:秒。 2. 重启 Nebula Graph 服务。 From b476e7eac0ef7f3575ff7006c593a3a0976345e9 Mon Sep 17 00:00:00 2001 From: cooper-lzy <78672629+cooper-lzy@users.noreply.github.com> Date: Thu, 6 Jan 2022 09:59:40 +0800 Subject: [PATCH 19/33] round the float/double (#1358) * round the float/double * Update 1.numeric.md --- .../12.vertex-statements/1.insert-vertex.md | 2 +- docs-2.0/3.ngql-guide/3.data-types/1.numeric.md | 14 ++++++++------ 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/docs-2.0/3.ngql-guide/12.vertex-statements/1.insert-vertex.md b/docs-2.0/3.ngql-guide/12.vertex-statements/1.insert-vertex.md index 50d20f136b5..5ea1d4ad168 100644 --- a/docs-2.0/3.ngql-guide/12.vertex-statements/1.insert-vertex.md +++ b/docs-2.0/3.ngql-guide/12.vertex-statements/1.insert-vertex.md @@ -32,7 +32,7 @@ prop_value_list: - `VID`:点 ID。在 Nebula Graph 2.0 中支持字符串和整数,需要在创建图空间时设置,详情请参见 [CREATE SPACE](../9.space-statements/1.create-space.md)。 -- `prop_value_list`:根据`prop_name_list`填写属性值。如果属性值和 Tag 中的数据类型不匹配,会返回错误。如果没有填写属性值,而 Tag 中对应的属性设置为`NOT NULL`,也会返回错误。详情请参见 [CREATE TAG](../10.tag-statements/1.create-tag.md)。 +- `prop_value_list`:根据`prop_name_list`填写属性值。如果没有填写属性值,而 Tag 中对应的属性设置为`NOT NULL`,会返回错误。详情请参见 [CREATE TAG](../10.tag-statements/1.create-tag.md)。 !!! caution diff --git a/docs-2.0/3.ngql-guide/3.data-types/1.numeric.md b/docs-2.0/3.ngql-guide/3.data-types/1.numeric.md index cdd6a87cfca..791dce6cd1c 100644 --- a/docs-2.0/3.ngql-guide/3.data-types/1.numeric.md +++ b/docs-2.0/3.ngql-guide/3.data-types/1.numeric.md @@ -43,12 +43,14 @@ nGQL 支持科学计数法,例如`1e2`、`1.1e2`、`.3e4`、`1.e4`、`-1234E-1 例如,nGQL 不支持设置 INT8 类型的 [VID](../../1.introduction/3.vid.md),但支持将 [TAG](../10.tag-statements/1.create-tag.md) 或 [Edge type](../11.edge-type-statements/1.create-edge.md) 的某个属性类型设置为 INT8。当使用 nGQL 语句读取 INT8 类型的属性时,获取到的值的类型为 INT64。 -同时,Nebula Graph 支持写入多种进制的数值: +- Nebula Graph 支持写入多种进制的数值: -- 十进制,例如`123456`。 -- 十六进制,例如`0x1e240`。 -- 八进制,例如`0361100`。 + - 十进制,例如`123456`。 + - 十六进制,例如`0x1e240`。 + - 八进制,例如`0361100`。 -但 Nebula Graph 会将写入的非十进制数值解析为十进制的值保存。读取到的值为十进制。 + 但 Nebula Graph 会将写入的非十进制数值解析为十进制的值保存。读取到的值为十进制。 -例如,属性`score`的类型为`INT`,通过 INSERT 语句为其赋值`0xb`,使用 FETCH 等语句查询该属性值获取到的结果是`11`,即将十六进制的`0xb`转换为十进制后的值。 + 例如,属性`score`的类型为`INT`,通过 INSERT 语句为其赋值`0xb`,使用 FETCH 等语句查询该属性值获取到的结果是`11`,即将十六进制的`0xb`转换为十进制后的值。 + +- 将 FLOAT/DOUBLE 类型的数值插入 INT 类型的列,会将数值四舍五入取整。 From 34d91ce721f978cc78055cd894dc12365ef09141 Mon Sep 17 00:00:00 2001 From: cooper-lzy <78672629+cooper-lzy@users.noreply.github.com> Date: Thu, 6 Jan 2022 10:27:54 +0800 Subject: [PATCH 20/33] Implement the multi query parts of openCypher (#1355) * Implement the multi query parts of openCypher * update * Update 2.match.md --- .../6.cheatsheet-for-ngql-command.md | 2 +- .../1.nGQL-overview/1.overview.md | 2 +- .../1.nGQL-overview/3.graph-patterns.md | 4 - .../3.ngql-guide/5.operators/1.comparison.md | 4 +- .../7.general-query-statements/2.match.md | 122 +++++++++++++++--- .../optional-match.md | 39 ++++++ .../unwind.md} | 12 +- mkdocs.yml | 3 +- 8 files changed, 151 insertions(+), 37 deletions(-) create mode 100644 docs-2.0/3.ngql-guide/7.general-query-statements/optional-match.md rename docs-2.0/3.ngql-guide/{7.general-query-statements/7.unwind.md => 8.clauses-and-options/unwind.md} (71%) diff --git a/docs-2.0/2.quick-start/6.cheatsheet-for-ngql-command.md b/docs-2.0/2.quick-start/6.cheatsheet-for-ngql-command.md index 26dae8b0736..8aa5151460f 100644 --- a/docs-2.0/2.quick-start/6.cheatsheet-for-ngql-command.md +++ b/docs-2.0/2.quick-start/6.cheatsheet-for-ngql-command.md @@ -296,7 +296,7 @@ -* [UNWIND](../3.ngql-guide/7.general-query-statements/7.unwind.md) +* [UNWIND](../3.ngql-guide/8.clauses-and-options/unwind.md) ``` UNWIND AS diff --git a/docs-2.0/3.ngql-guide/1.nGQL-overview/1.overview.md b/docs-2.0/3.ngql-guide/1.nGQL-overview/1.overview.md index c702b464146..385b5600553 100644 --- a/docs-2.0/3.ngql-guide/1.nGQL-overview/1.overview.md +++ b/docs-2.0/3.ngql-guide/1.nGQL-overview/1.overview.md @@ -97,7 +97,7 @@ nebula> CREATE TAG IF NOT EXISTS player(name string, age int); |相等运算符| `=` | `==` | |数学求幂| `^` | 使用`pow(x, y)`替代`^`。 | |边 Rank| 无此概念 | 用`@rank`设置。 | -|语句|-|不支持 openCypher 9 的所有 DML 语句(如`CREATE`、`MERGE`等),不支持所有的 DCL, 和支持部分 `MATCH` 语法和函数(不支持`OPTIONAL MATCH`,不支持多`MATCH`,不支持 `WHERE` 中使用图 pattern)。 | +|语句|-|不支持 openCypher 9 的所有 DML 语句(如`CREATE`、`MERGE`等),不支持所有的 DCL, 和支持部分 `MATCH` 语法和函数(不支持 `WHERE` 中使用图 pattern)。 | |语句文本换行 | 换行符 | `\` + 换行符 | |Label 与 Tag 是不同的概念| Label 用于寻找点(点的索引)。 | Tag 用于定义点的一种类型及相应的属性,无索引功能。 | | 预编译与参数化查询 | 支持 | 仅支持参数化查询。 | diff --git a/docs-2.0/3.ngql-guide/1.nGQL-overview/3.graph-patterns.md b/docs-2.0/3.ngql-guide/1.nGQL-overview/3.graph-patterns.md index 2686ced70a1..e6298b81c02 100644 --- a/docs-2.0/3.ngql-guide/1.nGQL-overview/3.graph-patterns.md +++ b/docs-2.0/3.ngql-guide/1.nGQL-overview/3.graph-patterns.md @@ -54,10 +54,6 @@ (a:User:Admin)-[]->(b) ``` -!!! compatibility "openCypher 兼容性" - - nGQL 中的`MATCH`语句不支持用`(a:User:Admin)`匹配多个标签。如需匹配多标签可使用过滤条件,如`WHERE "User" IN tags(n) AND "Admin" IN tags(n)`。 - ## 属性模式 点和边是图的基本结构。nGQL 在这两种结构上都可以增加属性,方便实现更丰富的模型。 diff --git a/docs-2.0/3.ngql-guide/5.operators/1.comparison.md b/docs-2.0/3.ngql-guide/5.operators/1.comparison.md index 1fbde4143fd..6dba8771d10 100644 --- a/docs-2.0/3.ngql-guide/5.operators/1.comparison.md +++ b/docs-2.0/3.ngql-guide/5.operators/1.comparison.md @@ -32,9 +32,7 @@ Nebula Graph 支持的比较符如下。 ## OpenCypher 兼容性 -- `NULL`的比较操作和 openCypher 不同,行为也可能会改变。在 openCypher 中,`IS [NOT] NULL`通常与`OPTIONAL MATCH`一起使用,但是 nGQL 不支持`OPTIONAL MATCH`。 - -- openCypher 中没有`EMPTY`,因此不支持在 MATCH 语句中使用`EMPTY`。 +openCypher 中没有`EMPTY`,因此不支持在 MATCH 语句中使用`EMPTY`。 ## 示例 diff --git a/docs-2.0/3.ngql-guide/7.general-query-statements/2.match.md b/docs-2.0/3.ngql-guide/7.general-query-statements/2.match.md index d4890d8dacf..e5df90846af 100644 --- a/docs-2.0/3.ngql-guide/7.general-query-statements/2.match.md +++ b/docs-2.0/3.ngql-guide/7.general-query-statements/2.match.md @@ -2,7 +2,7 @@ `MATCH`语句提供基于模式(pattern)匹配的搜索功能。 -一个`MATCH`语句定义了一个[搜索模式](../1.nGQL-overview/3.graph-patterns.md),用该模式匹配存储在 Nebula Graph 中的数据,然后用`RETURN`子句检索数据。 +一个`MATCH`语句定义了一个搜索模式,用该模式匹配存储在 Nebula Graph 中的数据,然后用`RETURN`子句检索数据。 本文示例使用测试数据集 [basketballplayer](../1.nGQL-overview/1.overview.md#basketballplayer) 进行演示。 @@ -11,9 +11,21 @@ 与`GO`或`LOOKUP`等其他查询语句相比,`MATCH`的语法更灵活。`MATCH`语法可以概括如下: ```ngql -MATCH [] RETURN ; +MATCH [] RETURN []; ``` +- `pattern`:pattern 的详细说明请参见[模式](../1.nGQL-overview/3.graph-patterns.md)。`MATCH`语句支持匹配一个或多个模式,多个模式之间用英文逗号(,)分隔。例如`(a)-[]->(b),(c)-[]->(d)`。 + +- `clause_1`:支持`WHERE`、`WITH`、`UNWIND`、`OPTIONAL MATCH`子句,也可以使用`MATCH`作为子句。 + +- `output`:定义需要返回的输出。可以使用`AS`设置输出的别名。 + + !!! compatibility "历史版本兼容性" + + 从3.0版本开始,`pattern`支持同时匹配多个 Tag,所以返回属性时,需要额外指定 Tag 名称。即从`RETURN 变量名.属性名`改为`RETURN 变量名.Tag.属性名`。 + +- `clause_2`:支持`ORDER BY`、`LIMIT`子句。 + ## MATCH 工作流程 1. `MATCH`语句使用原生索引查找起始点或边,起始点或边可以在模式的任何位置。即一个有效的`MATCH`语句,**必须有一个属性、Tag 或 Edge type 已经创建索引,或者在`WHERE`子句中用 id() 函数指定了特定点的 VID**。如何创建索引,请参见[创建原生索引](../14.native-index-statements/1.create-native-index.md)。 @@ -108,6 +120,21 @@ nebula> MATCH (v:player) \ ... ``` +需要匹配拥有多个 Tag 的点,可以用英文冒号(:)。 + +```ngql +nebula> CREATE TAG actor (name string, age int); +nebula> INSERT VERTEX actor(name, age) VALUES "player100":("Tim Duncan", 42); +nebula> MATCH (v:player:actor) \ + RETURN v \ + LIMIT 10; ++----------------------------------------------------------------------------------------+ +| v | ++----------------------------------------------------------------------------------------+ +| ("player100" :actor{age: 42, name: "Tim Duncan"} :player{age: 42, name: "Tim Duncan"}) | ++----------------------------------------------------------------------------------------+ +``` + ### 匹配点的属性 !!! Note @@ -131,7 +158,7 @@ nebula> MATCH (v:player{name:"Tim Duncan"}) \ ```ngql nebula> MATCH (v:player) \ - WHERE v.name == "Tim Duncan" \ + WHERE v.player.name == "Tim Duncan" \ RETURN v; +----------------------------------------------------+ | v | @@ -169,6 +196,7 @@ nebula> MATCH (v:player { name: 'Tim Duncan' })--(v2) \ | v2 | +-----------------------------------------------------------+ | ("player101" :player{age: 36, name: "Tony Parker"}) | +| ("player101" :player{age: 36, name: "Tony Parker"}) | | ("player102" :player{age: 33, name: "LaMarcus Aldridge"}) | +-----------------------------------------------------------+ ``` @@ -182,15 +210,14 @@ nebula> MATCH (v:player { name: 'Tim Duncan' })--(v2) \ 在 nGQL 1.x 中,`--`符号用于行内注释,在 nGQL 2.x 中,`--`符号表示出边或入边,不再用于注释。 ```ngql -nebula> MATCH (v:player{name:"Tim Duncan"})--(v2) \ - RETURN v2.name AS Name; +nebula> MATCH (v:player{name:"Tim Duncan"})--(v2:player) \ + RETURN v2.player.name AS Name; +---------------------+ | Name | +---------------------+ -| "Spurs" | -| "Tony Parker" | -| "LaMarcus Aldridge" | -| "Marco Belinelli" | +| "Manu Ginobili" | +| "Manu Ginobili" | +| "Dejounte Murray" | ... ``` @@ -198,22 +225,41 @@ nebula> MATCH (v:player{name:"Tim Duncan"})--(v2) \ ```ngql # -->表示边从 v 开始,指向 v2。对于点 v 来说是出边,对于点 v2 来说是入边。 -nebula> MATCH (v:player{name:"Tim Duncan"})-->(v2) \ - RETURN v2.name AS Name; +nebula> MATCH (v:player{name:"Tim Duncan"})-->(v2:player) \ + RETURN v2.player.name AS Name; +-----------------+ | Name | +-----------------+ -| "Spurs" | | "Tony Parker" | | "Manu Ginobili" | +-----------------+ ``` +如果需要判断目标点,可以使用`CASE`表达式。 + +```ngql +nebula> MATCH (v:player{name:"Tim Duncan"})--(v2) \ + RETURN \ + CASE WHEN v2.team.name IS NOT NULL \ + THEN v2.team.name \ + WHEN v2.player.name IS NOT NULL \ + THEN v2.player.name END AS Name; + ++---------------------+ +| Name | ++---------------------+ +| "Manu Ginobili" | +| "Manu Ginobili" | +| "Spurs" | +| "Dejounte Murray" | +... +``` + 如果需要扩展模式,可以增加更多点和边。 ```ngql nebula> MATCH (v:player{name:"Tim Duncan"})-->(v2)<--(v3) \ - RETURN v3.name AS Name; + RETURN v3.player.name AS Name; +---------------------+ | Name | +---------------------+ @@ -227,7 +273,7 @@ nebula> MATCH (v:player{name:"Tim Duncan"})-->(v2)<--(v3) \ ```ngql nebula> MATCH (v:player{name:"Tim Duncan"})-->()<--(v3) \ - RETURN v3.name AS Name; + RETURN v3.player.name AS Name; +---------------------+ | Name | +---------------------+ @@ -441,6 +487,20 @@ nebula> MATCH p=(v:player{name:"Tim Duncan"})-[e:follow|serve*2]->(v2) \ +-----------------------------------------------------------+ ``` +### 匹配多个模式 + +用户可以用英文逗号(,)分隔多个模式。 + +``` +nebula> MATCH (v1:player{name:"Tim Duncan"}), (v2:team{name:"Spurs"}) \ + RETURN v1,v2; ++----------------------------------------------------+----------------------------------+ +| v1 | v2 | ++----------------------------------------------------+----------------------------------+ +| ("player100" :player{age: 42, name: "Tim Duncan"}) | ("team204" :team{name: "Spurs"}) | ++----------------------------------------------------+----------------------------------+ +``` + ## 常用检索操作 ### 检索点或边的信息 @@ -513,19 +573,19 @@ nebula> MATCH (v:player{name:"Tim Duncan"}) \ ```ngql nebula> MATCH (v:player{name:"Tim Duncan"}) \ - RETURN v.age; -+-------+ -| v.age | -+-------+ -| 42 | -+-------+ + RETURN v.player.age; ++--------------+ +| v.player.age | ++--------------+ +| 42 | ++--------------+ ``` 使用`AS`设置属性的别名。 ```ngql nebula> MATCH (v:player{name:"Tim Duncan"}) \ - RETURN v.age AS Age; + RETURN v.player.age AS Age; +-----+ | Age | +-----+ @@ -636,6 +696,26 @@ nebula> MATCH p=(v:player{name:"Tim Duncan"})-[*..2]->(v2) \ +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+--------+ ``` +### 多MATCH检索 + +不同的模式有不同的筛选条件时,可以使用多`MATCH`,会返回模式完全匹配的行。 + +```ngql +nebula> MATCH (m)-[]->(n) WHERE id(m)=="player100" \ + MATCH (n)-[]->(l) WHERE id(n)=="player125" \ + RETURN id(m),id(n),id(l); ++-------------+-------------+-------------+ +| id(m) | id(n) | id(l) | ++-------------+-------------+-------------+ +| "player100" | "player125" | "team204" | +| "player100" | "player125" | "player100" | ++-------------+-------------+-------------+ +``` + +### OPTIONAL MATCH检索 + +参见[OPTIONAL MATCH](optional-match.md)。 + !!! Performance Nebula Graph 中`MATCH`语句的性能和资源占用得到了优化,但对性能要求较高时,仍建议使用 `GO`, `LOOKUP`, `|` 和 `FETCH` 等来替代`MATCH`。 diff --git a/docs-2.0/3.ngql-guide/7.general-query-statements/optional-match.md b/docs-2.0/3.ngql-guide/7.general-query-statements/optional-match.md new file mode 100644 index 00000000000..0f7db7446fb --- /dev/null +++ b/docs-2.0/3.ngql-guide/7.general-query-statements/optional-match.md @@ -0,0 +1,39 @@ +# OPTIONAL MATCH + +`OPTIONAL MATCH`通常用于`MATCH`语句中,作为`MATCH`语句的可选项去匹配图数据库中的模式,如果图数据库中没有对应的模式,对应的列返回`NULL`。 + +## openCypher 兼容性 + +本文操作仅适用于 nGQL 中的 openCypher 方式。 + +## 示例 + +`MATCH`语句中使用`OPTIONAL MATCH`的示例如下: + +```ngql +nebula> MATCH (m)-[]->(n) WHERE id(m)=="player100" \ + OPTIONAL MATCH (n)-[]->(l) WHERE id(n)=="player125" \ + RETURN id(m),id(n),id(l); ++-------------+-------------+-------------+ +| id(m) | id(n) | id(l) | ++-------------+-------------+-------------+ +| "player100" | "team204" | __NULL__ | +| "player100" | "player101" | __NULL__ | +| "player100" | "player125" | "team204" | +| "player100" | "player125" | "player100" | ++-------------+-------------+-------------+ +``` + +而使用多`MATCH`,不使用`OPTIONAL MATCH`时,会返回模式完全匹配的行。示例如下: + +```ngql +nebula> MATCH (m)-[]->(n) WHERE id(m)=="player100" \ + MATCH (n)-[]->(l) WHERE id(n)=="player125" \ + RETURN id(m),id(n),id(l); ++-------------+-------------+-------------+ +| id(m) | id(n) | id(l) | ++-------------+-------------+-------------+ +| "player100" | "player125" | "team204" | +| "player100" | "player125" | "player100" | ++-------------+-------------+-------------+ +``` diff --git a/docs-2.0/3.ngql-guide/7.general-query-statements/7.unwind.md b/docs-2.0/3.ngql-guide/8.clauses-and-options/unwind.md similarity index 71% rename from docs-2.0/3.ngql-guide/7.general-query-statements/7.unwind.md rename to docs-2.0/3.ngql-guide/8.clauses-and-options/unwind.md index 2f2c2268e7c..954034442c0 100644 --- a/docs-2.0/3.ngql-guide/7.general-query-statements/7.unwind.md +++ b/docs-2.0/3.ngql-guide/8.clauses-and-options/unwind.md @@ -63,11 +63,11 @@ nebula> MATCH p=(v:player{name:"Tim Duncan"})--(v2) \ +----------------------------------------------------------------------------------------------------------------------+ | collect(r) | +----------------------------------------------------------------------------------------------------------------------+ -| [("player100" :player{age: 42, name: "Tim Duncan"}), ("player101" :player{age: 36, name: "Tony Parker"}), -("team204" :team{name: "Spurs"}), ("player102" :player{age: 33, name: "LaMarcus Aldridge"}), -("player125" :player{age: 41, name: "Manu Ginobili"}), ("player104" :player{age: 32, name: "Marco Belinelli"}), -("player144" :player{age: 47, name: "Shaquile O'Neal"}), ("player105" :player{age: 31, name: "Danny Green"}), -("player113" :player{age: 29, name: "Dejounte Murray"}), ("player107" :player{age: 32, name: "Aron Baynes"}), -("player109" :player{age: 34, name: "Tiago Splitter"}), ("player108" :player{age: 36, name: "Boris Diaw"})] | +| [("player100" :player{age: 42, name: "Tim Duncan"}), ("player101" :player{age: 36, name: "Tony Parker"}), | +|("team204" :team{name: "Spurs"}), ("player102" :player{age: 33, name: "LaMarcus Aldridge"}), | +|("player125" :player{age: 41, name: "Manu Ginobili"}), ("player104" :player{age: 32, name: "Marco Belinelli"}), | +|("player144" :player{age: 47, name: "Shaquile O'Neal"}), ("player105" :player{age: 31, name: "Danny Green"}), | +|("player113" :player{age: 29, name: "Dejounte Murray"}), ("player107" :player{age: 32, name: "Aron Baynes"}), | +|("player109" :player{age: 34, name: "Tiago Splitter"}), ("player108" :player{age: 36, name: "Boris Diaw"})] | +----------------------------------------------------------------------------------------------------------------------+ ``` diff --git a/mkdocs.yml b/mkdocs.yml index 3c1d8d8cada..ffc81c39d36 100755 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -194,10 +194,10 @@ nav: - 通用查询语句: - MATCH: 3.ngql-guide/7.general-query-statements/2.match.md + - OPTIONAL MATCH: 3.ngql-guide/7.general-query-statements/optional-match.md - LOOKUP: 3.ngql-guide/7.general-query-statements/5.lookup.md - GO: 3.ngql-guide/7.general-query-statements/3.go.md - FETCH: 3.ngql-guide/7.general-query-statements/4.fetch.md - - UNWIND: 3.ngql-guide/7.general-query-statements/7.unwind.md - SHOW: - SHOW CHARSET: 3.ngql-guide/7.general-query-statements/6.show/1.show-charset.md - SHOW COLLATION: 3.ngql-guide/7.general-query-statements/6.show/2.show-collation.md @@ -227,6 +227,7 @@ nav: - WHERE: 3.ngql-guide/8.clauses-and-options/where.md - YIELD: 3.ngql-guide/8.clauses-and-options/yield.md - WITH: 3.ngql-guide/8.clauses-and-options/with.md + - UNWIND: 3.ngql-guide/8.clauses-and-options/unwind.md - 图空间语句: - CREATE SPACE: 3.ngql-guide/9.space-statements/1.create-space.md From ee37a0ebfc43c58a24af5502ce9f0d8042518dd7 Mon Sep 17 00:00:00 2001 From: Steam Date: Thu, 6 Jan 2022 17:51:50 +0800 Subject: [PATCH 21/33] Update how-to-contribute.md (#1362) modify case and format --- docs-2.0/15.contribution/how-to-contribute.md | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/docs-2.0/15.contribution/how-to-contribute.md b/docs-2.0/15.contribution/how-to-contribute.md index f681a7e280f..d294da3b46e 100644 --- a/docs-2.0/15.contribution/how-to-contribute.md +++ b/docs-2.0/15.contribution/how-to-contribute.md @@ -2,9 +2,9 @@ ## 开始之前 -### github 或社区提交问题 +### GitHub 或社区提交问题 -欢迎为项目贡献任何代码或文档,但是建议先在 [github](https://github.com/vesoft-inc/nebula) 或[社区](https://discuss.nebula-graph.io/)上提交一个问题,和大家共同讨论。 +欢迎为项目贡献任何代码或文档,但是建议先在 [GitHub](https://github.com/vesoft-inc/nebula) 或[社区](https://discuss.nebula-graph.io/)上提交一个问题,和大家共同讨论。 ### 签署贡献者许可协议(CLA) @@ -12,7 +12,7 @@ 签署协议链接:[vesoft inc. Contributor License Agreement](https://cla-assistant.io/vesoft-inc/) -单击按钮** Sign in with GitHub to agree **签署协议。 +单击按钮 **Sign in with GitHub to agree** 签署协议。 如果有任何问题,请发送邮件至`info@vesoft.com`。 @@ -124,7 +124,7 @@ Nebula Graph 项目有很多[仓库](https://github.com/vesoft-inc),以 [nebul - 代码风格 - **Nebula Graph **采用`cpplint`来确保代码符合 Google 的代码风格指南。检查器将在提交代码之前执行。 + **Nebula Graph** 采用`cpplint`来确保代码符合 Google 的代码风格指南。检查器将在提交代码之前执行。 - 单元测试要求 @@ -193,13 +193,13 @@ pull request 创建后,至少需要两人审查。审查人员将进行彻底 ### Step 1:确认项目捐赠 -通过邮件、微信、Slack 等方式联络 Nebula Graph 官方人员,确认捐赠项目一事。项目将被捐赠至 Nebula Contrib 组织下。 +通过邮件、微信、Slack 等方式联络 Nebula Graph 官方人员,确认捐赠项目一事。项目将被捐赠至 [Nebula Contrib](https://github.com/nebula-contrib) 组织下。 -邮件地址:info@vesoft.com +* 邮件地址:info@vesoft.com -微信:NebulaGraphbot +* 微信:NebulaGraphbot -Slack:[Join Slack](https://join.slack.com/t/nebulagraph/shared_invite/zt-7ybejuqa-NCZBroh~PCh66d9kOQj45g) +* Slack:[Join Slack](https://join.slack.com/t/nebulagraph/shared_invite/zt-7ybejuqa-NCZBroh~PCh66d9kOQj45g) ### Step 2:获取项目接收人信息 @@ -207,6 +207,6 @@ Slack:[Join Slack](https://join.slack.com/t/nebulagraph/shared_invite/zt-7ybej ### Step 3:捐赠项目 -由您将项目转移至本次捐赠的项目接受人,并由项目接收者将该项目转移至 Nebula Contrib 组织下。捐赠后,您将以 Maintain 角色继续主导社区项目的发展。 +由您将项目转移至本次捐赠的项目接受人,并由项目接收者将该项目转移至 [Nebula Contrib](https://github.com/nebula-contrib) 组织下。捐赠后,您将以 Maintain 角色继续主导社区项目的发展。 GitHub 上转移仓库的操作,请参见 [Transferring a repository owned by your user account](https://docs.github.com/en/enterprise-server@3.0/github/administering-a-repository/managing-repository-settings/transferring-a-repository#transferring-a-repository-owned-by-your-user-account)。 From 0f5c990af2d5347396e4f156949b425f07eb7bc0 Mon Sep 17 00:00:00 2001 From: foesa <35463247+foesa-yang@users.noreply.github.com> Date: Fri, 7 Jan 2022 13:35:43 +0800 Subject: [PATCH 22/33] Insert vertex and tag (#1360) * insert vertex and tag * Update 4.delete-vertex.md * Update 0.FAQ.md * Update 0.FAQ.md * update * update * update * Update 1.insert-vertex.md * Update 1.insert-vertex.md * update-0107 --- docs-2.0/1.introduction/2.data-model.md | 6 +++- docs-2.0/2.quick-start/4.nebula-graph-crud.md | 7 ++--- .../6.cheatsheet-for-ngql-command.md | 2 +- docs-2.0/20.appendix/0.FAQ.md | 10 ++----- .../10.tag-statements/6.delete-tag.md | 6 ---- .../improve-query-by-tag-index.md | 4 --- .../12.vertex-statements/1.insert-vertex.md | 28 +++++++++++++------ .../12.vertex-statements/4.delete-vertex.md | 24 ++++++++++++---- 8 files changed, 50 insertions(+), 37 deletions(-) diff --git a/docs-2.0/1.introduction/2.data-model.md b/docs-2.0/1.introduction/2.data-model.md index 2ab75d26e6d..2318359cac7 100644 --- a/docs-2.0/1.introduction/2.data-model.md +++ b/docs-2.0/1.introduction/2.data-model.md @@ -15,7 +15,11 @@ Nebula Graph 数据模型使用 6 种基本的数据模型: 点用来保存实体对象,特点如下: - 点是用点标识符(`VID`)标识的。`VID`在同一图空间中唯一。VID 是一个 int64,或者 fixed_string(N)。 - - 点必须有至少一个 Tag,也可以有多个 Tag。但不能没有 Tag。 + - 点可以有 0 到多个 Tag。 + + !!! Compatibility + + Nebula Graph 2.x 的点不能没有 Tag。Nebula Graph {{nebula.release}} 的点可以没有 Tag。 - 边(Edge) diff --git a/docs-2.0/2.quick-start/4.nebula-graph-crud.md b/docs-2.0/2.quick-start/4.nebula-graph-crud.md index ee44a2fac52..9a00a30a17c 100644 --- a/docs-2.0/2.quick-start/4.nebula-graph-crud.md +++ b/docs-2.0/2.quick-start/4.nebula-graph-crud.md @@ -14,7 +14,7 @@ | 组成部分 | 说明| | :--- | :--- | -| 点(Vertex) | 表示现实世界中的实体。一个点可以有一个或多个标签。 | +| 点(Vertex) | 表示现实世界中的实体。一个点可以有 0 到多个标签。 | | 标签(Tag) | 点的类型,定义了一组描述点类型的属性。 | | 边(Edge) | 表示两个点之间**有方向**的关系。| | 边类型(Edge type) | 边的类型,定义了一组描述边的类型的属性。 | @@ -180,10 +180,9 @@ nebula> CREATE EDGE serve(start_year int, end_year int); - 插入点 ```ngql - INSERT VERTEX [IF NOT EXISTS] ([, ...]) + INSERT VERTEX [IF NOT EXISTS] [ (] [, ...]) [, ([, ...]), ...] - VALUES : ([, ...]) - [, : ([, ...]; + VALUES : ([[, ...]]); ``` `VID`是 Vertex ID 的缩写,`VID`在一个图空间中是唯一的。参数详情请参见 [INSERT VERTEX](../3.ngql-guide/12.vertex-statements/1.insert-vertex.md)。 diff --git a/docs-2.0/2.quick-start/6.cheatsheet-for-ngql-command.md b/docs-2.0/2.quick-start/6.cheatsheet-for-ngql-command.md index 8aa5151460f..d0a7217451b 100644 --- a/docs-2.0/2.quick-start/6.cheatsheet-for-ngql-command.md +++ b/docs-2.0/2.quick-start/6.cheatsheet-for-ngql-command.md @@ -384,7 +384,7 @@ | 语句 | 语法 | 示例 | 说明 | | ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | -| [INSERT VERTEX](../3.ngql-guide/12.vertex-statements/1.insert-vertex.md) | `INSERT VERTEX [IF NOT EXISTS] () [, (), ...] VALUES VID: ([, ])` | `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_props, [tag_props] ...] VALUES VID: ([prop_value_list])
tag_props: tag_name ([prop_name_list])
prop_name_list: [prop_name [, prop_name] ...]
prop_value_list: [prop_value [, prop_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 [, ...]` | `DELETE VERTEX "team1"` | 删除点,以及点关联的出边和入边。 | | [UPDATE VERTEX](../3.ngql-guide/12.vertex-statements/2.update-vertex.md) | `UPDATE VERTEX ON SET [WHEN ] [YIELD ]` | `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 SET [WHEN ] [YIELD ]` | `UPSERT VERTEX ON player "player667" SET age = 31` | 结合`UPDATE`和`INSERT`,如果点存在,会修改点的属性值;如果点不存在,会插入新的点。 | diff --git a/docs-2.0/20.appendix/0.FAQ.md b/docs-2.0/20.appendix/0.FAQ.md index 782a4a24e1c..e35672cf3ef 100644 --- a/docs-2.0/20.appendix/0.FAQ.md +++ b/docs-2.0/20.appendix/0.FAQ.md @@ -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)。 ### 如何处理错误信息 `[ERROR (-1005)]: Used memory hits the high watermark(0.800000) of total system memory.` @@ -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)。 ### 获取指定点的出度(或者入度)? @@ -378,4 +374,4 @@ telnet: connect to address 192.168.1.10: Connection refused | 未到生效期 | 不可登录且无法使用 | 您的 License 还未到生效时间,请于有效期范围内使用。 | | 过期前 3 天内 | 可以登录并继续使用 | 您的 License 证书有效时间还剩 <3\|2\|1\|0> 天,过期7天后无法使用,请及时联系销售([inqury@vesoft.com](mailto:inqury@vesoft.com))购买并更换新的证书。 | | 过期后 7 天内 | 可以登录并继续使用 | 您的 License 证书已过期 <0\|1\|2\|3\|4\|5\|6\|7> 天,过期7天后无法使用,请及时联系销售([inqury@vesoft.com](mailto:inqury@vesoft.com))购买并更换新的证书。 | -| 过期后 7 天以上 | 不可登录且无法使用 | 您的 License 已过期 7 天以上,产品无法正常使用,请及时联系销售([inqury@vesoft.com](mailto:inqury@vesoft.com))购买并更换新的证书。 | \ No newline at end of file +| 过期后 7 天以上 | 不可登录且无法使用 | 您的 License 已过期 7 天以上,产品无法正常使用,请及时联系销售([inqury@vesoft.com](mailto:inqury@vesoft.com))购买并更换新的证书。 | diff --git a/docs-2.0/3.ngql-guide/10.tag-statements/6.delete-tag.md b/docs-2.0/3.ngql-guide/10.tag-statements/6.delete-tag.md index e4eaef7a963..c2ae2e9ae61 100644 --- a/docs-2.0/3.ngql-guide/10.tag-statements/6.delete-tag.md +++ b/docs-2.0/3.ngql-guide/10.tag-statements/6.delete-tag.md @@ -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)。 diff --git a/docs-2.0/3.ngql-guide/10.tag-statements/improve-query-by-tag-index.md b/docs-2.0/3.ngql-guide/10.tag-statements/improve-query-by-tag-index.md index 2db58844608..2a94deb14f1 100644 --- a/docs-2.0/3.ngql-guide/10.tag-statements/improve-query-by-tag-index.md +++ b/docs-2.0/3.ngql-guide/10.tag-statements/improve-query-by-tag-index.md @@ -4,10 +4,6 @@ 在 Nebula Graph 中,可以通过 Tag 变相实现相同操作,创建 Tag 并将 Tag 插入到已有的点上,就可以根据 Tag 名称快速查找点,也可以通过`DELETE TAG`删除某些点上不再需要的 Tag。 -!!! caution - - 请确保点上已经有另一个 Tag,否则删除点上最后一个 Tag 时,会导致点也被删除。 - ## 示例 例如在 basketballplayer 数据集中,部分篮球运动员同时也是球队股东,可以为股东 Tag`shareholder`创建索引,方便快速查找。如果不再是股东,可以通过`DELETE TAG`语句删除相应运动员的股东 Tag。 diff --git a/docs-2.0/3.ngql-guide/12.vertex-statements/1.insert-vertex.md b/docs-2.0/3.ngql-guide/12.vertex-statements/1.insert-vertex.md index 5ea1d4ad168..4c5bf8930d2 100644 --- a/docs-2.0/3.ngql-guide/12.vertex-statements/1.insert-vertex.md +++ b/docs-2.0/3.ngql-guide/12.vertex-statements/1.insert-vertex.md @@ -9,14 +9,18 @@ ## 语法 ```ngql -INSERT VERTEX [IF NOT EXISTS] () [, (), ...] -VALUES VID: ([, ]) + +INSERT VERTEX [IF NOT EXISTS] [tag_props, [tag_props] ...] +VALUES VID: ([prop_value_list]) + +tag_props: + tag_name ([prop_name_list]) prop_name_list: - [prop_name [, prop_name] ...] + [prop_name [, prop_name] ...] prop_value_list: - [prop_value [, prop_value] ...] + [prop_value [, prop_value] ...] ``` - `IF NOT EXISTS`:用户可以使用`IF NOT EXISTS`关键字检测待插入的 VID 是否存在,只有不存在时,才会插入,如果已经存在,不会进行修改。 @@ -26,13 +30,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 @@ -47,6 +55,9 @@ prop_value_list: ## 示例 ```ngql +# 插入不包含 Tag 的点。 +nebula> INSERT VERTEX VALUES "1":(); + # 插入不包含属性的点。 nebula> CREATE TAG IF NOT EXISTS t1(); nebula> INSERT VERTEX t1() VALUES "10":(); @@ -118,6 +129,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); diff --git a/docs-2.0/3.ngql-guide/12.vertex-statements/4.delete-vertex.md b/docs-2.0/3.ngql-guide/12.vertex-statements/4.delete-vertex.md index b831f804618..7edbcfcbb21 100644 --- a/docs-2.0/3.ngql-guide/12.vertex-statements/4.delete-vertex.md +++ b/docs-2.0/3.ngql-guide/12.vertex-statements/4.delete-vertex.md @@ -1,25 +1,37 @@ # DELETE VERTEX -`DELETE VERTEX`语句可以删除点,以及点关联的出边和入边。 +`DELETE VERTEX`语句可以删除点,但是默认不删除该点关联的出边和入边。 + +!!! Compatibility + + Nebula Graph 2.x 默认删除点及关联该点的出边和入,Nebula Graph {{nebula.release}} 默认只删除点,不删除该点关联的出边和入边,此时将默认存在悬挂边。 `DELETE VERTEX`语句一次可以删除一个或多个点。用户可以结合管道符一起使用,详情请参见[管道符](../5.operators/4.pipe.md)。 !!! note - - `DELETE VERTEX`是直接删除点和关联的边。 + - `DELETE VERTEX`是直接删除点,不删除关联的边。 - - `DELETE TAG`是删除指定点上的指定 Tag。当点上只有一个 Tag 时,执行`DELETE TAG`会删除点,但是不会删除关联的边。 + - `DELETE TAG`是删除指定点上的指定 Tag。 ## 语法 ```ngql -DELETE VERTEX [, ...]; +DELETE VERTEX [ , ... ] [WITH EDGE]; ``` +- `WITH EDGE`: 删除该点关联的出边和入边。 + + ## 示例 ```ngql +# 删除 VID 为 `team1` 的点,不删除该点关联的出边和入边。 nebula> DELETE VERTEX "team1"; + +# 删除 VID 为 `team1` 的点,并删除该点关联的出边和入边。 +nebula> DELETE VERTEX "team1" WITH EDGE; + ``` ```ngql @@ -27,9 +39,9 @@ nebula> DELETE VERTEX "team1"; 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 From cb85074fbb8777bd5a8c3ec8baf1b98e5563a637 Mon Sep 17 00:00:00 2001 From: randomJoe211 <69501902+randomJoe211@users.noreply.github.com> Date: Fri, 7 Jan 2022 15:14:01 +0800 Subject: [PATCH 23/33] Update exchange compilation steps (#1364) --- docs-2.0/nebula-exchange/ex-ug-compile.md | 72 +++++++++++------------ 1 file changed, 33 insertions(+), 39 deletions(-) diff --git a/docs-2.0/nebula-exchange/ex-ug-compile.md b/docs-2.0/nebula-exchange/ex-ug-compile.md index 9e2b1538153..566bbf330bb 100644 --- a/docs-2.0/nebula-exchange/ex-ug-compile.md +++ b/docs-2.0/nebula-exchange/ex-ug-compile.md @@ -4,7 +4,7 @@ ## 直接下载 JAR 文件 -社区版 Exchange 的 JAR 文件可以直接[下载](https://repo1.maven.org/maven2/com/vesoft/nebula-exchange/)。 +社区版 Exchange 的 JAR 文件可以直接[下载](https://github.com/vesoft-inc/nebula-exchange/releases)。 要下载企业版 Exchange,需先[获取 Nebula Graph 企业版套餐](https://nebula-graph.com.cn/pricing/)。 @@ -19,52 +19,46 @@ ### 前提条件 - 安装 [Maven](https://maven.apache.org/download.cgi)。 - - -- 下载 [pulsar-spark-connector_2.11](https://oss-cdn.nebula-graph.com.cn/jar-packages/pulsar-spark-connector_2.11.zip),解压到本地 Maven 库的目录`io/streamnative/connectors`中。 +- 根据数据源安装需要的 Spark 版本,从各数据源导出数据支持的 Spark 版本参见[软件依赖](about-exchange/ex-ug-limitations.md)。 ### 操作步骤 1. 在根目录克隆仓库`nebula-exchange`。 - ```bash - git clone -b {{exchange.branch}} https://github.com/vesoft-inc/nebula-exchange.git - ``` + ```bash + git clone -b {{exchange.branch}} https://github.com/vesoft-inc/nebula-exchange.git + ``` 2. 切换到目录`nebula-exchange`。 - ```bash - cd nebula-exchange/nebula-exchange - ``` - -3. 打包 Nebula Exchange。 - - ```bash - mvn clean package -Dmaven.test.skip=true -Dgpg.skip -Dmaven.javadoc.skip=true - ``` - -编译成功后,用户可以在当前目录里查看到类似如下目录结构。 - -```text -. -├── README-CN.md -├── README.md -├── pom.xml -├── src -│   ├── main -│   └── test -└── target - ├── classes - ├── classes.timestamp - ├── maven-archiver - ├── nebula-exchange-2.x.y-javadoc.jar - ├── nebula-exchange-2.x.y-sources.jar - ├── nebula-exchange-2.x.y.jar - ├── original-nebula-exchange-2.x.y.jar - └── site -``` - -在`target`目录下,用户可以找到`exchange-2.x.y.jar`文件。 + ```bash + cd nebula-exchange + ``` + +3. 根据 Exchange 使用环境中的 Spark 版本打包 Exchange。 + + - Spark 2.2: + + ```bash + mvn clean package -Dmaven.test.skip=true -Dgpg.skip -Dmaven.javadoc.skip=true \ + -pl nebula-exchange_spark_2.2 -am -Pscala-2.11 -Pspark-2.2 + ``` + + - Spark 2.4: + + ```bash + mvn clean package -Dmaven.test.skip=true -Dgpg.skip -Dmaven.javadoc.skip=true \ + -pl nebula-exchange_spark_2.4 -am -Pscala-2.11 -Pspark-2.4 + ``` + + - Spark 3.0: + + ```bash + mvn clean package -Dmaven.test.skip=true -Dgpg.skip -Dmaven.javadoc.skip=true \ + -pl nebula-exchange_spark_3.0 -am -Pscala-2.12 -Pspark-3.0 + ``` + +编译成功后,可以在`nebula-exchange_spark_x.x/target/`目录里找到`nebula-exchange_spark_x.x-{{exchange.branch}}.jar`文件。`x.x`代表 Spark 版本,例如`2.4`。 !!! note JAR 文件版本号会因 Nebula Java Client 的发布版本而变化。用户可以在 [Releases 页面](https://github.com/vesoft-inc/nebula-java/releases)查看最新版本。 From 596929a4681f241f21ecfa6bf9ee2c3fabffb354 Mon Sep 17 00:00:00 2001 From: cooper-lzy <78672629+cooper-lzy@users.noreply.github.com> Date: Fri, 7 Jan 2022 15:14:45 +0800 Subject: [PATCH 24/33] key-value separation support of RocksDB (#1363) * key-value separation support of RocksDB * Update 4.storage-config.md --- .../1.configurations/4.storage-config.md | 21 +++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/docs-2.0/5.configurations-and-logs/1.configurations/4.storage-config.md b/docs-2.0/5.configurations-and-logs/1.configurations/4.storage-config.md index 9f33a87d814..65092b71cdf 100644 --- a/docs-2.0/5.configurations-and-logs/1.configurations/4.storage-config.md +++ b/docs-2.0/5.configurations-and-logs/1.configurations/4.storage-config.md @@ -40,8 +40,8 @@ Storage 服务提供了两份初始配置文件`nebula-storaged.conf.default`和 | 名称 | 预设值 | 说明 | | :------------- | :------------------------ | :------------------------------------------------ | | `log_dir` | `logs` | 存放 Storage 服务日志的目录,建议和数据保存在不同硬盘。 | -| `minloglevel` | `0` | 最小日志级别,即不会记录低于这个级别的日志。可选值为`0`(INFO)、`1`(WARNING)、`2`(ERROR)、`3`(FATAL)。建议在调试时设置为`0`,生产环境中设置为`1`。如果设置为`4`,Nebula Graph 不会记录任何日志。 | -| `v` | `0` | 日志详细级别,值越大,日志记录越详细。可选值为`0`、`1`、`2`、`3`。 | +| `minloglevel` | `0` | 最小日志级别,即不会记录低于这个级别的日志。可选值:`0`(INFO)、`1`(WARNING)、`2`(ERROR)、`3`(FATAL)。建议在调试时设置为`0`,生产环境中设置为`1`。如果设置为`4`,Nebula Graph 不会记录任何日志。 | +| `v` | `0` | 日志详细级别,值越大,日志记录越详细。可选值:`0`、`1`、`2`、`3`。 | | `logbufsecs` | `0` | 缓冲日志的最大时间,超时后输出到日志文件。`0`表示实时输出。单位:秒。 | |`redirect_stdout`|`true` |是否将标准输出和标准错误重定向到单独的输出文件。 | |`stdout_log_file` |`storaged-stdout.log` | 标准输出日志文件名称。 | @@ -77,19 +77,28 @@ Storage 服务提供了两份初始配置文件`nebula-storaged.conf.default`和 | 名称 | 预设值 | 说明 | | :--------------------------| :-------------- | :------------------------ | |`data_path` | `data/storage` | 数据存储路径,多个路径用英文逗号(,)分隔。一个 RocksDB 实例对应一个路径。 | -|`minimum_reserved_bytes`|`268435456`|每个数据存储路径的剩余空间最小值,低于该值时,可能会导致集群数据写入失败。单位:字节。默认为`1073741824`,即 1GB。| +|`minimum_reserved_bytes`|`268435456`|每个数据存储路径的剩余空间最小值,低于该值时,可能会导致集群数据写入失败。单位:字节。| |`rocksdb_batch_size` | `4096` | 批量操作的缓存大小。单位:字节。 | |`rocksdb_block_cache` | `4` | BlockBasedTable 的默认块缓存大小。单位:兆(MB)。 | |`engine_type` | `rocksdb` | 存储引擎类型。 | -|`rocksdb_compression` | `lz4` | 压缩算法,可选值为`no`、`snappy`、`lz4`、`lz4hc`、`zlib`、`bzip2`和`zstd`。 | +|`rocksdb_compression` | `lz4` | 压缩算法,可选值:`no`、`snappy`、`lz4`、`lz4hc`、`zlib`、`bzip2`、`zstd`。 | |`rocksdb_compression_per_level` | - | 为不同级别设置不同的压缩算法。 | |`enable_rocksdb_statistics` | `false` | 是否启用 RocksDB 的数据统计。 | -|`rocksdb_stats_level` | `kExceptHistogramOrTimers` | RocksDB 的数据统计级别。可选值为`kExceptHistogramOrTimers`(禁用计时器统计,跳过柱状图统计)、`kExceptTimers`(跳过计时器统计)、`kExceptDetailedTimers`(收集除互斥锁和压缩花费时间之外的所有统计数据)、`kExceptTimeForMutex`收集除互斥锁花费时间之外的所有统计数据)和`kAll`(收集所有统计数据)。 | +|`rocksdb_stats_level` | `kExceptHistogramOrTimers` | RocksDB 的数据统计级别。可选值:`kExceptHistogramOrTimers`(禁用计时器统计,跳过柱状图统计)、`kExceptTimers`(跳过计时器统计)、`kExceptDetailedTimers`(收集除互斥锁和压缩花费时间之外的所有统计数据)、`kExceptTimeForMutex`收集除互斥锁花费时间之外的所有统计数据)、`kAll`(收集所有统计数据)。 | |`enable_rocksdb_prefix_filtering` | `true` | 是否启用 prefix bloom filter,启用时可以提升图遍历速度,但是会增加内存消耗。 | |`enable_rocksdb_whole_key_filtering` | `false` | 是否启用 whole key bloom filter。 | -|`rocksdb_filtering_prefix_length` | `12` | 每个 key 的 prefix 长度。可选值为`12`(分片 ID+点 ID)和`16`(分片 ID+点 ID+TagID/Edge typeID)。单位:字节。 | +|`rocksdb_filtering_prefix_length` | `12` | 每个 key 的 prefix 长度。可选值:`12`(分片 ID+点 ID)、`16`(分片 ID+点 ID+TagID/Edge typeID)。单位:字节。 | |`enable_partitioned_index_filter`|- |设置为`true`可以降低 bloom 过滤器占用的内存大小,但是在某些随机寻道(random-seek)的情况下,可能会降低读取性能。| +## Key-Value separation 配置 + +| 名称 | 预设值 | 说明 | +| :------------------| :------------------------| :------------------------------- | +| `rocksdb_enable_kv_separation` | `false` | 是否启用 BlobDB KV 分离存储功能。开启后可以提高查询性能。 | +| `rocksdb_kv_separation_threshold` | `100` | RocksDB KV 分离的阈值,在 flush 或 compaction 期间,大于或等于该阈值的值将被写入blob文件。单位:字节。 | +| `rocksdb_blob_compression` | `lz4` | BlobDB 的压缩算法,可选值:`no`、`snappy`、`lz4`、`lz4hc`、`zlib`、`bzip2`、`zstd`。 | +| `rocksdb_enable_blob_garbage_collection` | `true` | 在 compaction 过程中是否对 BlobDB 进行垃圾收集。 | + ## misc 配置 !!! caution From bb07fc03df55bd93005e106b895bbbd234c8949e Mon Sep 17 00:00:00 2001 From: cooper-lzy <78672629+cooper-lzy@users.noreply.github.com> Date: Fri, 7 Jan 2022 15:15:45 +0800 Subject: [PATCH 25/33] add nebula plato (#1329) * add nebula plato * update * update * update * update * update * update * Update docs-2.0/nebula-plato.md Co-authored-by: abby.huang <78209557+abby-cyber@users.noreply.github.com> * update Co-authored-by: abby.huang <78209557+abby-cyber@users.noreply.github.com> --- docs-2.0/20.appendix/6.eco-tool-version.md | 8 + docs-2.0/nebula-plato.md | 230 +++++++++++++++++++++ mkdocs.yml | 5 + 3 files changed, 243 insertions(+) create mode 100644 docs-2.0/nebula-plato.md diff --git a/docs-2.0/20.appendix/6.eco-tool-version.md b/docs-2.0/20.appendix/6.eco-tool-version.md index 3694efc05f0..14f2916aba9 100644 --- a/docs-2.0/20.appendix/6.eco-tool-version.md +++ b/docs-2.0/20.appendix/6.eco-tool-version.md @@ -123,6 +123,14 @@ Nebula Algorithm(简称 Algorithm)是一款基于 [GraphX](https://spark.apa |:---|:---| | {{ nebula.release }} | {{algorithm.release}}(2c61ca5) | +## Nebula Plato + +Nebula Plato 是一款集成了开源高性能图计算框架 Plato 的应用程序,支持利用 Plato 对 Nebula Graph 数据库中的数据执行图计算。详情请参见[什么是 Nebula Plato](../nebula-plato.md)。 + +|Nebula Graph 版本|Plato 版本(commit id)| +|:---|:---| +| {{ nebula.release }} | {{plato.release}}(d895634) | + ## Nebula Console Nebula Console 是 Nebula Graph 的原生 CLI 客户端。如何使用请参见[连接 Nebula Graph](../2.quick-start/3.connect-to-nebula-graph.md)。 diff --git a/docs-2.0/nebula-plato.md b/docs-2.0/nebula-plato.md new file mode 100644 index 00000000000..6f3612a1c06 --- /dev/null +++ b/docs-2.0/nebula-plato.md @@ -0,0 +1,230 @@ +# Nebula Plato + +[Nebula Plato](https://github.com/vesoft-inc/nebula-algorithm) 是一款集成了开源高性能图计算框架 [Plato](https://github.com/tencent/plato) 的应用程序,支持利用 Plato 对 Nebula Graph 数据库中的数据执行图计算。 + +!!! enterpriseonly + + 仅企业版支持本功能。 + +## 适用场景 + +支持将数据源为 Nebula Graph 集群、HDFS 上的 CSV 文件或本地 CSV 文件中的数据导入 Nebula Plato,并将图计算结果输出至 Nebula Graph 集群、HDFS 上的 CSV 文件或本地 CSV 文件。 + +## 使用限制 + +输入和输出均为 Nebula Graph 集群时,图计算结果只能输出到数据源所在的图空间。 + +## 版本兼容性 + +Nebula Plato 版本和 Nebula Graph 内核的版本对应关系如下。 + +|Plato client 版本|Nebula Graph 版本| +|:---|:---| +|{{plato.release}}|{{nebula.release}}| + +## 支持算法 + +Nebula Plato 支持的图计算算法如下。 + +| 算法名 |说明 |分类 | +|:----------------------|:----------------|:-----------| +| APSP | 全图最短路径 | 路径 | +| SSSP | 单源最短路径 | 路径 | +| BFS | 广度优先遍历 | 路径 | +| PageRank | 页面排序 | 节点重要度 | +| KCore | K核 | 节点重要度 | +| DegreeCentrality | 度中心性 | 节点重要度 | +| TriangleCount | 三角计数 | 图特征 | +| LPA | 标签传播 | 社区发现 | +| WCC | 联通分量 | 社区发现 | +| LOUVAIN | 社区发现 | 社区发现 | +| HANP | 跳衰减和节点偏好 | 社区发现 | +| Clustering Coefficient| 聚集系数 | 聚类 | + +## 安装 Nebula Plato + +在多个机器安装多个 Nebula Plato 服务构成集群时,需要安装路径相同,并设置节点间 SSH 免密登录。 + +### RPM包安装 + +```bash +sudo rpm -i nebula-plato-1.0-centos.x86_64.rpm --prefix /home/xxx/nebula-plato +``` + +### 编译安装 + +编译安装 Nebula Plato 的准备工作和编译 Nebula Graph 类似,详情参见[准备资源](4.deployment-and-installation/1.resource-preparations.md)。 + +1. 克隆仓库`plato`。 + + ```bash + $ git clone -b {{plato.branch}} https://github.com/vesoft-inc/plato.t + ``` + +2. 进入目录`plato`。 + + ```bash + $ cd plato + ``` + +3. 执行脚本安装编译依赖。 + + ```bash + $ sudo ./docker/install-dependencies.sh + ``` + +4. 下载并编译静态链接库。 + + ```bash + $ ./3rdtools.sh distclean && ./3rdtools.sh install + ``` + +5. 编译 Nebula Plato。 + + ```bash + $ ./build.sh + ``` + +## 使用方法 + +安装完成后,用户可以设置不同算法的参数,然后执行脚本,即可获得算法的结果,并导出为指定格式。 + +1. 选择 Nebula Plato 集群的任一节点,进入目录`scripts`。 + + ```bash + $ cd scripts + ``` + +2. 确认数据源和输出路径。配置方法如下: + + - 数据源为 Nebula Graph 集群 + + 1. 修改配置文件`nebula.conf`,设置 Nebula Graph 集群相关信息。 + + ```bash + # 连接 Nebula Graph 时的重试次数。 + --retry=3 + # 要读取或写入的图空间名称。 + --space=baskeyballplayer + + # 读取 Nebula Graph 设置 + # Nebula Graph 的 metad 服务地址。 + --meta_server_addrs=192.168.8.100:9559, 192.168.8.101:9559, 192.168.8.102:9559 + # 要读取的边的名称。 + --edges=LIKES + # 要读取的作为边的权重属性的名称。可以是属性名,也可以是 _rank。 + #--edge_data_fields + # 每次扫描读取的行数。 + --read_batch_size=10000 + + # 写回 Nebula Graph 设置 + # Nebula Graph 的 graphd 服务地址。 + --graph_server_addrs=192.168.8.100:9669 + # Nebula Graph 的登录用户名。 + --user=root + # Nebula Graph 的登录密码。 + --password=nebula + # 写回 Nebula Graph 时采用的模式: insert 和 update。 + --mode=insert + # 写回到 Nebula Graph 的 Tag 名称。 + --tag=pagerank + # 写回到 Nebula Graph 的 Tag 对应的属性名称。 + --prop=pr + # 写回到 Nebula Graph 的 Tag 对应的属性的类型。 + --type=double + # 写回时,每次写入的行数。 + --write_batch_size=1000 + # 写回失败的数据所存储的文件。 + --err_file=/home/jie.wang/plato/err.txt + ``` + + 2. 修改需要使用的算法脚本,例如`run_pagerank.sh`,设置相关参数。 + + ```bash + # 集群所有机器所运行的进程数之和,推荐每台机器为 1 或者 NUMA 架构的 node 数。 + WNUM=3 + # 每个进程的线程数,推荐最大设置为机器的硬件线程数。 + WCORES=4 + # 数据源路径 + # 可以通过文件 nebula.conf 设置从 Nebula Graph 读取: + INPUT=${INPUT:="nebula:$PROJECT/scripts/nebula.conf"} + # 也可以通过本地或 HDFS 上的 CSV 文件读取: + # #INPUT=${INPUT:="$PROJECT/data/graph/v100_e2150_ua_c3.csv"} + + # 图计算结果输出路径 + # 可以输出至 Nebula Graph 集群,如果数据源也为 Nebula Graph,结果会输出至 nebula.conf 指定的图空间。 + OUTPUT=${OUTPUT:="nebula:$PROJECT/scripts/nebula.conf"} + # 也可以输出至本地或 HDFS 上的 CSV 文件: + # OUTPUT=${OUTPUT:='hdfs://192.168.8.100:9000/_test/output'} + + # true 为有向图,false 为无向图。 + IS_DIRECTED=${IS_DIRECTED:=true} + # 是否进行 ID 编码 + NEED_ENCODE=${NEED_ENCODE:=true} + # 数据源的点 ID 类型,例如:string、int32、int64。 + VTYPE=${VTYPE:=int32} + # 编码类型。distributed 为分布式点ID编码,single 为单机点 ID 编码。 + ENCODER=${ENCODER:="distributed"} + # PageRank 算法的参数。不同算法的参数不同。 + EPS=${EPS:=0.0001} + DAMPING=${DAMPING:=0.85} + # 迭代次数 + ITERATIONS=${ITERATIONS:=100} + ``` + + - 数据源为本地或 HDFS 上的 CSV 文件 + + 修改需要使用的算法脚本,例如`run_pagerank.sh`,设置相关参数。 + + ```bash + # 集群所有机器所运行的进程数之和,推荐每台机器为 1 或者 NUMA 架构的 node 数。 + WNUM=3 + # 每个进程的线程数,推荐最大设置为机器的硬件线程数。 + WCORES=4 + # 数据源路径 + # 可以通过文件 nebula.conf 设置从 Nebula Graph 读取: + # INPUT=${INPUT:="nebula:$PROJECT/scripts/nebula.conf"} + # 也可以通过本地或 HDFS 上的 CSV 文件读取: + INPUT=${INPUT:="$PROJECT/data/graph/v100_e2150_ua_c3.csv"} + + # 图计算结果输出路径 + # 可以输出至 Nebula Graph 集群,如果数据源也为 Nebula Graph,结果会输出至 nebula.conf 指定的图空间。 + # OUTPUT=${OUTPUT:="nebula:$PROJECT/scripts/nebula.conf"} + # 也可以输出至本地或 HDFS 上的 CSV 文件: + OUTPUT=${OUTPUT:='hdfs://192.168.8.100:9000/_test/output'} + + # true 为有向图,false 为无向图。 + IS_DIRECTED=${IS_DIRECTED:=true} + # 是否进行 ID 编码 + NEED_ENCODE=${NEED_ENCODE:=true} + # 数据源的点 ID 类型,例如:string、int32、int64。 + VTYPE=${VTYPE:=int32} + # 编码类型。distributed 为分布式点ID编码,single 为单机点 ID 编码。 + ENCODER=${ENCODER:="distributed"} + # PageRank 算法的参数。不同算法的参数不同。 + EPS=${EPS:=0.0001} + DAMPING=${DAMPING:=0.85} + # 迭代次数 + ITERATIONS=${ITERATIONS:=100} + ``` + +3. 修改配置文件`cluster`,设置执行算法的 Nebula Plato 集群节点和任务分配权重。 + + ```bash + # Nebula Plato 集群节点 IP 地址:任务分配权重 + 192.168.8.200:1 + 192.168.8.201:1 + 192.168.8.202:1 + ``` + +4. 执行算法脚本。例如: + + ```bash + ./run_pagerank.sh + ``` + +5. 在输出路径查看计算结果。 + + - 输出至 Nebula Graph 集群,请根据`nebula.conf`的设置查看计算结果。 + + - 输出至 HDFS 上的 CSV 文件或本地 CSV 文件,请根据图计算脚本内的`OUTPUT`设置查看计算结果,计算结果为`.gz`格式的压缩文件。 \ No newline at end of file diff --git a/mkdocs.yml b/mkdocs.yml index ffc81c39d36..22d717d4cac 100755 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -75,6 +75,9 @@ extra: algorithm: release: 2.5.1 branch: v2.5 + plato: + release: 1.0.0 + branch: v1.0.0 sparkconnector: release: 2.6.1 branch: v2.6 @@ -477,6 +480,8 @@ nav: - Nebula Algorithm: nebula-algorithm.md + - Nebula Plato: nebula-plato.md + - Nebula Spark Connector: nebula-spark-connector.md - Nebula Flink Connector: nebula-flink-connector.md From 51fd34a63350983a9b3cbc468963c55b38e2cb1e Mon Sep 17 00:00:00 2001 From: foesa <35463247+foesa-yang@users.noreply.github.com> Date: Fri, 7 Jan 2022 15:34:34 +0800 Subject: [PATCH 26/33] add cloud (#1282) * [WIP]add cloud * update-1209 * update-1210 * update-1215 * update-1216 * update_1221 * update-1222 * update * update * update-1223 * update-1228 * Update docs-2.0/nebula-cloud/5.solution/5.3.role-and-authority-management.md Co-authored-by: cooper-lzy <78672629+cooper-lzy@users.noreply.github.com> * Update docs-2.0/nebula-cloud/8.privacy-policy.md Co-authored-by: cooper-lzy <78672629+cooper-lzy@users.noreply.github.com> * Update 7.terms-and-conditions.md * Update 1.what-is-cloud.md * Update 3.how-to-set-solution.md * update * Update 1.what-is-cloud.md * update-1228 * Update 5.0.introduce-solution.md * Update 5.0.introduce-solution.md * Update 1.what-is-cloud.md * Update 2.how-to-create-subsciption.md * Update 3.how-to-set-solution.md * Update 5.2.connection-configuration-and-use.md * Update docs-2.0/nebula-cloud/5.solution/5.0.introduce-solution.md Co-authored-by: abby.huang <78209557+abby-cyber@users.noreply.github.com> * Update 5.3.role-and-authority-management.md * Update 1.what-is-cloud.md * Update 4.user-role-description.md * Update mkdocs.yml * update * update-0104 * update * Update 5.2.connection-configuration-and-use.md Co-authored-by: cooper-lzy <78672629+cooper-lzy@users.noreply.github.com> Co-authored-by: max.zhu@vesoft.com <86282370+izhuxiaoqing@users.noreply.github.com> Co-authored-by: abby.huang <78209557+abby-cyber@users.noreply.github.com> --- docs-2.0/nebula-cloud/1.what-is-cloud.md | 17 ++ .../2.how-to-create-subsciption.md | 31 +++ .../nebula-cloud/3.how-to-set-solution.md | 51 ++++ .../nebula-cloud/4.user-role-description.md | 44 ++++ .../5.solution/5.0.introduce-solution.md | 31 +++ .../5.solution/5.1.supporting-application.md | 23 ++ .../5.2.connection-configuration-and-use.md | 75 ++++++ .../5.3.role-and-authority-management.md | 27 ++ docs-2.0/nebula-cloud/6.pricing.md | 0 .../nebula-cloud/7.terms-and-conditions.md | 130 ++++++++++ docs-2.0/nebula-cloud/8.privacy-policy.md | 233 ++++++++++++++++++ docs-2.0/nebula-cloud/figs/copy.png | Bin 0 -> 1104 bytes docs-2.0/nebula-cloud/figs/edit.png | Bin 0 -> 1190 bytes .../2.deploy-connect-dashboard-ent.md | 4 +- .../reuse/source_connect-to-nebula-graph.md | 2 +- mkdocs.yml | 14 ++ 16 files changed, 679 insertions(+), 3 deletions(-) create mode 100644 docs-2.0/nebula-cloud/1.what-is-cloud.md create mode 100644 docs-2.0/nebula-cloud/2.how-to-create-subsciption.md create mode 100644 docs-2.0/nebula-cloud/3.how-to-set-solution.md create mode 100644 docs-2.0/nebula-cloud/4.user-role-description.md create mode 100644 docs-2.0/nebula-cloud/5.solution/5.0.introduce-solution.md create mode 100644 docs-2.0/nebula-cloud/5.solution/5.1.supporting-application.md create mode 100644 docs-2.0/nebula-cloud/5.solution/5.2.connection-configuration-and-use.md create mode 100644 docs-2.0/nebula-cloud/5.solution/5.3.role-and-authority-management.md create mode 100644 docs-2.0/nebula-cloud/6.pricing.md create mode 100644 docs-2.0/nebula-cloud/7.terms-and-conditions.md create mode 100644 docs-2.0/nebula-cloud/8.privacy-policy.md create mode 100644 docs-2.0/nebula-cloud/figs/copy.png create mode 100644 docs-2.0/nebula-cloud/figs/edit.png diff --git a/docs-2.0/nebula-cloud/1.what-is-cloud.md b/docs-2.0/nebula-cloud/1.what-is-cloud.md new file mode 100644 index 00000000000..2aa05f42ac0 --- /dev/null +++ b/docs-2.0/nebula-cloud/1.what-is-cloud.md @@ -0,0 +1,17 @@ +# 什么是 Nebula Graph Cloud + +Nebula Graph Cloud(简称 Cloud )是一款支持 [Azure](https://azure.microsoft.com/zh-cn/) 平台,在云上搭建 Nebula Graph 数据库的产品,支持一键部署 Nebula Graph。用户可以在几分钟内创建一个图数据库,并快速扩展计算、存储等资源。 + +## 产品功能 + +- 即买即用。用户可以根据自己的业务发展随时创建或停止 Nebula Graph 实例,业务提供充分的灵活性。 +- 集成可视化图数据库管理工具 Nebula Graph Studio、Nebula Dashboard、Nebula Explorer。可以使用它们导入图数据集、执行 nGQL 语句查询、探索图数据、监控数据等。即使没有图数据库操作经验,也可以快速成为图专家。详情参见 [配套的应用](../nebula-cloud/5.solution/5.1.supporting-application.md)。 +- 创建私有链接。用户可直接使用 Nebula Console 连接到云上数据库,而不需要先访问云平台。详情参见 [Private Link](../nebula-cloud/5.solution/5.2.connection-configuration-and-use.md)。 +- 权限控制。用户可以为指定图空间增加不同角色权限的数据库用户,保证业务数据安全。 +- 官方支持。用户可以快速创建工单,咨询使用过程中遇到的问题。 + +## 产品优点 + +- 灵活与弹性:Cloud 最大的优势在于灵活与弹性,无需自购软硬件即可快速(5-10分钟)搭建 Nebula Graph 数据库。 +- 高可用性:Cloud 上创建的 Nebula Graph 集群采用 Raft 协议,结合云厂商提供的同城多机房实现数据冗余备份,保证云计算基础框架的高可用性、数据的可靠性以及云服务器的高可用性。 +- 操作易用:Cloud 提供 Web 页面对 Nebula Graph 集群进行在线管理,同时提供配套的可视化软件,降低用户使用门槛,快速上手。 diff --git a/docs-2.0/nebula-cloud/2.how-to-create-subsciption.md b/docs-2.0/nebula-cloud/2.how-to-create-subsciption.md new file mode 100644 index 00000000000..ae999a99dfd --- /dev/null +++ b/docs-2.0/nebula-cloud/2.how-to-create-subsciption.md @@ -0,0 +1,31 @@ +# 创建订阅 + +在使用 Cloud 之前,用户需要在 Azure 上创建订阅,本文介绍如何在 Azure Marketplace 上创建订阅。 + +## 订阅流程 + + +1. 进入 [Azure市场](https://portal.azure.com/?l=en.en-us#blade/Microsoft_Azure_Marketplace/GalleryMenuBlade/selectedMenuItemId/home),在市场中的搜索栏搜索 Nebula Graph Cloud,或直接点击 [Nebula Graph Cloud]() 进入购买页面。[TODO] + +2. 用户根据需求选定计划,选择**创建 + 订阅**。 + 1. 在**订阅 Nebula Graph Cloud**的**基本信息**选项卡中,输入或选择以下信息: + + - 项目详细信息 + + |设置项|预设值| + |:---|:---| + |订阅|选择用户的订阅。| + |资源组|选择用户已有的资源组或新建一个资源组。| + + - SaaS 详情信息 + + |设置项|预设值| + |:---|:---| + |名称|输入 SaaS 订阅创建名称。| + |定时收费|选择**开**或**关**。| + + 2. 在页面的下方,选择**下一步:标记**的按钮。 + 3. (可选)在**标记**选项卡中,输入**名称:值**。 + 4. 在页面的下方,选择**订阅**的按钮,等待时间约 2 分钟。 + +3. 订阅完成后,用户需点击**在发布者站点上打开 SaaS 帐户**创建并配置 Solution。详细信息,参考[如何配置 Solution](../nebula-nebula-cloud/3.how-to-set-solution.md)。 diff --git a/docs-2.0/nebula-cloud/3.how-to-set-solution.md b/docs-2.0/nebula-cloud/3.how-to-set-solution.md new file mode 100644 index 00000000000..1297e9c5e22 --- /dev/null +++ b/docs-2.0/nebula-cloud/3.how-to-set-solution.md @@ -0,0 +1,51 @@ +# 配置 Solution + +Solution 指运行在 Nebula Graph Cloud 上的 Nebula Graph 数据库。在 Azure 完成订阅后需要于 Cloud 平台上配置 Solution 完成购买,本文介绍如何配置 Solution。 + +## 配置流程 + +1. 在 Azure 上订阅后,若要完成购买,请在页面上点击**立即配置账户**即跳转至 Nebula Graph Cloud 登录页面。 +2. 在 Nebula Graph Cloud 中登录订阅服务的 Azure 账号。 + 1. 在 **Provider** 选择**区域**。 + + !!! caution + + 为提升服务性能,建议选择的区域应与业务区域在同一区域。 + + 2. 在 **Instance** 中,选择查询引擎的类型及数量,存储引擎的类型、磁盘大小及数量。 + + !!! caution + + 为保证服务高可用,建议至少配置2个查询引擎和3个存储引擎。 + + 3. 在 **Nebula Graph** 中,输入指定 Azure 账号邮箱为 Root 用户。 + 4. 在页面的下方,选择 **Next** 的按钮。 + 5. 确定选择无误后,在页面的下方,选择 **Create** 的按钮。 +3. 至此,用户已经完成了 Solution 的配置。当在 Cloud 首页上看到 Solution 的状态为 **running**,即认为 Solution 已创建成功。 + +## Solution 状态 + +用户可能会在 Solution 页面上看到如下表描述的状态。 + +|状态| 状态说明 | +|:---|:---| +| creating | Solution 所需资源已经准备完毕,Solution 自动开始创建,此时 Solution 短暂处于 creating 状态,可能持续几分钟到十几分钟。| +| starting | 重新启动 Solution,此时 Solution 短暂处于 starting 状态。 | +| stopping | 用户点击停止 Solution 后,此时 Solution 短暂处于 stopping 状态。 | +| deleting | 用户点击删除 Solution 后,此时 Solution 短暂处于 deleting 状态。 | +| running | Solution 创建成功后,会长时间稳定地处于 running 状态。 | +| stopped | 停止 Solution 后,会长时间稳定地处于 stopped 状态。 | +| deleted | 删除 Solution 后,会长时间稳定地处于 deleted 状态。 | +| create_failed | Solution 创建失败后,会长时间稳定地处于 create_failed 状态。 | +| stop_failed | Solution 停止失败后,会长时间稳定地处于 stop_failed 状态。 | +| start_failed | Solution 开始失败后,会长时间稳定地处于 start_failed 状态。 | + + +!!! caution + + 如果 Solution 长时间处于某个中间状态,刷新页面后仍未改变,说明出现异常,用户需要提交工单处理。 + +!!! caution + + 如果 Solution 处于 create_failed、stop_failed、start_failed 态,用户可以重新执行 **创建、停止、开始** 的操作。 + diff --git a/docs-2.0/nebula-cloud/4.user-role-description.md b/docs-2.0/nebula-cloud/4.user-role-description.md new file mode 100644 index 00000000000..377fb2d352b --- /dev/null +++ b/docs-2.0/nebula-cloud/4.user-role-description.md @@ -0,0 +1,44 @@ +# Cloud Solution 角色身份说明 + +在创建 Solution 之后,用户需要明确 Cloud 中角色身份的权限,本文介绍 Cloud Solution 角色身份说明。 + +## 内置角色 + +Nebula Cloud 中内置了多种角色,说明如下: + +- OWNER + - 资源管理员,对应服务订阅的创建者,具有订阅及资源管理权限。 + - 配置 **Solution**,确定及创建服务、激活订阅。 + - 管理服务,可以启动或停止 **Solution** 的服务。 + - 管理数据库中 **ROOT** 权限的用户,手动授权 **ROOT** 用户。 + - 管理数据库私有链接,可以通过私有链接访问云上数据库。 + - 查看资源记录。 + - 连接可视化工具 Dashboard,可以查看指定 Solution 的节点监控和服务监控。 + +- ROOT + - 对应 Nebula Graph 数据库的 God 权限角色,由资源管理员设置。God 角色的执行权限,详情可见[内置角色权限](../7.data-security/1.authentication/3.role-list.md)。 + - 管理 Cloud 中的不同图空间下的 **USER** 级别的用户,授权 **USER** 级别用户时,需要指定 Nebula Graph 数据库的操作权限,包括**ADMIN、DBA、GUEST、USER**,详情可见[内置角色权限](../7.data-security/1.authentication/3.role-list.md)。 + - 业务直连访问管理,通过私有链接访问云上数据库。 + - 连接可视化工具 Dashboard、Studio、Explorer。 + +- USER + - 使用数据库的用户,由 Cloud 中 **ROOT** 用户通过权限管理添加邀请的 Azure 平台用户。 + - 对应 Nebula Graph 数据库的 **ADMIN**、**DBA**、**GUEST** 或 **USER** 权限角色。 + - 业务直连访问管理,通过私有链接访问云上数据库。 + - 连接可视化工具 Studio、Explorer。 + +## Solutions 页面的权限 + +在 Solution 页面中,不同的角色将会看到不同的侧边栏下表描述了角色的页面权限。其中,Y 表示该列的角色能看到该行的页面,N 表示不能。 + +|页面|OWNER|ROOT|USER| +|:---|:---|:---|:---| +|Solution Info|Y|Y|Y| +|Applications|Y|Y|Y| +|Connectivity|Y|N|N| +|Root Management|Y|N|N| +|User Management|N|Y|N| +|Audit Log|Y|N|N| +|Settings|Y|N|N| +|Subscribe Settings|Y|N|N| +|Billing|Y|N|N| diff --git a/docs-2.0/nebula-cloud/5.solution/5.0.introduce-solution.md b/docs-2.0/nebula-cloud/5.solution/5.0.introduce-solution.md new file mode 100644 index 00000000000..2a7ae5394e1 --- /dev/null +++ b/docs-2.0/nebula-cloud/5.solution/5.0.introduce-solution.md @@ -0,0 +1,31 @@ +# Solution + +在 Solution 页面中,不同的角色将会看到不同的侧边栏。具体角色权限,详情参见 [Cloud Solution 角色身份说明](../4.user-role-description.md)。 + +## Solution Info 页面介绍 + +在 Cloud 的首页点击 Solution 名字进入指定的 Solution Info 页面。Solution Info 页面由以下几个部分组成:Basic Info、Instance Info、Price Info、Getting Started。用户可以在此页面查看每个部分的详细的信息。 + +## Applications 页面介绍 + +在侧边栏点击 **Applications** 进入 Cloud 配套周边工具的跳转页面,不同的用户角色将会在 **Applications** 页面看到不同的周边工具。详情信息,参见 [配套的应用](../5.solution/5.1.supporting-application.md)。 + +## Connectivity 页面介绍 + +在侧边栏点击 **Connectivity** 进入 Private Link 设置页面,在页面中可根据提示设置 Private Link,让用户能够通过虚拟网络中的专用节点访问 Nebula Graph 数据库。详情信息,参见 [Private Link](../5.solution/5.2.connection-configuration-and-use.md)。 + +## Root Management 页面介绍 + +在侧边栏点击 **Root Management** 进入 Root 账号管理页面。详情信息,参见[角色与权限管理](../5.solution/5.3.role-and-authority-management.md)。 + +## User Management 页面介绍 + +在侧边栏点击 **User Management** 进入 User 账号管理页面。详情信息,参见[角色与权限管理](../5.solution/5.3.role-and-authority-management.md)。 + +## Audit Log 页面介绍 + +在侧边栏点击 **Audit Log** 进入操作记录页面,用户可以根据 **Create Solution**、**Start Solution**、**Stop Solution** 等操作信息,选择时间段,筛选出操作人和操作记录。 + +## Settings 页面介绍 + +在侧边栏点击 **Settings** 进入设置页面,用户可以在设置中停止solution或transfer solution。 diff --git a/docs-2.0/nebula-cloud/5.solution/5.1.supporting-application.md b/docs-2.0/nebula-cloud/5.solution/5.1.supporting-application.md new file mode 100644 index 00000000000..8438f459e0e --- /dev/null +++ b/docs-2.0/nebula-cloud/5.solution/5.1.supporting-application.md @@ -0,0 +1,23 @@ +# 配套的应用(Dashboard/Studio/Explorer) + +Nebula Graph Cloud 集成了可视化图数据库管理工具 Nebula Graph Studio、可视化数据库监控工具 Nebula Dashboard、可视化图探索工具 Nebula Explorer。 + +不同的用户角色将会使在 **Applications** 页面看到不同的周边工具,下表描述了不同角色及相应的权限。其中,第一列表示角色所能使用的周边工具,Y 表示拥有权限,N 表示没有权限。 + +|周边工具|OWNER|ROOT|USER| +|:---|:---|:---|:---| +|Dashboard|Y|Y|N| +|Studio|N|Y|Y| +|Explorer|N|Y|Y| + +## Dashboard + +Dashboard 是一款用于监控和管理 Nebula Graph 多集群中机器和服务状态的可视化工具。目前 Dashboard 仅支持查看 [集群监控](../../nebula-dashboard-ent/4.cluster-operator/2.monitor.md) 页面。 + +## Studio + +Studio 是一款可以通过 Web 访问的图数据库开源可视化工具,搭配 Nebula Graph 内核使用,提供构图、数据导入、编写 nGQL 查询、图探索等一站式服务。使用说明及详情信息,可查看 [什么是 Nebula Graph Studio](../../nebula-studio/about-studio/st-ug-what-is-graph-studio.md)。 + +## Explorer + +Explore 是一款可以通过 Web 访问的图探索可视化工具,搭配 Nebula Graph 内核使用,用于与图数据进行可视化交互。即使没有图数据操作经验,用户也可以快速成为图专家。使用说明及详情信息,可查看 [什么是 Nebula Graph Explorer](../../nebula-explorer/about-explorer/ex-ug-what-is-explorer.md)。 diff --git a/docs-2.0/nebula-cloud/5.solution/5.2.connection-configuration-and-use.md b/docs-2.0/nebula-cloud/5.solution/5.2.connection-configuration-and-use.md new file mode 100644 index 00000000000..d5db3aafd56 --- /dev/null +++ b/docs-2.0/nebula-cloud/5.solution/5.2.connection-configuration-and-use.md @@ -0,0 +1,75 @@ +# Private Link + +Solution 可在 Connectivity 中设置 Private Link 让用户能够通过虚拟网络中的专用节点访问 Nebula Graph 数据库,并且网络流量不会进入公共互联网。 + +## 如何配置 Private Link + +1. 输入订阅 ID 后点击**创建**服务,创建时间大约需要2分钟。 + + !!! note + + 订阅 ID 在 Azure Portal 的 **订阅** 页面中查看。用户可以点击 [Subscriptions](https://portal.azure.com/?l=en.en-us#blade/Microsoft_Azure_Billing/SubscriptionsBlade) 页面快速访问。 + +2. 创建成功后用户可使用**别名**连接到 Azure 资源,在 Azure 中创建专用终结点。 + + 1. 在 Azure 首页的搜索框内输入**专用链接中心**后,选择左侧目录栏中的**专用终结点**。 + 2. 选择 **+ 创建** 按钮。 + 3. 在**创建专用链接服务**的**基本**选项卡中,输入或选择以下信息: + + - 项目详细信息 + + |设置项|预设值| + |:---|:---| + |订阅|选择用户的订阅。| + |资源组|选择用户已有的资源组或新建一个资源组。| + + - 实例详情信息 + + |设置项|预设值| + |:---|:---| + |名称|输入用户专用终结点的名字。| + |区域|选择区域。| + + !!! caution + + 为提升服务性能,选择的区域尽量与业务区域在同一区域。 + + 4. 在页面的下方,选择**下一步:资源**的按钮。 + 5. 在**资源**选项卡中,输入或选择以下信息: + + |设置项|预设值| + |:---|:---| + |连接方法|选择**按资源 ID 或别名连接到 Azure 资源**。| + |资源ID或别名|输入别名。| + |请求消息|输入消息,此将发送给资源所有者。| + + !!! note + + 别名在 Nebula Graph Cloud 的 Connectivity 页面中,点击 ![copy](../figs/copy.png) 可一键复制。 + + 6. 在页面的下方,选择**下一步:配置**的按钮。 + 7. 在**配置**选项卡中,选择以下信息: + + |设置项|预设值| + |:---|:---| + |虚拟网络|选择虚拟网络。| + |子网|选择虚拟网络中的子网。| + + !!! note + + 目前不支持与专用 DNS 集成。 + + 8. 在页面的下方,选择**下一步:标记**的按钮。 + 9. (可选)在**标记**选项卡中,输入**名称/值对**。 + 10. 在页面的下方,选择**下一步:查看 + 创建**的按钮。 + 11. 选择**创建**按钮。 + +3. 创建好**专用终结点**后,复制**专用 IP** 并写入 Cloud 的 Connectivity 页面,点击**创建**按钮。 + +!!! note + + 在 Cloud 中仅存储 Private Link Endpoint IP 信息,用户可以随时点击 ![edit](../figs/edit.png) 进行修改。 + +## 如何使用 Private Link 连接 Nebula Graph + +用户可以使用 Private Link 通过 Nebula Console 连接 Nebula Graph。详情信息,参见[连接 Nebula Graph](../../reuse/source_connect-to-nebula-graph.md)。 diff --git a/docs-2.0/nebula-cloud/5.solution/5.3.role-and-authority-management.md b/docs-2.0/nebula-cloud/5.solution/5.3.role-and-authority-management.md new file mode 100644 index 00000000000..7efeffc01bb --- /dev/null +++ b/docs-2.0/nebula-cloud/5.solution/5.3.role-and-authority-management.md @@ -0,0 +1,27 @@ +# 管理角色权限 + +Cloud 上 Solution 的角色与 Nebula Graph 内核的角色权限不相同,详情信息,参见 [Cloud Solution 角色身份说明](../4.user-role-description.md)。 + +下表显示了 Cloud 的角色权限与Nebula Graph内置角色权限的对应情况。 + +|Cloud上的角色权限|Nebula Graph内置角色权限| +|:---|:---| +|OWNER|-| +|ROOT|ROOT| +|USER|ADMIN/DBA/GUEST/USER| + +## Root Management + +只有拥有 OWNER 权限的用户可以管理 ROOT 用户。 + +进入 ROOT 管理页面,OWNER 可以对 ROOT 权限用户进行重置。 + +点击 **Reset** 后输入需要更新的 ROOT 用户的邮箱,并点击 **Send Email** 发送邮件。指定用户收到确认邮件后,点击确认即可。 + +## User Management + +只有拥有 ROOT 权限的用户可以管理 USER 用户。 + +进入 USER 管理页面,ROOT 可以指定用户对图空间的权限为 **ADMIN**、**DBA**、**GUEST** 或 **USER**。 + +选定图空间,点击 **Add User**,输入指定的用户邮箱并选择该用户图空间的管理权限后,点击 **Send Email** 发送邮件。指定用户收到确认邮件后,点击确认即可。 diff --git a/docs-2.0/nebula-cloud/6.pricing.md b/docs-2.0/nebula-cloud/6.pricing.md new file mode 100644 index 00000000000..e69de29bb2d diff --git a/docs-2.0/nebula-cloud/7.terms-and-conditions.md b/docs-2.0/nebula-cloud/7.terms-and-conditions.md new file mode 100644 index 00000000000..00c44ef5d33 --- /dev/null +++ b/docs-2.0/nebula-cloud/7.terms-and-conditions.md @@ -0,0 +1,130 @@ +# 用户服务条款 + +欢迎使用 Nebula Graph Cloud! + +Nebula Graph Cloud(以下简称为“云服务”)是由杭州欧若数网科技有限公司(以下简称“欧若数网”或“我们”)提供的互联网软件服务。本服务协议是欧若数网与云服务用户(以下简称“您”或“用户”)之间关于用户访问和使用云服务的主要协议。 + +**在接受本服务协议之前**,请您仔细阅读全部内容,如您无法准确理解或不同意本服务协议中的任一内容,请不要进行后续操作。**您通过网络页面点击确认或者使用欧若数网所提供的云服务等操作均表示您已经与我们达成本服务协议并同意接受本服务协议的全部约定内容。** 特别提示您关注本服务协议中关于限制、免除欧若数网责任的条款、对用户的权利限制条款、违规/违约行为的认定处理以及管辖法院的选择等条款内容。前述条款可能以加粗形式提示您注意。 + +由于互联网行业高速发展,本服务协议未必能完整罗列并覆盖您与欧若数网的所有权利与义务,现有的约定也不能保证完全符合未来发展的需求。因此,您同意欧若数网有权在必要的时候对本服务协议做任何修改和补充,并予以公示。对本服务协议的修改将在公布时或规定的生效日立即生效。您继续访问和使用云服务即视为您接受修订后的服务协议。否则,您有权通过停止且拒绝使用云服务、注销账户等方式来终止本服务协议。 + +如果您代表某个机构而非您个人注册、登录和使用我们的云服务,则您将被认为获得充分授权代表该机构同意本服务协议以及本服务协议不时的修改和补充。 + +1. 数据保留 + + 用户到Azure平台取消订阅或用户欠费30天后自动取消订阅。取消订阅后的数据保留期限为7天,7天后该服务项下用户存储的全部业务数据将被永久删除,不可恢复。 + +2. 服务内容 + + 本协议中的“产品和/或服务”指:欧若数网向您提供的云服务,具体服务内容以您所使用或订购的内容为准。 + + 根据实际需要和欧若数网不时提供的其他服务内容,欧若数网可能与您另行签订其他协议。同时,即使未另行签订其他协议,您使用云服务的具体服务也将被视为您同意欧若数网关于该等具体服务的任何要求。**如果其他协议和本服务协议之间存在冲突,应以其他协议为准,但以该冲突和与该协议特定事宜相关为限。** + + 欧若数网保留随时变更、中止或终止部分免费服务的权利,并保留根据实际情况随时调整免费的云服务种类、形式的权利。欧若数网不承担因任何免费云服务的调整给您造成的损失。欧若数网有权在未来恰当的时机对任何免费云服务内容收取相应的服务费用,在开始收费前,我们将通过站内通知、邮件、官网公告等形式予以通知。如您不同意修改、变更付费内容,则应停止使用该云服务。 + + 您同意欧若数网为满足用户需求、提升产品使用体验等需要调整、升级收费服务,包括服务种类、形式等。如因某些情况欧若数网需要终止向您提供的收费服务,我们将提前通过站内通知、邮件、官网公告等形式予以通知。**您同意如果欧若数网终止提供某项收费服务,我们的义务仅在于向您返还您尚未使用的服务期对应的部分费用。您同意欧若数网无需因收费服务的调整、升级或终止向您承担责任。** 但无论如何,欧若数网将尽合理的努力给您预留合理的时间以便您为该等服务变更、中止或终止做出应对。 + +3. 注册 + + 为了能访问和使用云服务,您同意以下事项:依云服务网站上的注册提示填写准确真实的注册邮箱、密码和名称,并确保今后更新的登录邮箱、名称等资料的有效性和合法性。若您提供任何违法、虚假、不道德或欧若数网认为不适合出现在云服务平台上的资料,或者欧若数网有理由怀疑您的资料属于病毒程序或恶意操作,或者您违反本服务协议的规定,我们有权暂停或终止您的账号,并拒绝您于现在和未来使用云服务之全部或任何部分。 + + 尽管有前述规定,欧若数网无义务对任何用户的任何登记资料承担任何责任,包括但不限于鉴别、核实任何登记资料的真实性、准确性、完整性、适用性和/或是否为最新资料的责任。 + + 同时,欧若数网建议您妥善保管您的注册邮箱、密码和名称,准确输入该等信息将作为您访问登录并使用云服务的关键环节。如果您发现有人未经授权使用您的账户信息或怀疑任何人可能在未经授权的情况下能够访问您的私有内容,您应立即更改密码,并向我们反馈。 + +4. 使用 + + 我们鼓励用户充分利用云服务自由地创建内容。您可以自由使用任何您拥有使用权(包括上传、发布、共享内容所需的复制权、信息网络传播权等使用权)的用户业务数据。同时,您不应在云服务上使用受版权保护的内容,包括但不限于未经权利人许可使用或超越许可范围使用或许可期限已经届满且未展期的内容。 + + 用户不得使用云服务发送或传播敏感信息和违反国家法律制度的信息,包括但不限于下列信息: + + - 反对宪法所确定的基本原则的; + - 危害国家安全,泄露国家秘密,颠覆国家政权,破坏国家统一的; + - 损害国家荣誉和利益的; + - 煽动民族仇恨、民族歧视,破坏民族团结的; + - 破坏国家宗教政策,宣扬邪教和封建迷信的; + - 散布谣言,扰乱社会秩序,破坏社会稳定的; + - 散布淫秽、色情、赌博、暴力、凶杀、恐怖或者教唆犯罪的; + - 侮辱或者诽谤他人,侵害他人合法权益的; + - 含有法律、行政法规禁止的其他内容的。 + + 您承诺发布的内容要:爱国、守法、自律、真实、文明。不传播任何非法的、骚扰性的、中伤他人的、辱骂性的、恐吓性的、伤害性的、庸俗的,淫秽的、危害国家安全的、泄露国家机密的、破坏国家宗教政策和民族团结的以及其它违反法律法规及政策的内容。若用户的行为不符合以上提到的服务条款,欧若数网将作出独立判断立即暂停或终止用户的服务账号。用户需自行对其全部行为承担法律责任,欧若数网不承担任何法律责任,欧若数网因此受到的损失应由客户全额赔偿。 + +5. 知识产权 + + 欧若数网完全拥有云服务(包括对其进行的任何开发和升级)的所有权及所有相关的知识产权(包括但不限于源代码、目标代码、文档资料、界面设计、版面框架、以及任何由欧若数网根据维护与技术支持提供的软件、资料等)。您认同欧若数网拥有的所有权及知识产权,并承诺尊重及不以任何方式侵害欧若数网的所有权及知识产权。未经欧若数网书面许可,您不得使用包括但不限于复制、传播、转让、许可等方式使用或提供他人使用上述知识成果,否则应承担相应的责任并赔偿由此给欧若数网造成的损失,且欧若数网有权终止您对云服务的使用且不退还任何费用。 + + 您对于自己创作并在云服务上发布的合法内容依法享有著作权及其他相关权利。 + + 您在欧若数网发布违反法律规定或侵犯他人知识产权或其他合法权益的内容,欧若数网有权予以删除,并保留移交司法机关处理的权利,如因此给欧若数网造成损失的,应当予以赔偿。 + +6. 用户个人信息保护和数据安全 + + 欧若数网会按现有技术提供相应的安全措施来保护您的信息,提供合理的安全保障。欧若数网将在任何时候尽力做到使您的信息不被泄漏、毁损或丢失,但同时也请您注意在信息网络上不存在绝对完善的安全措施,请妥善保管好相关信息。 + + 其他隐私条款见《隐私政策》。 + +7. 用户业务数据 + + 欧若数网理解并认可,您通过云服务提供的服务,加工、存储、上传、下载、分发以及通过其他方式处理的数据,均为您的用户业务数据,您完全拥有您的用户业务数据。 + + 针对于您的用户业务数据,欧若数网除执行您的服务要求外,不进行任何未获授权的使用及披露;但以下情形除外: + 在国家有关机关依法查询或调阅用户业务数据时,欧若数网具有按照相关法律法规或政策文件要求提供配合,并向第三方或者行政、司法等机构披露的义务; + 您和欧若数网另行协商一致。 + + **您可自行对您的用户业务数据进行删除、更改等操作。如您已经删除服务或删除数据,欧若数网将删除您的数据,按照您的指令不再保留该等数据。就数据的删除、更改等操作,您应谨慎操作。** + + **您理解并同意:当服务期届满、服务提前终止(包括双方协商一致提前终止,其他原因导致的提前终止等)或您发生欠费时,除法律法规明确规定、主管部门要求或双方另有约定,欧若数网仅在 72 小时内继续存储您的用户业务数据(如有),72 小时后欧若数网将删除所有用户业务数据,包括所有缓存或者备份的副本,不再保留您的任何用户业务数据。** + + **用户业务数据一经删除,即不可恢复;您应承担数据因此被删除所引发的后果和责任,您理解并同意,欧若数网没有继续保留、导出或者返还用户业务数据的义务。** + +8. 不可抗力及免责声明 + + 您知悉并同意,下列情况下,欧若数网无需向您承担任何责任: + + 由于您使用不当、维护不当或保密不当,导致数据、资料、密码等丢失或泄漏,或其他非因欧若数网原因导致的个人信息的泄漏,欧若数网不承担任何法律责任; + + 您应对您的用户业务数据的合法性以及获得用户业务数据的方式的合法性负责,因上述用户业务数据引发的一切纠纷,由您承担全部法律责任,欧若数网不承担任何法律责任; + + 您理解并同意:我们的云服务是按照现有技术和条件所能达到的现状提供的;我们会尽最大合理努力向您提供服务,确保服务的连贯性和安全性;但我们不能随时预见和防范法律、技术以及其他风险,包括但不限于不可抗力、病毒、木马、黑客攻击、系统不稳定、第三方服务瑕疵、政府行为等原因可能导致的服务中断、数据丢失以及其他的损失和风险; + + 您理解并同意:我们的云服务并非为某些特定目的而设计,包括但不限于核设施、军事用途、医疗设施、交通通讯等重要领域;如果因为软件或服务的原因导致上述操作失败而带来人员伤亡、财产损失和环境破坏等,我们不承担法律责任。 + +9. 服务变更/中断/终止 + + 如果为了完成系统维护或升级必须暂停网络服务、调整服务功能的,欧若数网将尽可能事先在网站上进行通告。 + + 如发生下列任何一种情形,欧若数网有权单方面中断或终止向用户提供服务而无需事先通知用户: + + - 用户提供的个人资料不真实; + + - 用户违反法律法规、本服务条款规定的; + + - 出于安全的原因或其他必要的情形。 + + 您理解并同意:为技术升级、服务体系升级或者因经营策略调整或配合国家重大技术、法规政策等变化,欧若数网不保证永久地提供某种服务,或可能变更所提供服务的形式、规格或其他方面,在终止该种服务或进行此种变更前,欧若数网将尽最大努力且提前以网站公告、站内信、邮件等一种或多种方式进行事先通知;如终止提供该种服务的,欧若数网将尽合理的努力给您预留合理的时间,妥善处理后续事宜。 + +10. 服务协议的完善和修改 + + 您理解并同意:欧若数网有权根据互联网的发展和中华人民共和国有关法律、法规的变化,不时地完善和修改欧若数网服务协议。欧若数网保留随时修改服务协议的权利,用户在使用云服务时,有必要对最新的服务协议进行仔细阅读和重新确认,当发生相关争议时,以最新的服务协议为准。 + + +11. 其他 + + 本服务协议及其下的服务受中华人民共和国法律管辖,并按之解释。 + + 用户使用本服务的行为若有任何违反国家法律法规或侵犯任何第三方合法权益的情形,欧若数网有权直接删除该等违反规定的信息,并可以暂停或终止向该用户提供服务。 + + 若用户利用本服务从事任何违法或侵权行为,由用户自行承担全部责任,欧若数网不承担任何法律责任。因此给欧若数网或任何第三方造成任何损失的,用户应负责全额赔偿。 + + 用户因为违反本协议而应赔偿欧若数网的损失,包括但不限于违约金、赔偿金、公证费、诉讼费、保全费、公告费、鉴定费、律师费、差旅费等。 + + 欧若数网有权将本协议的权利义务全部或者部分转移给欧若数网的关联公司,同时关联公司不会实质性降低您可获得服务的质量,否则欧若数网与关联公司向您承担连带责任。 + + 若双方之间另有盖章文本,且与网络页面点击确认的本协议存在不一致之处,以双方盖章的文本内容为准。 + + 若双方就本服务协议或其执行发生任何争议,应首先友好协商解决;协商不成时,任何一方均可向欧若数网注册地所在的人民法院提起诉讼。 + +12. 联系我们 + + 欢迎您对我们的服务协议提出意见。如有任何问题、意见或疑虑,请发邮件至 legal@vesoft.com ,此电子邮件地址作为本服务协议的组成部分可能会不时进行更新。 diff --git a/docs-2.0/nebula-cloud/8.privacy-policy.md b/docs-2.0/nebula-cloud/8.privacy-policy.md new file mode 100644 index 00000000000..0d5e9fe7e52 --- /dev/null +++ b/docs-2.0/nebula-cloud/8.privacy-policy.md @@ -0,0 +1,233 @@ +# 隐私政策条款 + +隐私政策 + +生效日期:2021年12月30日 + +本政策仅适用于由杭州欧若数网科技有限公司(英文名称为 vesoft Inc.,以下简称“欧若数网”和“我们”)提供的图数据库产品或服务,包括: + +如果您有任何疑问、意见或建议,请通过以下联系方式与我们联系: +- 电子邮件:legal@vesoft.com +- 电话:(+86) 0571-28120658 + +本政策将帮助您了解以下内容: +- 我们如何收集和使用您的个人信息 +- 如何使用 Cookie 和同类技术 +- 如何共享、转让、公开披露您的个人信息 +- 我们如何保护您的个人信息 +- 您的权利 +- 我们如何处理儿童的个人信息 +- 您的个人信息如何在全球范围转移 +- 本政策如何更新 +- 如何联系我们 + +欧若数网深知个人信息对您的重要性,并会尽全力保护您的个人信息安全可靠。我们致力于维持您对我们的信任,恪守以下原则,保护您的个人信息:权责一致原则、目的明确原则、选择同意原则、最小必要原则、确保安全原则、主体参与原则、公开透明原则等。同时,欧若数网承诺,我们将按业界成熟的安全标准,采取相应的安全保护措施来保护您的个人信息。 请在使用我们的产品或服务前,仔细阅读并了解本《隐私政策》。一旦您开始使用我们的产品或服务,将被视为对本政策内容的接受和认可。 + +## 一、我们如何收集您的个人信息 + +个人信息是指以电子或者其他方式记录的能够单独或者与其他信息结合识别特定自然人身份或者反映特定自然人活动情况的各种信息。 + +我们通过以下两种方式收集您的个人信息: + +1、您主动提交个人信息; + +2、您在使用欧若数网的产品或服务过程中产生相应的记录。 + +## 二、我们如何使用您的个人信息 + +在符合相关法律法规的前提下,欧若数网可能将收集的个人信息用作以下用途: + +### (一) 提供服务 + +1、在注册使用 Nebula Graph 官方论坛时,您必须提供账号名称和电子邮箱,设置并确认您的登录密码。您提交的电子邮箱用于您注册、登录、绑定账号、密码找回时接收验证码,并作为您与 Nebula Graph 官方论坛唯一的联系方式,用来接收通知。如果您使用 GitHub 账号注册 Nebula Graph 官方论坛,我们将依据 GitHub 相关的规定,在符合相应法律法规规定的前提下,使用您的这些用户信息。 + +2、在注册使用 Nebula Graph Cloud Service 时,您必须提供账号名称、姓名、电子邮箱、公司信息,设置并确认您的登录密码。您提交的电子邮箱用于您注册、登录、绑定账号、密码找回时接收验证码,并作为您与 Nebula Graph Cloud Service 唯一的联系方式,用来接收通知。 + +### (二) 开展数据分析和研究,改进产品和服务 + +1、为提供持续服务和保证服务质量,在您使用欧若数网的产品和服务期间,我们可能会记录并保存您登录和使用本服务的信息,包括但不限于 IP 地址、浏览器的类型、使用的语言、访问日期和时间、软硬件特征信息、用户标识符及网页浏览记录等。 + +2、为了更及时响应您的帮助请求,并改进服务,我们将记录并分析您使用欧若数网的产品和服务而产生的咨询记录、报障记录和针对用户故障的排障过程(如通信或通话记录)。 + +3、我们将对我们的服务使用情况进行统计,并可能会与公众或第三方分享这些统计信息,但这些统计信息不会包含您的任何身份识别信息。 + +4、邀请您参与有关我们产品和服务的调查。 + +### (三) 交付产品和服务 + +1、为了向您提供服务,我们会向您发送信息、通知或与您进行业务沟通,包括但不限于为保证服务完成所必需的验证码、使用服务时所必要的推送通知。 + +2、为了维护、改进服务,我们会向您提供更符合您个性化需求的信息展示,包括但不限于发送关于欧若数网产品的新闻、市场活动、优惠促销信息,或其他您可能感兴趣的内容。如果您不想接收我们给您发送的商业性电子信息,您可以根据信息中提供的退订方式予以退订。 + +### (四)保护欧若数网及其用户 + +为了保护欧若数网及其用户,我们会将您的个人信息用于身份验证、安全防范、投诉处理、纠纷协调、诈骗监测等用途。 + +如果我们要将信息用于本政策未载明的其它用途,会事先征求您的同意。如果我们要将基于特定目的收集而来的信息用于其他目的,会事先征求您的同意。 + +## 三、我们如何使用 Cookie 和同类技术 + +### (一) Cookie + +为确保网站正常运转,我们会在您的计算机或移动设备上存储名为 Cookie 的小数据文件。Cookie 通常包含标识符、站点名称以及一些号码和字符。借助于 Cookie,网站能够存储您的偏好等数据。我们不会将 Cookie 用于本政策所述目的之外的任何用途。您可根据自己的偏好管理或删除 Cookie。您可以清除计算机上保存的所有 Cookie,大部分网络浏览器都设有阻止 Cookie 的功能。但如果您这么做,则需要在每一次访问我们的网站时亲自更改用户设置。如需详细了解如何更改浏览器设置,请参见浏览器供应商的用户指南。 + +### (二) 网站信标和像素标签 + +除 Cookie 外,我们还会在网站上使用网站信标和像素标签等其他同类技术。例如,我们向您发送的电子邮件可能含有链接至我们网站内容的点击 URL。如果您点击该链接,我们则会跟踪此次点击,帮助我们了解您的产品或服务偏好并改善客户服务。网站信标通常是一种嵌入到网站或电子邮件中的透明图像。借助于电子邮件中的像素标签,我们能够获知电子邮件是否被打开。如果您不希望自己的活动以这种方式被追踪,则可以随时从我们的寄信名单中退订。 + +## 四、我们如何共享、转让、公开披露您的个人信息 + +### (一) 共享 + +我们不会与欧若数网以外的任何公司、组织和个人分享您的个人信息,但以下情况除外: + +1、在获取明确同意的情况下共享:获得您的明确同意后,我们会与其他方共享您的个人信息。 + +2、我们可能会根据法律法规规定,或按政府主管部门的强制性要求,对外共享您的个人信息。 + +3、与我们的附属公司共享:您的个人信息可能会与欧若数网的附属公司共享。我们只会共享必要的个人信息,且受本隐私政策中所声明目的的约束。附属公司如要改变个人信息的处理目的,将再次征求您的授权同意。 + +4、与授权合作伙伴共享:仅为实现本政策中声明的目的,我们的某些服务将由授权合作伙伴提供。我们可能会与合作伙伴共享您的某些个人信息,以提供更好的客户服务和用户体验。目前,欧若数网未与任何授权合作伙伴共享您的个人信息。 + +对我们与之共享个人信息的公司、组织和个人,我们会与其签署严格的保密协定,要求他们按照我们的说明、本隐私政策以及其他任何相关的保密和安全措施来处理个人信息。 + +### (二) 转让 + +我们不会将您的个人信息转让给任何公司、组织和个人,但以下情况除外: + +1、在获取明确同意的情况下转让:获得您的明确同意后,我们会向其他方转让您的个人信息; + +2、在涉及合并、收购或破产清算时,如涉及到个人信息转让,我们会要求新的持有您个人信息的公司、组织继续受此隐私政策的约束,否则我们将要求该公司、组织重新向您征求授权同意。 + +### (三) 公开披露 +我们仅会在以下情况下公开披露您的个人信息: + +1、获得您明确同意后; + +2、基于法律的披露:在法律、法律程序、诉讼或政府主管部门强制性要求的情况下,我们可能会公开披露您的个人信息。 + +## 五、我们如何保护您的个人信息 + +1、 我们已使用符合业界标准的安全防护措施保护您提供的个人信息, 防止数据遭到未经授权访问、公开披露、使用、修改、损坏或丢失。我们会采取一切合理可行的措施,保护您的个人信息。例如,在您的浏览器与 “服务”之间交换数据(如信用卡信息)时受 SSL 加密保护;我们同时对所有产品和服务的网站提供 https 安全浏览方式;我们会使用加密技术确保数据的保密性;我们会使用受信赖的保护机制防止数据遭到恶意攻击;我们使用业界权威的云服务厂商的服务;我们使用合理规范的 Web 开发技术;我们会部署访问控制机制,确保只有授权人员才可访问个人信息;以及我们会举办安全和隐私保护培训课程,加强员工对于保护个人信息重要性的认识。 + +2、我们会采取一切合理可行的措施,确保未收集无关的个人信息。我们只会在达成本政策所述目的所需的期限内保留您的个人信息,除非需要延长保留期或受到法律的允许。 + +3、互联网并非绝对安全的环境,而且电子邮件、即时通讯以及与其他欧若数网用户的交流方式并未加密,我们强烈建议您不要通过此类方式发送个人信息。请使用复杂密码,协助我们保证您的账号安全。 + +4、互联网环境并非百分之百安全,我们将尽力确保或担保您发送给我们的任何信息的安全性。如果我们的物理、技术、或管理防护设施遭到破坏,导致信息被非授权访问、公开披露、篡改或毁坏,导致您的合法权益受损,我们将承担相应的法律责任。 + +5、在不幸发生个人信息安全事件后,我们将按照法律法规的要求,及时向您告知:安全事件的基本情况和可能的影响、我们已采取或将要采取的处置措施、您可自主防范和降低风险的建议、对您的补救措施等。我们将及时将事件相关情况以邮件、信函、电话、推送通知等方式告知您,难以逐一告知个人信息主体时,我们会采取合理、有效的方式发布公告。 同时,我们还将按照监管部门要求,主动上报个人信息安全事件的处置情况。 + +## 六、您的权利 + +按照中国相关的法律、法规、标准,以及其他国家、地区的通行做法,我们保障您对自己的个人信息行使以下权利: + +### (一)访问您的个人信息 + +只要欧若数网的产品和服务已经提供了个人资料信息读写功能,您均有权自行访问您的个人信息,法律法规规定的例外情况除外。 + +如果您无法通过产品和服务本身访问这些个人信息,您可以随时发送电子邮件至 legal@vesoft.com。我们将在30天内回复您的访问请求。 + +对于您在使用我们的产品或服务过程中产生的其他个人信息,只要我们不需要过多投入,我们会向您提供。如果您想行使数据访问权,请发送电子邮件至 legal@vesoft.com。 + +### (二) 更正您的个人信息 + +当您发现我们处理的关于您的个人信息有错误时,您有权要求我们做出更正。您可以发送电子邮件至 legal@vesoft.com 提出更正申请。我们将在30天内回复您的更正请求。 + +### (三) 删除您的个人信息 +在以下情形中,您可以向我们提出删除个人信息的请求: + +1、如果我们处理个人信息的行为违反法律法规; + +2、如果我们收集、使用您的个人信息,却未征得您的同意; + +3、如果我们处理个人信息的行为违反了与您的约定; + +4、如果您不再使用我们的产品或服务,或您注销了账号; + +5、如果我们不再为您提供产品或服务。 + +若我们决定响应您的删除请求,我们还将同时通知从我们获得您的个人信息的实体,要求其及时删除,除非法律法规另有规定,或这些实体获得您的独立授权。当您从我们的服务中删除信息后,我们可能不会立即备份系统中删除相应的信息,但会在备份更新时删除这些信息。 + +### (四) 改变您授权同意的范围 + +每个业务功能需要一些基本的个人信息才能得以完成(见本政策“二、我们如何使用您的个人信息”)。对于额外收集的个人信息的收集和使用,您可以随时给予或收回您的授权同意。 + +当您收回同意后,我们将不再处理相应的个人信息。但您收回同意的决定,不会影响此前基于您的授权而开展的个人信息处理。 + +### (五) 个人信息主体注销账户 + +您随时可注销此前注册的账户。您可以按欧若数网的产品或服务的用户手册中的说明,完成账户注销操作。如果无法自行完成,您可以发送邮件至 legal@vesoft.com 申请注销账户。 + +在注销账户之后,我们将停止为您提供产品或服务,并依据您的要求,删除您的个人信息,法律法规另有规定的除外。 + +### (六) 个人信息主体获取个人信息副本 + +您有权获取您的个人信息副本,您可以发送邮件至 legal@vesoft.com 申请获取个人信息副本。 + +在技术可行的前提下,例如数据接口匹配,我们还可按您的要求,直接将您的个人信息副本传输给您指定的第三方。 + +### (七) 约束信息系统自动决策 + +在某些业务功能中,我们可能仅依据信息系统、算法等在内的非人工自动决策机制做出决定。如果这些决定显著影响您的合法权益,您有权要求我们做出解释,我们也将提供适当的救济方式。 + +### (八) 响应您的上述请求 + +为保障安全,您可能需要提供书面请求,或以其他方式证明您的身份。我们可能会先要求您验证自己的身份,然后再处理您的请求。我们将在三十天内做出答复。 + +对于您合理的请求,我们原则上不收取费用,但对多次重复、超出合理限度的请求,我们将视情收取一定成本费用。对于那些无端重复、需要过多技术手段(例如,需要开发新系统或从根本上改变现行惯例)、给他人合法权益带来风险或者非常不切实际(例如,涉及备份磁带上存放的信息)的请求,我们可能会予以拒绝。 + +在以下情形中,按照法律法规要求,我们将无法响应您的请求: + +1、与国家安全、国防安全直接相关的; + +2、与公共安全、公共卫生、重大公共利益直接相关的; + +3、与犯罪侦查、起诉、审判和判决执行等直接相关的; + +4、有充分证据表明您存在主观恶意或滥用权利的; + +5、响应您的请求将导致您或其他个人、组织的合法权益受到严重损害的; + +6、涉及商业秘密的。 + +## 七、我们如何处理儿童的个人信息 + +我们的产品、网站和服务主要面向成人。如果没有父母或监护人的同意,儿童不得创建自己的用户账户。 + +对于经父母同意而收集儿童个人信息的情况,我们只会在受到法律允许、父母或监护人明确同意或者保护儿童所必要的情况下使用或公开披露此信息。 + +尽管当地法律和习俗对儿童的定义不同,但我们将不满 14 周岁的任何人均视为儿童。 + +如果我们发现自己在未事先获得可证实的父母同意的情况下收集了儿童的个人信息,则会设法尽快删除相关数据。 + +## 八、您的个人信息如何在全球范围转移 + +原则上,我们在中华人民共和国境内收集和产生的个人信息,将存储在中华人民共和国境内。由于我们通过遍布全球的资源和服务器提供产品或服务,这意味着,在获得您的授权同意后,您的个人信息可能会被转移到您使用产品或服务所在国家/地区的境外管辖区,或者受到来自这些管辖区的访问。此类管辖区可能设有不同的数据保护法,甚至未设立相关法律。在此类情况下,我们会确保您的个人信息得到在中华人民共和国境内足够同等的保护。例如,我们会请求您对跨境转移个人信息的同意,或者在跨境数据转移之前实施数据去标识化等安全举措。 + +如果因业务需求、政府和司法监管要求存在跨境信息传输情况,需详细说明需要进行跨境传输的数据类型,以及跨境传输遵守的标准、协议和法律机制(合同等)。 + +## 九、本政策如何更新 + +我们的隐私政策可能变更。 + +未经您明确同意,我们不会削减您按照本隐私政策所应享有的权利。我们会在本页面上发布对本政策所做的任何变更。对于重大变更,我们还会提供更为显著的通知(包括对于某些服务,我们会通过电子邮件发送通知,说明隐私政策的具体变更内容)。 +本政策所指的重大变更包括但不限于: + +1、我们的服务模式发生重大变化。如处理个人信息的目的、处理的个人信息类型、个人信息的使用方式等; + +2、我们在所有权结构、组织架构等方面发生重大变化。如业务调整、 破产并购等引起的所有者变更等; + +3、个人信息共享、转让或公开披露的主要对象发生变化; + +4、您参与个人信息处理方面的权利及其行使方式发生重大变化; + +5、我们负责处理个人信息安全的责任部门、联络方式及投诉渠道发生变化时; + +6、个人信息安全影响评估报告表明存在高风险时。 + +## 十、如何联系我们 + +如果您对本隐私政策有任何疑问、意见或建议,您可以发送邮件至 legal@vesoft.com 与我们联系。 + +一般情况下,我们将在三十天内回复。 \ No newline at end of file diff --git a/docs-2.0/nebula-cloud/figs/copy.png b/docs-2.0/nebula-cloud/figs/copy.png new file mode 100644 index 0000000000000000000000000000000000000000..78bea45f768c12d1e778215f00a222e588c3ea2f GIT binary patch literal 1104 zcmeAS@N?(olHy`uVBq!ia0vp^5+E$V1|&B;f4Cb+v7|ftIx;Y9?C1WI$O_~$76-XI zF|0c$^AgBWNcITwWnidMV_;}#VPN_c&H|6fVj%4S#%?FG?HCxCK6$!0hD02G8y4>oTqyGI+%nZJ;jatj z(mH?gbAP)a;Hp_8u}IC;M`??<=PtQt60BMLiv;(s5ioLno47 zsf#{VSq2h6#E-3rUpb}s2J5Cz(rF=&ZP%5SSe)PDr@HOy_x17ODq9<7_&$FT94!24 zrA*rv6Q%=fJ6|v}gv?;In79AZ_9i9<_Qn@4zIKaDx-6a1_Rihyl-Eu66&+qX6tzyp z$9!UW5cF)4=kmkad!D{}@Zhb`(}0U-%8iT#Po7NK7`2k+@{WB!)nA4?tXjU|OtO!s zV6K;R{JGPQl~*iw@7mh=akJhT<3<&q;M8#3F%v?C9AZ7`b8{rlGnZu$QOCUk_Owub*m0#pDC`5xUr7& z!QvT9C+@V|=ejp!|Ht_%35+{!RP9!-VNp2EDZZmK|FNRAiByn5M2VGZ_?uQK@uv&+ zb?trMxcSAwJ=b6B%j{rRGwkY`DJl0%YSxC^s=~iK!`2D1Xti-2cXl#6V*fd_HW|+ljN%1xj(r7%bjTI>fz@8H1$(+jm)E*m!*IF8eF{G z7acqh{)0`XiNRPeaHW&oW%&l?@afZk%E}&N?q=P}pjEyn_V)zYdWK0eS^8>vJ}3dR zfoh3sL`h0wNvc(HQ7VvPFfuSQ)HO8HH8Kn_G_^7|vNAT%Hn6ZVFi^Aq+J>SbH$Npa ztrE9}@FZU=payr44aH^YR!ND)sk)^_nG9)}IjL6q`uZ99xvBbzDY=<>`kBf3dAe!& wc_sQKxdmWed}?N*S%!IWaY0FeesX?6r5@0XiCo`PfkrZTy85}Sb4q9e00h3qK>z>% literal 0 HcmV?d00001 diff --git a/docs-2.0/nebula-cloud/figs/edit.png b/docs-2.0/nebula-cloud/figs/edit.png new file mode 100644 index 0000000000000000000000000000000000000000..ea5fea18c61f238219f18c17cb1aa116104a5333 GIT binary patch literal 1190 zcmeAS@N?(olHy`uVBq!ia0vp^5+E$V1|&B;f4Cb+v7|ftIx;Y9?C1WI$O_~$76-XI zF|0c$^AgBWNcITwWnidMV_;}#VPN_c&H|6fVj%4S#%?FG?HCxCJv?0;Ln02pof@4X94*rJ-_-Ms<3Xj3 zV!rOP)OgnhNYCBov@~JSqvo(B0jw9FIeuWOdSS_Bml@#ba`2W~#@>dokS&@`QAfNd zD_F{8nMSov^1Sq{C9dz{s-xW3ZlC$)cwC%UI9FQW_ug~2vg`lHZBB0}JoeL6b9Ich zZcLU5mw0xZ+n(51)t{zw17~ZT`&oWA{_fVa;#IX8cONx9IMJ17HuJ=hu+2R4`3-pz z51*MC&;9SXCCjg0JEAYC?TU}PH?jWO)c5b+`(Nw#p1xye;_0g|p7ro>8SIS-4Qf)& zXj4>wKKqblL@(F8=~gDSpMFi%zWS@Lvfg3|Bair=d^VyHv^IuBM z=0Civ^hV3dg$sfwZx^=RBSOfYn5&H=9npO?{qSM;o2;w%f&XE?ekq*+f0514nDCw9gPJtWlh;1 ze;PC}SliV8GH>0wMo#|T-eh)5ZrR9vG377MHre+yI#|E|_#wKzJ@~G_^{Yp#pRjB{ z{@T@;b;f_|M_lJ$YHm{#l4|z(v^itT-0u|?<*y!bDbI5_rT&j~8}I)M$0}lWcU9R{ zwoJ)KfXQF`YR(u*~8m#^`fLDkGSk@ z8aKVomO8xgQPNMvaF?68xe`YLd3@&13fUtnW9p)`i+@Gx^Ecnh{%yJXsU{%-s6*3# z!IoPGmBiOv3px6css3_XLBzUCX`W%TbGIB74N?E_vv|ez%}Oa*-`fuxG#ajtn_qHp z{t4$a4VUl}D`%%|zyHx>;zXg&i(=sca~XKO_n6I@yH+c%=d?+@NaWs{xKpt^3f3GA z=4(ie=}VbwVfeE6>5=$L6TWqx72}yF$lWe)E0tZy`t`rV>O1RS_P9K_zUF}9bnf+u z>D8rHW{q0~+S-=HyiLBdV)g4Ub5s^r7Z}7o;#yUn@Gho(@$P7W9d{e{I15}-JvQf3 z?z?|?cOQHpc~R%y?&)j%N|{8a_Z z8ztlnjL+s}dxtalC~;dQ88S3j=kD(N{QD#4tgMtbM%GRjfSF6R#5JNMC9x#cD!C{X zNHG{07#Zps8tEDth8UVznHpLd8)zF?SQ!}1D1X6$q9HdwB{QuOw}zKm0b76?+(9-J zm!(@JB^IaZmKJ3)q-Ex$TIuWSXXNLm>L;e;X6ET*oQDWbkzLb6Mw<&;$UIiula{ literal 0 HcmV?d00001 diff --git a/docs-2.0/nebula-dashboard-ent/2.deploy-connect-dashboard-ent.md b/docs-2.0/nebula-dashboard-ent/2.deploy-connect-dashboard-ent.md index 004b2f1459e..1ae5224d039 100644 --- a/docs-2.0/nebula-dashboard-ent/2.deploy-connect-dashboard-ent.md +++ b/docs-2.0/nebula-dashboard-ent/2.deploy-connect-dashboard-ent.md @@ -52,8 +52,8 @@ dialect: mysql # 使用的数据库类型,目前仅支持 MySql host: 192.168.8.157 # 连接的 MySql 数据库的 ip 地址 port: 3306 # 连接的 MySql 数据库的端口号 - username: root # 登陆 MySql 的账号 - password: nebula # 登陆 MySql 的密码 + username: root # 登录 MySql 的账号 + password: nebula # 登录 MySql 的密码 name: dashboard # 对应的数据库名称 autoMigrate: true # 自动创建数据库表,默认为 true # exporter 端口信息 diff --git a/docs-2.0/reuse/source_connect-to-nebula-graph.md b/docs-2.0/reuse/source_connect-to-nebula-graph.md index cc4d111fb06..99eebca12d2 100644 --- a/docs-2.0/reuse/source_connect-to-nebula-graph.md +++ b/docs-2.0/reuse/source_connect-to-nebula-graph.md @@ -69,7 +69,7 @@ Nebula Graph 支持多种类型客户端,包括 CLI 客户端、GUI 客户端 | 参数 | 说明 | | - | - | | `-h` | 显示帮助菜单。 | - | `-addr` | 设置要连接的 graphd 服务的 IP 地址。默认地址为 127.0.0.1。| + | `-addr` | 设置要连接的 graphd 服务的 IP 地址。默认地址为 127.0.0.1。如果 Nebula Graph 部署在 [Nebula Cloud](../nebula-cloud/1.what-is-cloud.md) 上,用户需要创建 [Private Link](../nebula-cloud/5.solution/5.2.connection-configuration-and-use.md),设置为专用终结点的 IP 地址。 | | `-port` | 设置要连接的 graphd 服务的端口。默认端口为 9669。| | `-u/-user` | 设置 Nebula Graph 账号的用户名。未启用身份认证时,可以使用任意已存在的用户名(默认为`root`)。 | | `-p/-password` | 设置用户名对应的密码。未启用身份认证时,密码可以填写任意字符。 | diff --git a/mkdocs.yml b/mkdocs.yml index 22d717d4cac..c70721f429e 100755 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -358,6 +358,20 @@ nav: - Nebula Python: 14.client/5.nebula-python-client.md - Nebula Go: 14.client/6.nebula-go-client.md + - Nebula Graph Cloud: + - 什么是 Nebula Graph Cloud: nebula-cloud/1.what-is-cloud.md + - 创建订阅: nebula-cloud/2.how-to-create-subsciption.md + - 配置Solution: nebula-cloud/3.how-to-set-solution.md + - Cloud Solution 角色身份说明: nebula-cloud/4.user-role-description.md + - Solution 操作: + - Solution: nebula-cloud/5.solution/5.0.introduce-solution.md + - 配套的应用(Dashboard/Studio/Explorer): nebula-cloud/5.solution/5.1.supporting-application.md + - Private Link: nebula-cloud/5.solution/5.2.connection-configuration-and-use.md + - 管理角色权限: nebula-cloud/5.solution/5.3.role-and-authority-management.md + - 价格: nebula-cloud/6.pricing.md + - 用户服务条款: nebula-cloud/7.terms-and-conditions.md + - 隐私政策条款: nebula-cloud/8.privacy-policy.md + - Nebula Console: nebula-console.md - Nebula Graph Studio: From 1b931febe4ace8ddff0115570a1997d5a2ab44ef Mon Sep 17 00:00:00 2001 From: cooper-lzy <78672629+cooper-lzy@users.noreply.github.com> Date: Fri, 7 Jan 2022 17:32:40 +0800 Subject: [PATCH 27/33] support gql list/set/map (#1366) --- .../keywords-and-reserved-words.md | 2 + docs-2.0/3.ngql-guide/3.data-types/6.list.md | 34 ++++++----- docs-2.0/3.ngql-guide/3.data-types/7.set.md | 54 ++++++++++++++++- docs-2.0/3.ngql-guide/3.data-types/8.map.md | 59 +++++++++++++++---- 4 files changed, 121 insertions(+), 28 deletions(-) diff --git a/docs-2.0/3.ngql-guide/1.nGQL-overview/keywords-and-reserved-words.md b/docs-2.0/3.ngql-guide/1.nGQL-overview/keywords-and-reserved-words.md index d13eca71178..ae5e8084472 100644 --- a/docs-2.0/3.ngql-guide/1.nGQL-overview/keywords-and-reserved-words.md +++ b/docs-2.0/3.ngql-guide/1.nGQL-overview/keywords-and-reserved-words.md @@ -79,7 +79,9 @@ INT8 INTERSECT IS LIMIT +LIST LOOKUP +MAP MATCH MINUS NO diff --git a/docs-2.0/3.ngql-guide/3.data-types/6.list.md b/docs-2.0/3.ngql-guide/3.data-types/6.list.md index 8de03577212..b0e8b0d38fd 100644 --- a/docs-2.0/3.ngql-guide/3.data-types/6.list.md +++ b/docs-2.0/3.ngql-guide/3.data-types/6.list.md @@ -4,6 +4,10 @@ 列表用左方括号([)和右方括号(])包裹多个元素,各个元素之间用英文逗号(,)隔开。元素前后的空格在列表中被忽略,因此可以使用换行符、制表符和空格调整格式。 +## OpenCypher 兼容性 + +复合数据类型(例如 List、Set、Map)**不能**存储为点或边的属性。 + ## 列表操作 对列表进行操作可以使用预设的[列表函数](../6.functions-and-expressions/6.list.md),也可以使用下标表达式过滤列表内的元素。 @@ -34,9 +38,9 @@ nGQL 的下标支持从前往后查询,从 0 开始,0 表示第一个元素 ```ngql # 返回列表 [1,2,3] -nebula> RETURN [1, 2, 3] AS List; +nebula> RETURN list[1, 2, 3] AS a; +-----------+ -| List | +| a | +-----------+ | [1, 2, 3] | +-----------+ @@ -74,8 +78,8 @@ nebula> RETURN range(1,5)[3..] AS a; +--------+ # 返回列表内下标小于 3 的元素。 -nebula> WITH [1, 2, 3, 4, 5] AS list \ - RETURN list[..3] AS r; +nebula> WITH list[1, 2, 3, 4, 5] AS a \ + RETURN a[..3] AS r; +-----------+ | r | +-----------+ @@ -91,7 +95,7 @@ nebula> RETURN [n IN range(1,5) WHERE n > 2 | n + 10] AS a; +--------------+ # 返回列表内第一个至倒数第二个(包括)的元素。 -nebula> YIELD [1, 2, 3][0..-1] AS a; +nebula> YIELD list[1, 2, 3][0..-1] AS a; +--------+ | a | +--------+ @@ -99,7 +103,7 @@ nebula> YIELD [1, 2, 3][0..-1] AS a; +--------+ # 返回列表内倒数第三个至倒数第一个(不包括)的元素。 -nebula> YIELD [1, 2, 3, 4, 5][-3..-1] AS a; +nebula> YIELD list[1, 2, 3, 4, 5][-3..-1] AS a; +--------+ | a | +--------+ @@ -108,7 +112,7 @@ nebula> YIELD [1, 2, 3, 4, 5][-3..-1] AS a; # 设置变量,返回列表内下标为 1、2 的元素。 nebula> $var = YIELD 1 AS f, 3 AS t; \ - YIELD [1, 2, 3][$var.f..$var.t] AS a; + YIELD list[1, 2, 3][$var.f..$var.t] AS a; +--------+ | a | +--------+ @@ -116,14 +120,14 @@ nebula> $var = YIELD 1 AS f, 3 AS t; \ +--------+ # 越界的下标返回为空,未越界的可以正常返回。 -nebula> RETURN [1, 2, 3, 4, 5] [0..10] AS a; +nebula> RETURN list[1, 2, 3, 4, 5] [0..10] AS a; +-----------------+ | a | +-----------------+ | [1, 2, 3, 4, 5] | +-----------------+ -nebula> RETURN [1, 2, 3] [-5..5] AS a; +nebula> RETURN list[1, 2, 3] [-5..5] AS a; +-----------+ | a | +-----------+ @@ -131,7 +135,7 @@ nebula> RETURN [1, 2, 3] [-5..5] AS a; +-----------+ # [0..0] 时返回为空。 -nebula> RETURN [1, 2, 3, 4, 5] [0..0] AS a; +nebula> RETURN list[1, 2, 3, 4, 5] [0..0] AS a; +----+ | a | +----+ @@ -139,7 +143,7 @@ nebula> RETURN [1, 2, 3, 4, 5] [0..0] AS a; +----+ # M ≥ N 时,返回为空。 -nebula> RETURN [1, 2, 3, 4, 5] [3..1] AS a; +nebula> RETURN list[1, 2, 3, 4, 5] [3..1] AS a; +----+ | a | +----+ @@ -147,10 +151,10 @@ nebula> RETURN [1, 2, 3, 4, 5] [3..1] AS a; +----+ # 范围查询时,下标有 null 时,返回为 null。 -nebula> WITH [1,2,3] AS list \ - RETURN list[0..null] as a; +nebula> WITH list[1,2,3] AS a \ + RETURN a[0..null] as r; +----------+ -| a | +| r | +----------+ | __NULL__ | +----------+ @@ -172,7 +176,7 @@ nebula> RETURN [n IN range(1, 3) WHERE true | n] AS r; +-----------+ # 返回列表 [1,2,3] 的长度。 -nebula> RETURN size([1,2,3]); +nebula> RETURN size(list[1,2,3]); +---------------+ | size([1,2,3]) | +---------------+ diff --git a/docs-2.0/3.ngql-guide/3.data-types/7.set.md b/docs-2.0/3.ngql-guide/3.data-types/7.set.md index b865ecd217b..f06c9ff70ef 100644 --- a/docs-2.0/3.ngql-guide/3.data-types/7.set.md +++ b/docs-2.0/3.ngql-guide/3.data-types/7.set.md @@ -1,7 +1,57 @@ # 集合 -集合(Set)是复合数据类型。 +集合(Set)是复合数据类型,集合中是一组元素,与列表(List)不同的是,集合中的元素是无序的,且不允许重复。 + +集合用左花括号({)和右花括号(})包裹多个元素,各个元素之间用英文逗号(,)隔开。元素前后的空格在集合中被忽略,因此可以使用换行符、制表符和空格调整格式。 ## OpenCypher 兼容性 -在 OpenCypher 中,集合不是一个数据类型,而在 nGQL 中,集合仍在设计阶段。 \ No newline at end of file +- 复合数据类型(例如 List、Set、Map)**不能**存储为点或边的属性。 + +- 在 OpenCypher 中,集合不是一个数据类型,而在 nGQL 中,用户可以使用集合。 + +## 示例 + +```ngql +# 返回集合 {1,2,3}。 +nebula> RETURN set{1, 2, 3} AS a; ++-----------+ +| a | ++-----------+ +| {3, 2, 1} | ++-----------+ + +# 返回集合 {1,2,1},因为集合不允许重复元素,会返回 {1,2},且顺序是无序的。 +nebula> RETURN set{1, 2, 1} AS a; ++--------+ +| a | ++--------+ +| {2, 1} | ++--------+ + +# 判断集合中是否有指定元素 1。 +nebula> RETURN 1 IN set{1, 2} AS a; ++------+ +| a | ++------+ +| true | ++------+ + +# 计算集合中的元素数量。 +nebula> YIELD size(set{1, 2, 1}) AS a; ++---+ +| a | ++---+ +| 2 | ++---+ + +# 返回目标点属性值组成的集合。 +nebula> GO FROM "player100" OVER follow \ + YIELD set{properties($$).name,properties($$).age} as a; ++-----------------------+ +| a | ++-----------------------+ +| {36, "Tony Parker"} | +| {41, "Manu Ginobili"} | ++-----------------------+ +``` diff --git a/docs-2.0/3.ngql-guide/3.data-types/8.map.md b/docs-2.0/3.ngql-guide/3.data-types/8.map.md index a9ac53d06ed..4854c849617 100644 --- a/docs-2.0/3.ngql-guide/3.data-types/8.map.md +++ b/docs-2.0/3.ngql-guide/3.data-types/8.map.md @@ -2,19 +2,56 @@ 映射(Map)是复合数据类型。一个映射是一组键值对(Key-Value)的无序集合。在映射中,Key 是字符串类型,Value 可以是任何数据类型。用户可以通过`map['']`的方法获取映射中的元素。 -## 字面值映射 - -```ngql -nebula> YIELD {key: 'Value', listKey: [{inner: 'Map1'}, {inner: 'Map2'}]}; -+-------------------------------------------------------------+ -| {key:Value,listKey:[{inner:Map1},{inner:Map2}]} | -+-------------------------------------------------------------+ -| {key: "Value", listKey: [{inner: "Map1"}, {inner: "Map2"}]} | -+-------------------------------------------------------------+ -``` +映射用左花括号({)和右花括号(})包裹多个键值对,各个键值对之间用英文逗号(,)隔开。键值对前后的空格在映射中被忽略,因此可以使用换行符、制表符和空格调整格式。 ## OpenCypher 兼容性 -- 复合数据类型(例如 set、map、list)**不能**存储为点或边的属性。 +- 复合数据类型(例如 List、Set、Map)**不能**存储为点或边的属性。 - 不支持映射投影(map projection)。 + +## 示例 + +```ngql +# 返回简单的映射。 +nebula> YIELD map{key1: 'Value1', Key2: 'Value2'} as a; ++----------------------------------+ +| a | ++----------------------------------+ +| {Key2: "Value2", key1: "Value1"} | ++----------------------------------+ + +# 返回列表类型的映射。 +nebula> YIELD map{listKey: [{inner: 'Map1'}, {inner: 'Map2'}]} as a; ++-----------------------------------------------+ +| a | ++-----------------------------------------------+ +| {listKey: [{inner: "Map1"}, {inner: "Map2"}]} | ++-----------------------------------------------+ + +# 返回混合类型的映射。 +nebula> RETURN map{a: LIST[1,2], b: SET{1,2,1}, c: "hee"} as a; ++----------------------------------+ +| a | ++----------------------------------+ +| {a: [1, 2], b: {2, 1}, c: "hee"} | ++----------------------------------+ + +# 返回映射中的指定元素。 +nebula> RETURN map{a: LIST[1,2], b: SET{1,2,1}, c: "hee"}["b"] AS b; ++--------+ +| b | ++--------+ +| {2, 1} | ++--------+ + +# 判断映射中是否有指定key,暂不支持判断value。 +nebula> RETURN "a" IN MAP{a:1, b:2} AS a; ++------+ +| a | ++------+ +| true | ++------+ +``` + + From ff86af4208b98c223be73cf64ca7af52243e1183 Mon Sep 17 00:00:00 2001 From: cooper-lzy <78672629+cooper-lzy@users.noreply.github.com> Date: Fri, 7 Jan 2022 17:35:00 +0800 Subject: [PATCH 28/33] update match statement (#1361) * update match statement * update * Update 8.predicate.md * Update 10.collect.md * update --- docs-2.0/1.introduction/3.vid.md | 4 +- .../6.cheatsheet-for-ngql-command.md | 10 +- docs-2.0/20.appendix/0.FAQ.md | 8 +- .../1.nGQL-overview/1.overview.md | 2 +- .../1.nGQL-overview/ngql-style-guide.md | 10 +- .../3.data-types/4.date-and-time.md | 12 +- .../3.ngql-guide/5.operators/1.comparison.md | 12 +- docs-2.0/3.ngql-guide/5.operators/7.string.md | 16 +- .../6.functions-and-expressions/10.collect.md | 8 +- .../5.case-expressions.md | 6 +- .../6.functions-and-expressions/6.list.md | 4 +- .../6.functions-and-expressions/7.count.md | 2 +- .../8.predicate.md | 3 +- .../7.general-query-statements/2.match.md | 2 +- .../7.general-query-statements/3.go.md | 2 +- .../8.clauses-and-options/group-by.md | 2 +- .../8.clauses-and-options/limit.md | 10 +- .../8.clauses-and-options/order-by.md | 8 +- .../8.clauses-and-options/return.md | 54 ++--- .../8.clauses-and-options/where.md | 187 +++++++++--------- .../8.clauses-and-options/with.md | 6 +- 21 files changed, 181 insertions(+), 187 deletions(-) diff --git a/docs-2.0/1.introduction/3.vid.md b/docs-2.0/1.introduction/3.vid.md index 7d3f5103f03..0e3934455a1 100644 --- a/docs-2.0/1.introduction/3.vid.md +++ b/docs-2.0/1.introduction/3.vid.md @@ -58,6 +58,6 @@ VID 的数据类型必须在[创建图空间](../3.ngql-guide/9.space-statements 2. 例如 `LOOKUP ON player WHERE player.name == "Tony Parker"` 或者 `MATCH (v:player {name:"Tony Parker"}) `,是通过属性 `player.name` 的索引来定位到 `start vid`; -!!! caution "不能在没有 `start vid` 情况下进行全局扫描" +!!! caution - 例如 `match (n) return n;` 会返回错误,因为此时无法定位到 `start vid`;这是一个全局扫描,因此被禁止。 + `match (n) return n;` 会返回错误`Scan vertices or edges need to specify a limit number, or limit number can not push down.`,这是一个全局扫描,需要用`LIMIT`子句限制返回数量才能执行。 diff --git a/docs-2.0/2.quick-start/6.cheatsheet-for-ngql-command.md b/docs-2.0/2.quick-start/6.cheatsheet-for-ngql-command.md index d0a7217451b..fb69ffeb72f 100644 --- a/docs-2.0/2.quick-start/6.cheatsheet-for-ngql-command.md +++ b/docs-2.0/2.quick-start/6.cheatsheet-for-ngql-command.md @@ -208,7 +208,7 @@ | 匹配点的属性 | `MATCH (v:player{name:"Tim Duncan"}) RETURN v` | 用户可以在 Tag 的右侧用`{: }`表示模式中点的属性。 | | 匹配单点 ID | `MATCH (v) WHERE id(v) == 'player101' RETURN v` | 用户可以使用点 ID 去匹配点。`id()`函数可以检索点的 ID。 | | 匹配多点 ID | `MATCH (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.name AS Name` | 用户可以使用`--`符号表示两个方向的边,并匹配这些边连接的点。用户可以在`--`符号上增加`<`或`>`符号指定边的方向。 | + | 匹配连接的点 | `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` | 除了用`--`、`-->`、`<--`表示未命名的边之外,用户还可以在方括号中使用自定义变量命名边。例如`-[e]-`。 | | 匹配 Edge type | `MATCH ()-[e:follow]-() RETURN e` | 和点一样,用户可以用`:`表示模式中的 Edge type,例如`-[e:follow]-`。 | @@ -221,7 +221,7 @@ | 检索点或边的信息 | `MATCH (v:player{name:"Tim Duncan"}) RETURN v`
`MATCH (v:player{name:"Tim Duncan"})-[e]->(v2) RETURN e` | 使用`RETURN { | }`检索点或边的所有信息。 | | 检索点 ID | `MATCH (v:player{name:"Tim Duncan"}) RETURN id(v)` | 使用`id()`函数检索点 ID。 | | 检索 Tag | `MATCH (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.age` | 使用`RETURN { | }.`检索单个属性。
使用`AS`设置属性的别名。 | + | 检索点或边的单个属性 | `MATCH (v:player{name:"Tim Duncan"}) RETURN v.player.age` | 使用`RETURN { | }.`检索单个属性。
使用`AS`设置属性的别名。 | | 检索点或边的所有属性 | `MATCH p=(v:player{name:"Tim Duncan"})-[]->(v2) RETURN properties(v2)` | 使用`properties()`函数检索点或边的所有属性。 | | 检索 Edge type | `MATCH 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 `检索匹配路径的所有信息。 | @@ -340,11 +340,11 @@ | ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | | [GROUP BY](../3.ngql-guide/8.clauses-and-options/group-by.md) | ` GROUP BY YIELD , ` | `GO FROM "player100" OVER follow BIDIRECT YIELD $$.player.name as Name | GROUP BY $-.Name YIELD $-.Name as Player, count(*) AS Name_Count` | 查找所有连接到 player100 的点,并根据他们的姓名进行分组,返回姓名的出现次数。 | | [LIMIT](../3.ngql-guide/8.clauses-and-options/limit.md) | `YIELD [| LIMIT [,] ]` | `O FROM "player100" OVER follow REVERSELY YIELD $$.player.name AS Friend, $$.player.age AS Age | ORDER BY $-.Age, $-.Friend | LIMIT 1, 3` | 从排序结果中返回第 2 行开始的 3 行数据。 | -| [SKIP](../3.ngql-guide/8.clauses-and-options/limit.md) | `RETURN [SKIP ] [LIMIT ]` | `MATCH (v:player{name:"Tim Duncan"}) --> (v2) RETURN v2.name AS Name, v2.age AS Age ORDER BY Age DESC SKIP 1` | 用户可以单独使用`SKIP `设置偏移量,后面不需要添加`LIMIT `。 | +| [SKIP](../3.ngql-guide/8.clauses-and-options/limit.md) | `RETURN [SKIP ] [LIMIT ]` | `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 `设置偏移量,后面不需要添加`LIMIT `。 | | [ORDER BY](../3.ngql-guide/8.clauses-and-options/order-by.md) | ` ORDER BY [ASC | DESC] [, [ASC | DESC] ...]` | `FETCH PROP ON player "player100", "player101", "player102", "player103" YIELD player.age AS age, player.name AS name | ORDER BY $-.age ASC, $-.name DESC` | `ORDER BY`子句指定输出结果的排序规则。 | -| [RETURN](../3.ngql-guide/8.clauses-and-options/return.md) | `RETURN {||.|.|...}` | `MATCH (v:player) RETURN v.name, v.age LIMIT 3` | 返回点的属性为`name`和`age`的前三行值。 | +| [RETURN](../3.ngql-guide/8.clauses-and-options/return.md) | `RETURN {||.|.|...}` | `MATCH (v:player) RETURN v.player.name, v.player.age LIMIT 3` | 返回点的属性为`name`和`age`的前三行值。 | | [TTL](../3.ngql-guide/8.clauses-and-options/ttl-options.md) | ``CREATE TAG ( , , ...) ttl_duration= , ttl_col = `` | `CREATE TAG t2(a int, b int, c string) ttl_duration= 100, ttl_col = "a"` | 创建 Tag 并设置 TTL 选项。 | -| [WHERE](../3.ngql-guide/8.clauses-and-options/where.md) | `WHERE {. {>|==|<|...} ...}` | `MATCH (v:player) WHERE v.name == "Tim Duncan" XOR (v.age < 30 AND v.name == "Yao Ming") OR NOT (v.name == "Yao Ming" OR v.name == "Tim Duncan") RETURN v.name, v.age` | `WHERE`子句可以根据条件过滤输出结果,通常用于`GO`和`LOOKUP`语句,`MATCH`和`WITH`语句。 | +| [WHERE](../3.ngql-guide/8.clauses-and-options/where.md) | `WHERE {. {>|==|<|...} ...}` | `MATCH (v:player) WHERE v.player.name == "Tim Duncan" XOR (v.player.age < 30 AND v.player.name == "Yao Ming") OR NOT (v.player.name == "Yao Ming" OR v.player.name == "Tim Duncan") RETURN v.player.name, v.player.age` | `WHERE`子句可以根据条件过滤输出结果,通常用于`GO`和`LOOKUP`语句,`MATCH`和`WITH`语句。 | | [YIELD](../3.ngql-guide/8.clauses-and-options/yield.md) | `YIELD [DISTINCT] [AS ] [, [AS ] ...] [WHERE ];` | `GO FROM "player100" OVER follow YIELD dst(edge) AS ID | FETCH PROP ON player $-.ID YIELD player.age AS Age | YIELD AVG($-.Age) as Avg_age, count(*)as Num_friends` | 查找 player100 关注的 player,并计算他们的平均年龄。 | | [WITH](../3.ngql-guide/8.clauses-and-options/with.md) | `MATCH $expressions WITH {nodes()|labels()|...}` | `MATCH p=(v:player{name:"Tim Duncan"})--() WITH nodes(p) AS n UNWIND n AS n1 RETURN DISTINCT n1` | `WITH`子句可以获取并处理查询前半部分的结果,并将处理结果作为输入传递给查询的后半部分。 | diff --git a/docs-2.0/20.appendix/0.FAQ.md b/docs-2.0/20.appendix/0.FAQ.md index e35672cf3ef..70523a5798e 100644 --- a/docs-2.0/20.appendix/0.FAQ.md +++ b/docs-2.0/20.appendix/0.FAQ.md @@ -73,6 +73,10 @@ Nebula Graph {{ nebula.release }} 的数据模型中,由于设计允许图中 从 Nebula Graph 3.0 开始,查询语句`LOOKUP`、`GO`、`FETCH`必须用`YIELD`子句指定输出结果。详情请参见[YIELD](../3.ngql-guide/8.clauses-and-options/yield.md)。 +### 如何处理错误信息 `To get the property of the vertex in 'v.age', should use the format 'var.tag.prop'` + +从 3.0 版本开始,`pattern`支持同时匹配多个 Tag,所以返回属性时,需要额外指定 Tag 名称。即从`RETURN 变量名.属性名`改为`RETURN 变量名.Tag.属性名`。 + ### 返回消息中 `time spent` 的含义是什么? 将命令`SHOW SPACES`返回的消息作为示例: @@ -165,9 +169,9 @@ Storage 服务使用 Raft 协议(多数表决),为保证可用性,要求 nGQL 没有该功能。 -你必须先指定 Tag/EdgeType,才能获取对应类型的所有的点和边。 +你必须先指定 Tag/EdgeType,或者用`LIMIT`子句限制返回数量,才能获取对应类型的所有的点和边。 -例如执行 `MATCH (n) RETURN (n)`. 会返回错误 `can’t solve the start vids from the sentence`。 +例如执行 `MATCH (n) RETURN (n)`. 会返回错误 `Scan vertices or edges need to specify a limit number, or limit number can not push down.`。 一个办法是使用 [Nebula Algorithm](../nebula-algorithm.md). diff --git a/docs-2.0/3.ngql-guide/1.nGQL-overview/1.overview.md b/docs-2.0/3.ngql-guide/1.nGQL-overview/1.overview.md index 385b5600553..d1efdce20e1 100644 --- a/docs-2.0/3.ngql-guide/1.nGQL-overview/1.overview.md +++ b/docs-2.0/3.ngql-guide/1.nGQL-overview/1.overview.md @@ -137,7 +137,7 @@ Feature: Basic match When executing query: """ MATCH (v1:player{name: "LeBron James"}) -[r]-> (v2) - RETURN type(r) AS Type, v2.name AS Name + RETURN type(r) AS Type, v2.player.name AS Name """ Then the result should be, in any order: diff --git a/docs-2.0/3.ngql-guide/1.nGQL-overview/ngql-style-guide.md b/docs-2.0/3.ngql-guide/1.nGQL-overview/ngql-style-guide.md index c42589f3bae..26302808724 100644 --- a/docs-2.0/3.ngql-guide/1.nGQL-overview/ngql-style-guide.md +++ b/docs-2.0/3.ngql-guide/1.nGQL-overview/ngql-style-guide.md @@ -50,7 +50,7 @@ nGQL 没有严格的构建格式要求,但根据恰当而统一的风格创建 ```ngql MATCH (v:player{name:"Tim Duncan"})-[e]->(v2) \ - WHERE (v2.name STARTS WITH "Y" AND v2.age > 35 AND v2.age < v.age) OR (v2.name STARTS WITH "T" AND v2.age < 45 AND v2.age > v.age) \ + WHERE (v2.player.name STARTS WITH "Y" AND v2.player.age > 35 AND v2.player.age < v.player.age) OR (v2.player.name STARTS WITH "T" AND v2.player.age < 45 AND v2.player.age > v.player.age) \ RETURN v2; ``` @@ -58,8 +58,8 @@ nGQL 没有严格的构建格式要求,但根据恰当而统一的风格创建 ```ngql MATCH (v:player{name:"Tim Duncan"})-[e]->(v2) \ - WHERE (v2.name STARTS WITH "Y" AND v2.age > 35 AND v2.age < v.age) \ - OR (v2.name STARTS WITH "T" AND v2.age < 45 AND v2.age > v.age) \ + WHERE (v2.player.name STARTS WITH "Y" AND v2.player.age > 35 AND v2.player.age < v.player.age) \ + OR (v2.player.name STARTS WITH "T" AND v2.player.age < 45 AND v2.player.age > v.player.age) \ RETURN v2; ``` @@ -125,7 +125,7 @@ nGQL 没有严格的构建格式要求,但根据恰当而统一的风格创建 ```ngql MATCH (v:player{name: "Tim Duncan", age: 42}) \ - -[e:follow]->()-[e:serve]->()<--(v3) \ + -[e:follow]->()-[e2:serve]->()<--(v2) \ RETURN v, e, v2; ``` @@ -133,7 +133,7 @@ nGQL 没有严格的构建格式要求,但根据恰当而统一的风格创建 ```ngql MATCH (v:player{name: "Tim Duncan", age: 42})-[e:follow]-> \ - ()-[e:serve]->()<--(v3) \ + ()-[e2:serve]->()<--(v2) \ RETURN v, e, v2; ``` diff --git a/docs-2.0/3.ngql-guide/3.data-types/4.date-and-time.md b/docs-2.0/3.ngql-guide/3.data-types/4.date-and-time.md index d3222003855..0ec65e66e0a 100644 --- a/docs-2.0/3.ngql-guide/3.data-types/4.date-and-time.md +++ b/docs-2.0/3.ngql-guide/3.data-types/4.date-and-time.md @@ -107,12 +107,12 @@ ```ngql nebula> CREATE TAG INDEX IF NOT EXISTS date1_index ON date1(p1); nebula> REBUILD TAG INDEX date1_index; - nebula> MATCH (v:date1) RETURN v.p1.month; - +------------+ - | v.p1.month | - +------------+ - | 3 | - +------------+ + nebula> MATCH (v:date1) RETURN v.date1.p1.month; + +------------------+ + | v.date1.p1.month | + +------------------+ + | 3 | + +------------------+ ``` 4. 创建 Tag,名称为`school`,包含`TIMESTAMP`类型。 diff --git a/docs-2.0/3.ngql-guide/5.operators/1.comparison.md b/docs-2.0/3.ngql-guide/5.operators/1.comparison.md index 6dba8771d10..cf19e68dd8f 100644 --- a/docs-2.0/3.ngql-guide/5.operators/1.comparison.md +++ b/docs-2.0/3.ngql-guide/5.operators/1.comparison.md @@ -158,12 +158,12 @@ nebula> WITH {name: 'Mats', name2: 'Pontus'} AS map1, \ +-------------------+-----------------------+-------------------+ nebula> MATCH (n:player) \ - RETURN n.age IS NULL, n.name IS NOT NULL, n.empty IS NULL; -+---------------+--------------------+-----------------+ -| n.age IS NULL | n.name IS NOT NULL | n.empty IS NULL | -+---------------+--------------------+-----------------+ -| false | true | true | -+---------------+--------------------+-----------------+ + RETURN n.player.age IS NULL, n.player.name IS NOT NULL, n.player.empty IS NULL; ++----------------------+---------------------------+------------------------+ +| n.player.age IS NULL | n.player.name IS NOT NULL | n.player.empty IS NULL | ++----------------------+---------------------------+------------------------+ +| false | true | true | +| false | true | true | ... ``` diff --git a/docs-2.0/3.ngql-guide/5.operators/7.string.md b/docs-2.0/3.ngql-guide/5.operators/7.string.md index 2186837976c..1cff2c73ade 100644 --- a/docs-2.0/3.ngql-guide/5.operators/7.string.md +++ b/docs-2.0/3.ngql-guide/5.operators/7.string.md @@ -40,12 +40,12 @@ nebula> UNWIND 'a' AS a UNWIND 'b' AS b RETURN a + b; ```ngql nebula> MATCH (s:player)-[e:serve]->(t:team) WHERE id(s) == "player101" \ - AND t.name CONTAINS "ets" RETURN s.name, e.start_year, e.end_year, t.name; -+---------------+--------------+------------+-----------+ -| s.name | e.start_year | e.end_year | t.name | -+---------------+--------------+------------+-----------+ -| "Tony Parker" | 2018 | 2019 | "Hornets" | -+---------------+--------------+------------+-----------+ + AND t.team.name CONTAINS "ets" RETURN s.player.name, e.start_year, e.end_year, t.team.name; ++---------------+--------------+------------+-------------+ +| s.player.name | e.start_year | e.end_year | t.team.name | ++---------------+--------------+------------+-------------+ +| "Tony Parker" | 2018 | 2019 | "Hornets" | ++---------------+--------------+------------+-------------+ nebula> GO FROM "player101" OVER serve WHERE (STRING)properties(edge).start_year CONTAINS "19" AND \ properties($^).name CONTAINS "ny" \ @@ -121,9 +121,9 @@ nebula> RETURN "384748.39" =~ "\\d+(\\.\\d{2})?"; | true | +--------------------------------+ -nebula> MATCH (v:player) WHERE v.name =~ 'Tony.*' RETURN v.name; +nebula> MATCH (v:player) WHERE v.player.name =~ 'Tony.*' RETURN v.player.name; +---------------+ -| v.name | +| v.player.name | +---------------+ | "Tony Parker" | +---------------+ diff --git a/docs-2.0/3.ngql-guide/6.functions-and-expressions/10.collect.md b/docs-2.0/3.ngql-guide/6.functions-and-expressions/10.collect.md index a545066fdd7..c6902c92d39 100644 --- a/docs-2.0/3.ngql-guide/6.functions-and-expressions/10.collect.md +++ b/docs-2.0/3.ngql-guide/6.functions-and-expressions/10.collect.md @@ -56,18 +56,18 @@ nebula> WITH [1, 1, 2, 2] AS coll \ +--------+ nebula> MATCH (n:player) \ - RETURN collect(n.age); + RETURN collect(n.player.age); +---------------------------------------------------------------+ -| collect(n.age) | +| collect(n.player.age) | +---------------------------------------------------------------+ | [32, 32, 34, 29, 41, 40, 33, 25, 40, 37, ... ... # 基于年龄聚合姓名。 nebula> MATCH (n:player) \ - RETURN n.age AS age, collect(n.name); + RETURN n.player.age AS age, collect(n.player.name); +-----+--------------------------------------------------------------------------+ -| age | collect(n.name) | +| age | collect(n.player.name) | +-----+--------------------------------------------------------------------------+ | 24 | ["Giannis Antetokounmpo"] | | 20 | ["Luka Doncic"] | diff --git a/docs-2.0/3.ngql-guide/6.functions-and-expressions/5.case-expressions.md b/docs-2.0/3.ngql-guide/6.functions-and-expressions/5.case-expressions.md index cf6ee51f9fa..253659c1769 100644 --- a/docs-2.0/3.ngql-guide/6.functions-and-expressions/5.case-expressions.md +++ b/docs-2.0/3.ngql-guide/6.functions-and-expressions/5.case-expressions.md @@ -96,10 +96,10 @@ nebula> YIELD \ ``` ```ngql -nebula> MATCH (v:player) WHERE v.age > 30 \ - RETURN v.name AS Name, \ +nebula> MATCH (v:player) WHERE v.player.age > 30 \ + RETURN v.player.name AS Name, \ CASE \ - WHEN v.name STARTS WITH "T" THEN "Yes" \ + WHEN v.player.name STARTS WITH "T" THEN "Yes" \ ELSE "No" \ END \ AS Starts_with_T; diff --git a/docs-2.0/3.ngql-guide/6.functions-and-expressions/6.list.md b/docs-2.0/3.ngql-guide/6.functions-and-expressions/6.list.md index 2ccb2ab72a0..4a5f21bf9c8 100644 --- a/docs-2.0/3.ngql-guide/6.functions-and-expressions/6.list.md +++ b/docs-2.0/3.ngql-guide/6.functions-and-expressions/6.list.md @@ -42,7 +42,7 @@ nebula> MATCH (a:player)-[r]->() \ +------------+----------------------------+ nebula> MATCH p = (a:player)-[]->(b)-[]->(c:team) \ - WHERE a.name == "Tim Duncan" AND c.name == "Spurs" \ + WHERE a.player.name == "Tim Duncan" AND c.team.name == "Spurs" \ RETURN nodes(p); +-----------------------------------------------------------------------------------------------------------------------------------------------+ | nodes(p) | @@ -51,7 +51,7 @@ nebula> MATCH p = (a:player)-[]->(b)-[]->(c:team) \ | [("player100" :player{age: 42, name: "Tim Duncan"}), ("player125" :player{age: 41, name: "Manu Ginobili"}), ("team204" :team{name: "Spurs"})] | +-----------------------------------------------------------------------------------------------------------------------------------------------+ -nebula> MATCH p = (a:player)-[]->(b)-[]->(c:team) WHERE a.name == "Tim Duncan" AND c.name == "Spurs" RETURN relationships(p); +nebula> MATCH p = (a:player)-[]->(b)-[]->(c:team) WHERE a.player.name == "Tim Duncan" AND c.team.name == "Spurs" RETURN relationships(p); +-----------------------------------------------------------------------------------------------------------------------------+ | relationships(p) | +-----------------------------------------------------------------------------------------------------------------------------+ diff --git a/docs-2.0/3.ngql-guide/6.functions-and-expressions/7.count.md b/docs-2.0/3.ngql-guide/6.functions-and-expressions/7.count.md index 9689dcecefc..eb6a2af4922 100644 --- a/docs-2.0/3.ngql-guide/6.functions-and-expressions/7.count.md +++ b/docs-2.0/3.ngql-guide/6.functions-and-expressions/7.count.md @@ -75,7 +75,7 @@ nebula> LOOKUP ON player \ # 方法二:统计数据库中的年龄分布情况。 nebula> MATCH (n:player) \ - RETURN n.age as age, count(*) as number \ + RETURN n.player.age as age, count(*) as number \ ORDER BY number DESC, age DESC; +-----+--------+ | age | number | diff --git a/docs-2.0/3.ngql-guide/6.functions-and-expressions/8.predicate.md b/docs-2.0/3.ngql-guide/6.functions-and-expressions/8.predicate.md index 17496d64423..ae58cddbc55 100644 --- a/docs-2.0/3.ngql-guide/6.functions-and-expressions/8.predicate.md +++ b/docs-2.0/3.ngql-guide/6.functions-and-expressions/8.predicate.md @@ -84,12 +84,11 @@ nebula> MATCH p = (n:player{name:"LeBron James"})-[:follow]->(m) \ +------+ nebula> MATCH (n:player) \ - RETURN exists(n.id), n IS NOT NULL; + RETURN exists(n.player.id), n IS NOT NULL; +--------------+---------------+ | exists(n.id) | n IS NOT NULL | +--------------+---------------+ | false | true | -+--------------+---------------+ ... nebula> MATCH (n:player) \ diff --git a/docs-2.0/3.ngql-guide/7.general-query-statements/2.match.md b/docs-2.0/3.ngql-guide/7.general-query-statements/2.match.md index e5df90846af..d50ee4714cf 100644 --- a/docs-2.0/3.ngql-guide/7.general-query-statements/2.match.md +++ b/docs-2.0/3.ngql-guide/7.general-query-statements/2.match.md @@ -22,7 +22,7 @@ MATCH [] RETURN []; !!! compatibility "历史版本兼容性" - 从3.0版本开始,`pattern`支持同时匹配多个 Tag,所以返回属性时,需要额外指定 Tag 名称。即从`RETURN 变量名.属性名`改为`RETURN 变量名.Tag.属性名`。 + 从 3.0 版本开始,`pattern`支持同时匹配多个 Tag,所以返回属性时,需要额外指定 Tag 名称。即从`RETURN 变量名.属性名`改为`RETURN 变量名.Tag.属性名`。 - `clause_2`:支持`ORDER BY`、`LIMIT`子句。 diff --git a/docs-2.0/3.ngql-guide/7.general-query-statements/3.go.md b/docs-2.0/3.ngql-guide/7.general-query-statements/3.go.md index 4409c2815db..acb19459655 100644 --- a/docs-2.0/3.ngql-guide/7.general-query-statements/3.go.md +++ b/docs-2.0/3.ngql-guide/7.general-query-statements/3.go.md @@ -160,7 +160,7 @@ nebula> GO FROM "player100" OVER follow REVERSELY \ # 该 MATCH 查询与上一个 GO 查询具有相同的语义。 nebula> MATCH (v)<-[e:follow]- (v2)-[e2:serve]->(v3) \ WHERE id(v) == 'player100' \ - RETURN v2.name AS FriendOf, v3.name AS Team; + RETURN v2.player.name AS FriendOf, v3.team.name AS Team; +---------------------+-----------------+ | FriendOf | Team | +---------------------+-----------------+ diff --git a/docs-2.0/3.ngql-guide/8.clauses-and-options/group-by.md b/docs-2.0/3.ngql-guide/8.clauses-and-options/group-by.md index 39544807ae0..2a24fe334ff 100644 --- a/docs-2.0/3.ngql-guide/8.clauses-and-options/group-by.md +++ b/docs-2.0/3.ngql-guide/8.clauses-and-options/group-by.md @@ -9,7 +9,7 @@ 用户也可以使用 openCypher 方式的 [count()](../6.functions-and-expressions/7.count.md) 函数聚合数据。 ```ngql -nebula> MATCH (v:player)<-[:follow]-(:player) RETURN v.name AS Name, count(*) as cnt ORDER BY cnt DESC; +nebula> MATCH (v:player)<-[:follow]-(:player) RETURN v.player.name AS Name, count(*) as cnt ORDER BY cnt DESC; +----------------------+-----+ | Name | cnt | +----------------------+-----+ diff --git a/docs-2.0/3.ngql-guide/8.clauses-and-options/limit.md b/docs-2.0/3.ngql-guide/8.clauses-and-options/limit.md index 2dab4c77aef..99db52cc149 100644 --- a/docs-2.0/3.ngql-guide/8.clauses-and-options/limit.md +++ b/docs-2.0/3.ngql-guide/8.clauses-and-options/limit.md @@ -129,7 +129,7 @@ nebula> GO 3 STEPS FROM "player102" OVER * \ `LIMIT`可以单独使用,返回指定数量的结果。 ```ngql -nebula> MATCH (v:player) RETURN v.name AS Name, v.age AS Age \ +nebula> MATCH (v:player) RETURN v.player.name AS Name, v.player.age AS Age \ ORDER BY Age LIMIT 5; +-------------------------+-----+ | Name | Age | @@ -141,7 +141,7 @@ nebula> MATCH (v:player) RETURN v.name AS Name, v.age AS Age \ | "Kyle Anderson" | 25 | +-------------------------+-----+ -nebula> MATCH (v:player) RETURN v.name AS Name, v.age AS Age \ +nebula> MATCH (v:player) RETURN v.player.name AS Name, v.player.age AS Age \ ORDER BY Age LIMIT rand32(5); +-------------------------+-----+ | Name | Age | @@ -159,7 +159,7 @@ nebula> MATCH (v:player) RETURN v.name AS Name, v.age AS Age \ ```ngql nebula> MATCH (v:player{name:"Tim Duncan"}) --> (v2) \ - RETURN v2.name AS Name, v2.age AS Age \ + RETURN v2.player.name AS Name, v2.player.age AS Age \ ORDER BY Age DESC SKIP 1; +-----------------+-----+ | Name | Age | @@ -169,7 +169,7 @@ nebula> MATCH (v:player{name:"Tim Duncan"}) --> (v2) \ +-----------------+-----+ nebula> MATCH (v:player{name:"Tim Duncan"}) --> (v2) \ - RETURN v2.name AS Name, v2.age AS Age \ + RETURN v2.player.name AS Name, v2.player.age AS Age \ ORDER BY Age DESC SKIP 1+1; +---------------+-----+ | Name | Age | @@ -184,7 +184,7 @@ nebula> MATCH (v:player{name:"Tim Duncan"}) --> (v2) \ ```ngql nebula> MATCH (v:player{name:"Tim Duncan"}) --> (v2) \ - RETURN v2.name AS Name, v2.age AS Age \ + RETURN v2.player.name AS Name, v2.player.age AS Age \ ORDER BY Age DESC SKIP 1 LIMIT 1; +-----------------+-----+ | Name | Age | diff --git a/docs-2.0/3.ngql-guide/8.clauses-and-options/order-by.md b/docs-2.0/3.ngql-guide/8.clauses-and-options/order-by.md index cb292966ada..dc4aa51a4d8 100644 --- a/docs-2.0/3.ngql-guide/8.clauses-and-options/order-by.md +++ b/docs-2.0/3.ngql-guide/8.clauses-and-options/order-by.md @@ -58,7 +58,7 @@ ORDER BY [ASC | DESC] [, [ASC | DESC] ...]; ### 示例 ```ngql -nebula> MATCH (v:player) RETURN v.name AS Name, v.age AS Age \ +nebula> MATCH (v:player) RETURN v.player.name AS Name, v.player.age AS Age \ ORDER BY Name DESC; +-----------------+-----+ | Name | Age | @@ -72,7 +72,7 @@ nebula> MATCH (v:player) RETURN v.name AS Name, v.age AS Age \ ... # 首先以年龄排序,如果年龄相同,再以姓名排序。 -nebula> MATCH (v:player) RETURN v.age AS Age, v.name AS Name \ +nebula> MATCH (v:player) RETURN v.player.age AS Age, v.player.name AS Name \ ORDER BY Age DESC, Name ASC; +-----+-------------------+ | Age | Name | @@ -91,7 +91,7 @@ nebula> MATCH (v:player) RETURN v.age AS Age, v.name AS Name \ ```ngql nebula> MATCH (v:player{name:"Tim Duncan"}) --> (v2) \ - RETURN v2.name AS Name, v2.age AS Age \ + RETURN v2.player.name AS Name, v2.player.age AS Age \ ORDER BY Age; +-----------------+--------------+ | Name | Age | @@ -102,7 +102,7 @@ nebula> MATCH (v:player{name:"Tim Duncan"}) --> (v2) \ +-----------------+--------------+ nebula> MATCH (v:player{name:"Tim Duncan"}) --> (v2) \ - RETURN v2.name AS Name, v2.age AS Age \ + RETURN v2.player.name AS Name, v2.player.age AS Age \ ORDER BY Age DESC; +-----------------+--------------+ | Name | Age | diff --git a/docs-2.0/3.ngql-guide/8.clauses-and-options/return.md b/docs-2.0/3.ngql-guide/8.clauses-and-options/return.md index cc2c373ea6c..62b0d0a05f6 100644 --- a/docs-2.0/3.ngql-guide/8.clauses-and-options/return.md +++ b/docs-2.0/3.ngql-guide/8.clauses-and-options/return.md @@ -94,15 +94,15 @@ nebula> MATCH (v:player)-[e]->() \ ```ngql nebula> MATCH (v:player) \ - RETURN v.name, v.age \ + RETURN v.player.name, v.player.age \ LIMIT 3; -+-------------------+-------+ -| v.name | v.age | -+-------------------+-------+ -| "Rajon Rondo" | 33 | -| "Rudy Gay" | 32 | -| "Dejounte Murray" | 29 | -+-------------------+-------+ ++------------------+--------------+ +| v.player.name | v.player.age | ++------------------+--------------+ +| "Danny Green" | 31 | +| "Tiago Splitter" | 34 | +| "David West" | 38 | ++------------------+--------------+ ``` ## 返回所有元素 @@ -135,7 +135,7 @@ nebula> MATCH (v:player{name:"Tim Duncan"})-[e]->(v2) \ ```ngql nebula> MATCH (v:player{name:"Tim Duncan"})-[:serve]->(v2) \ - RETURN v2.name AS Team; + RETURN v2.team.name AS Team; +---------+ | Team | +---------+ @@ -156,14 +156,14 @@ nebula> RETURN "Amber" AS Name; ```ngql nebula> MATCH (v:player{name:"Tim Duncan"})-[e]->(v2) \ - RETURN v2.name, type(e), v2.age; -+-----------------+----------+--------------+ -| v2.name | type(e) | v2.age | -+-----------------+----------+--------------+ -| "Tony Parker" | "follow" | 36 | -| "Manu Ginobili" | "follow" | 41 | -| "Spurs" | "serve" | UNKNOWN_PROP | -+-----------------+----------+--------------+ + RETURN v2.player.name, type(e), v2.player.age; ++-----------------+----------+---------------+ +| v2.player.name | type(e) | v2.player.age | ++-----------------+----------+---------------+ +| "Manu Ginobili" | "follow" | 41 | +| __NULL__ | "serve" | __NULL__ | +| "Tony Parker" | "follow" | 36 | ++-----------------+----------+---------------+ ``` ## 返回表达式结果 @@ -172,14 +172,14 @@ nebula> MATCH (v:player{name:"Tim Duncan"})-[e]->(v2) \ ```ngql nebula> MATCH (v:player{name:"Tony Parker"})-->(v2:player) \ - RETURN DISTINCT v2.name, "Hello"+" graphs!", v2.age > 35; -+---------------------+----------------------+-------------+ -| v2.name | ("Hello"+" graphs!") | (v2.age>35) | -+---------------------+----------------------+-------------+ -| "Tim Duncan" | "Hello graphs!" | true | -| "LaMarcus Aldridge" | "Hello graphs!" | false | -| "Manu Ginobili" | "Hello graphs!" | true | -+---------------------+----------------------+-------------+ + RETURN DISTINCT v2.player.name, "Hello"+" graphs!", v2.player.age > 35; ++---------------------+----------------------+--------------------+ +| v2.player.name | ("Hello"+" graphs!") | (v2.player.age>35) | ++---------------------+----------------------+--------------------+ +| "LaMarcus Aldridge" | "Hello graphs!" | false | +| "Tim Duncan" | "Hello graphs!" | true | +| "Manu Ginobili" | "Hello graphs!" | true | ++---------------------+----------------------+--------------------+ nebula> RETURN 1+1; +-------+ @@ -210,7 +210,7 @@ nebula> RETURN 1+1, rand32(1, 5); ```ngql # 未使用 DISTINCT。 nebula> MATCH (v:player{name:"Tony Parker"})--(v2:player) \ - RETURN v2.name, v2.age; + RETURN v2.player.name, v2.player.age; +---------------------+--------+ | v2.name | v2.age | +---------------------+--------+ @@ -226,7 +226,7 @@ nebula> MATCH (v:player{name:"Tony Parker"})--(v2:player) \ # 使用 DISTINCT。 nebula> MATCH (v:player{name:"Tony Parker"})--(v2:player) \ - RETURN DISTINCT v2.name, v2.age; + RETURN DISTINCT v2.player.name, v2.player.age; +---------------------+--------+ | v2.name | v2.age | +---------------------+--------+ diff --git a/docs-2.0/3.ngql-guide/8.clauses-and-options/where.md b/docs-2.0/3.ngql-guide/8.clauses-and-options/where.md index 49b204699a1..729e7976d51 100644 --- a/docs-2.0/3.ngql-guide/8.clauses-and-options/where.md +++ b/docs-2.0/3.ngql-guide/8.clauses-and-options/where.md @@ -25,19 +25,16 @@ ```ngql nebula> MATCH (v:player) \ - WHERE v.name == "Tim Duncan" \ - XOR (v.age < 30 AND v.name == "Yao Ming") \ - OR NOT (v.name == "Yao Ming" OR v.name == "Tim Duncan") \ - RETURN v.name, v.age; -+-------------------------+-------+ -| v.name | v.age | -+-------------------------+-------+ -| "Marco Belinelli" | 32 | -| "Aron Baynes" | 32 | -| "LeBron James" | 34 | -| "James Harden" | 29 | -| "Manu Ginobili" | 41 | -+-------------------------+-------+ + WHERE v.player.name == "Tim Duncan" \ + XOR (v.player.age < 30 AND v.player.name == "Yao Ming") \ + OR NOT (v.player.name == "Yao Ming" OR v.player.name == "Tim Duncan") \ + RETURN v.player.name, v.player.age; ++-------------------------+--------------+ +| v.player.name | v.player.age | ++-------------------------+--------------+ +| "Danny Green" | 31 | +| "Tiago Splitter" | 34 | +| "David West" | 38 | ... ``` @@ -63,15 +60,15 @@ nebula> GO FROM "player100" \ ```ngql nebula> MATCH (v:player)-[e]->(v2) \ - WHERE v2.age < 25 \ - RETURN v2.name, v2.age; - +----------------------+--------+ - | v2.name | v2.age | - +----------------------+--------+ - | "Luka Doncic" | 20 | - | "Kristaps Porzingis" | 23 | - | "Ben Simmons" | 22 | - +----------------------+--------+ + WHERE v2.player.age < 25 \ + RETURN v2.player.name, v2.player.age; + +----------------------+---------------+ + | v2.player.name | v2.player.age | + +----------------------+---------------+ + | "Ben Simmons" | 22 | + | "Luka Doncic" | 20 | + | "Kristaps Porzingis" | 23 | + +----------------------+---------------+ ``` ```ngql @@ -91,16 +88,13 @@ nebula> GO FROM "player100" \ ```ngql nebula> MATCH (v:player)-[e]->() \ WHERE e.start_year < 2000 \ - RETURN DISTINCT v.name, v.age; - +--------------------+-------+ - | v.name | v.age | - +--------------------+-------+ - | "Shaquille O'Neal" | 47 | - | "Steve Nash" | 45 | - | "Ray Allen" | 43 | - | "Grant Hill" | 46 | - | "Tony Parker" | 36 | - +--------------------+-------+ + RETURN DISTINCT v.player.name, v.player.age; + +--------------------+--------------+ + | v.player.name | v.player.age | + +--------------------+--------------+ + | "Tony Parker" | 36 | + | "Tim Duncan" | 42 | + | "Grant Hill" | 46 | ... ``` @@ -121,7 +115,7 @@ nebula> GO FROM "player100" \ ```ngql nebula> MATCH (v:player) \ WHERE v[toLower("AGE")] < 21 \ - RETURN v.name, v.age; + RETURN v.player.name, v.player.age; +---------------+-------+ | v.name | v.age | +---------------+-------+ @@ -133,14 +127,14 @@ nebula> MATCH (v:player) \ ```ngql nebula> MATCH (v:player) \ - WHERE exists(v.age) \ - RETURN v.name, v.age; -+-------------------------+-------+ -| v.name | v.age | -+-------------------------+-------+ -| "Boris Diaw" | 36 | -| "DeAndre Jordan" | 30 | -+-------------------------+-------+ + WHERE exists(v.player.age) \ + RETURN v.player.name, v.player.age; ++-------------------------+--------------+ +| v.player.name | v.player.age | ++-------------------------+--------------+ +| "Danny Green" | 31 | +| "Tiago Splitter" | 34 | +| "David West" | 38 | ... ``` @@ -191,24 +185,24 @@ nebula> GO FROM "1" \ ```ngql # 查询姓名以 T 开头的 player 信息。 nebula> MATCH (v:player) \ - WHERE v.name STARTS WITH "T" \ - RETURN v.name, v.age; -+------------------+-------+ -| v.name | v.age | -+------------------+-------+ -| "Tracy McGrady" | 39 | -| "Tony Parker" | 36 | -| "Tim Duncan" | 42 | -| "Tiago Splitter" | 34 | -+------------------+-------+ + WHERE v.player.name STARTS WITH "T" \ + RETURN v.player.name, v.player.age; ++------------------+--------------+ +| v.player.name | v.player.age | ++------------------+--------------+ +| "Tony Parker" | 36 | +| "Tiago Splitter" | 34 | +| "Tim Duncan" | 42 | +| "Tracy McGrady" | 39 | ++------------------+--------------+ ``` 如果使用小写`t`(`STARTS WITH "t"`),会返回空集,因为数据库中没有以小写`t`开头的姓名。 ```ngql nebula> MATCH (v:player) \ - WHERE v.name STARTS WITH "t" \ - RETURN v.name, v.age; + WHERE v.player.name STARTS WITH "t" \ + RETURN v.player.name, v.player.age; Empty set (time spent 5080/6474 us) ``` @@ -218,15 +212,15 @@ Empty set (time spent 5080/6474 us) ```ngql nebula> MATCH (v:player) \ - WHERE v.name ENDS WITH "r" \ - RETURN v.name, v.age; -+------------------+-------+ -| v.name | v.age | -+------------------+-------+ -| "Vince Carter" | 42 | -| "Tony Parker" | 36 | -| "Tiago Splitter" | 34 | -+------------------+-------+ + WHERE v.player.name ENDS WITH "r" \ + RETURN v.player.name, v.player.age; ++------------------+--------------+ +| v.player.name | v.player.age | ++------------------+--------------+ +| "Tony Parker" | 36 | +| "Tiago Splitter" | 34 | +| "Vince Carter" | 42 | ++------------------+--------------+ ``` ### `CONTAINS` @@ -235,16 +229,16 @@ nebula> MATCH (v:player) \ ```ngql nebula> MATCH (v:player) \ - WHERE v.name CONTAINS "Pa" \ - RETURN v.name, v.age; -+---------------+-------+ -| v.name | v.age | -+---------------+-------+ -| "Paul George" | 28 | -| "Tony Parker" | 36 | -| "Paul Gasol" | 38 | -| "Chris Paul" | 33 | -+---------------+-------+ + WHERE v.player.name CONTAINS "Pa" \ + RETURN v.player.name, v.player.age; ++---------------+--------------+ +| v.player.name | v.player.age | ++---------------+--------------+ +| "Paul George" | 28 | +| "Tony Parker" | 36 | +| "Paul Gasol" | 38 | +| "Chris Paul" | 33 | ++---------------+--------------+ ``` ### 结合 NOT 使用 @@ -253,17 +247,15 @@ nebula> MATCH (v:player) \ ```ngql nebula> MATCH (v:player) \ - WHERE NOT v.name ENDS WITH "R" \ - RETURN v.name, v.age; -+-------------------------+-------+ -| v.name | v.age | -+-------------------------+-------+ -| "Rajon Rondo" | 33 | -| "Rudy Gay" | 32 | -| "Dejounte Murray" | 29 | -| "Chris Paul" | 33 | -| "Carmelo Anthony" | 34 | -+-------------------------+-------+ + WHERE NOT v.player.name ENDS WITH "R" \ + RETURN v.player.name, v.player.age; ++-------------------------+--------------+ +| v.player.name | v.player.age | ++-------------------------+--------------+ +| "Danny Green" | 31 | +| "Tiago Splitter" | 34 | +| "David West" | 38 | +| "Russell Westbrook" | 30 | ... ``` @@ -289,18 +281,18 @@ nebula> MATCH (v:player) \ ```ngql nebula> MATCH (v:player) \ - WHERE v.age IN range(20,25) \ - RETURN v.name, v.age; -+-------------------------+-------+ -| v.name | v.age | -+-------------------------+-------+ -| "Ben Simmons" | 22 | -| "Kristaps Porzingis" | 23 | -| "Luka Doncic" | 20 | -| "Kyle Anderson" | 25 | -| "Giannis Antetokounmpo" | 24 | -| "Joel Embiid" | 25 | -+-------------------------+-------+ + WHERE v.player.age IN range(20,25) \ + RETURN v.player.name, v.player.age; ++-------------------------+--------------+ +| v.player.name | v.player.age | ++-------------------------+--------------+ +| "Ben Simmons" | 22 | +| "Giannis Antetokounmpo" | 24 | +| "Kyle Anderson" | 25 | +| "Joel Embiid" | 25 | +| "Kristaps Porzingis" | 23 | +| "Luka Doncic" | 20 | ++-------------------------+--------------+ nebula> LOOKUP ON player \ WHERE player.age IN [25,28] \ @@ -320,8 +312,8 @@ nebula> LOOKUP ON player \ ```ngql nebula> MATCH (v:player) \ - WHERE v.age NOT IN range(20,25) \ - RETURN v.name AS Name, v.age AS Age \ + WHERE v.player.age NOT IN range(20,25) \ + RETURN v.player.name AS Name, v.player.age AS Age \ ORDER BY Age; +---------------------+-----+ | Name | Age | @@ -331,6 +323,5 @@ nebula> MATCH (v:player) \ | "Damian Lillard" | 28 | | "Paul George" | 28 | | "Ricky Rubio" | 28 | -+---------------------+-----+ ... ``` diff --git a/docs-2.0/3.ngql-guide/8.clauses-and-options/with.md b/docs-2.0/3.ngql-guide/8.clauses-and-options/with.md index cc9f36fc29b..7dafd33d135 100644 --- a/docs-2.0/3.ngql-guide/8.clauses-and-options/with.md +++ b/docs-2.0/3.ngql-guide/8.clauses-and-options/with.md @@ -70,10 +70,10 @@ nebula> MATCH (v) \ ```ngql nebula> MATCH (v:player)-->(v2:player) \ - WITH DISTINCT v2 AS v2, v2.age AS Age \ + WITH DISTINCT v2 AS v2, v2.player.age AS Age \ ORDER BY Age \ WHERE Age<25 \ - RETURN v2.name AS Name, Age; + RETURN v2.player.name AS Name, Age; +----------------------+-----+ | Name | Age | +----------------------+-----+ @@ -89,7 +89,7 @@ nebula> MATCH (v:player)-->(v2:player) \ ```ngql nebula> MATCH (v:player) \ - WITH v.name AS Name \ + WITH v.player.name AS Name \ ORDER BY Name DESC \ LIMIT 3 \ RETURN collect(Name); From 7c5a375aa0c2be5767f5d05f107a4199361dbe39 Mon Sep 17 00:00:00 2001 From: randomJoe211 <69501902+randomJoe211@users.noreply.github.com> Date: Fri, 7 Jan 2022 17:37:41 +0800 Subject: [PATCH 29/33] Add space level metrics (#1365) --- .../1.configurations/3.graph-config.md | 6 ++++++ .../1.query-performance-metrics.md | 10 ++++++++++ 2 files changed, 16 insertions(+) diff --git a/docs-2.0/5.configurations-and-logs/1.configurations/3.graph-config.md b/docs-2.0/5.configurations-and-logs/1.configurations/3.graph-config.md index 608d18e1487..a276958f17e 100644 --- a/docs-2.0/5.configurations-and-logs/1.configurations/3.graph-config.md +++ b/docs-2.0/5.configurations-and-logs/1.configurations/3.graph-config.md @@ -99,6 +99,12 @@ Graph 服务提供了两份初始配置文件`nebula-graphd.conf.default`和`neb | ------------------- | ------------------------ | ------------------------------------------ | | `system_memory_high_watermark_ratio` | - |内存高水位报警机制的触发阈值,默认为`0.9`。系统内存占用率高于该值会触发报警机制,Nebula Graph 会停止接受查询。| +## metrics 配置 + +| 名称 | 预设值 | 说明 | +| ------------------- | ------------------------ | ------------------------------------------ | +| `enable_space_level_metrics` | `false` | 开启后可打开图空间级别的监控,对应的监控指标名称中包含图空间的名称,例如`query_latency_us{space=basketballplayer}.avg.3600`。支持的监控指标可用`curl`命令查看,详细说明参见[查询监控指标](../../6.monitor-and-metrics/1.query-performance-metrics.md)。 | + ## experimental 配置 | 名称 | 预设值 | 说明 | diff --git a/docs-2.0/6.monitor-and-metrics/1.query-performance-metrics.md b/docs-2.0/6.monitor-and-metrics/1.query-performance-metrics.md index cd55460bddc..49dea637ba0 100644 --- a/docs-2.0/6.monitor-and-metrics/1.query-performance-metrics.md +++ b/docs-2.0/6.monitor-and-metrics/1.query-performance-metrics.md @@ -12,6 +12,16 @@ Nebula Graph 的每个监控指标都由三个部分组成,中间用英文句 |统计类型|`sum`|指标统计的方法。当前支持 SUM、COUNT、AVG、RATE 和 P 分位数(P75、P95、P99、P99.9)。| |统计时间|`600`|指标统计的时间范围,当前支持 5 秒、60 秒、600 秒和 3600 秒,分别表示最近 5 秒、最近 1 分钟、最近 10 分钟和最近 1 小时。| +### 图空间监控指标 + +Graph 服务支持一系列基于图空间的监控指标(Space Level Metrics),对不同图空间的数据分别记录。 + +图空间指标的名称中以`{space=space_name}`的形式包含图空间名,例如`query_latency_us{space=basketballplayer}.avg.3600`。 + +如需开启图空间监控指标,先在 Graph 服务的配置文件中将`enable_space_level_metrics`参数的值修改为`true`,再启动 Nebula Graph。修改配置的详细方式参见[配置管理](../5.configurations-and-logs/1.configurations/1.configurations.md)。 + +支持的图空间指标可根据下方的说明用 `curl` 命令查询。 + ## 通过 HTTP 端口查询监控指标 ### 语法 From 392ad73d3dc5fcaecafb41aab0279a05ab7ed574 Mon Sep 17 00:00:00 2001 From: cooper-lzy <78672629+cooper-lzy@users.noreply.github.com> Date: Fri, 7 Jan 2022 17:39:08 +0800 Subject: [PATCH 30/33] Lookup subgraph format yield (#1359) * Lookup subgraph format yield * Update syntax Co-authored-by: randomJoe211 <69501902+randomJoe211@users.noreply.github.com> --- docs-2.0/3.ngql-guide/16.subgraph-and-path/1.get-subgraph.md | 4 ++-- docs-2.0/3.ngql-guide/7.general-query-statements/5.lookup.md | 5 +---- 2 files changed, 3 insertions(+), 6 deletions(-) diff --git a/docs-2.0/3.ngql-guide/16.subgraph-and-path/1.get-subgraph.md b/docs-2.0/3.ngql-guide/16.subgraph-and-path/1.get-subgraph.md index 00f98d1513a..7d594c56b8f 100644 --- a/docs-2.0/3.ngql-guide/16.subgraph-and-path/1.get-subgraph.md +++ b/docs-2.0/3.ngql-guide/16.subgraph-and-path/1.get-subgraph.md @@ -7,7 +7,7 @@ ```ngql GET SUBGRAPH [WITH PROP] [ STEPS] FROM {, ...} [{IN | OUT | BOTH} , ...] -[YIELD [VERTICES AS ] [,EDGES AS ]]; +YIELD [VERTICES AS ] [, EDGES AS ]; ``` - `WITH PROP`:展示属性。不添加本参数则隐藏属性。 @@ -18,7 +18,7 @@ GET SUBGRAPH [WITH PROP] [ STEPS] FROM {, ...} - `edge_type`:指定 Edge type。可以用`IN`、`OUT`和`BOTH`来指定起始点上该 Edge type 的方向。默认为`BOTH`。 -- `YIELD`:定义需要返回的输出。可以仅返回点或边。必须设置别名。不使用`YIELD`定义输出结果时,默认返回`_vertices`和`_edges`。 +- `YIELD`:定义需要返回的输出。可以仅返回点或边。必须设置别名。 !!! note diff --git a/docs-2.0/3.ngql-guide/7.general-query-statements/5.lookup.md b/docs-2.0/3.ngql-guide/7.general-query-statements/5.lookup.md index c054574976f..135cba75a5e 100644 --- a/docs-2.0/3.ngql-guide/7.general-query-statements/5.lookup.md +++ b/docs-2.0/3.ngql-guide/7.general-query-statements/5.lookup.md @@ -24,7 +24,7 @@ !!! compatibility "历史版本兼容性" - 在此前的版本中,如果用`LOOKUP`语句基于指定属性查询时该属性没有索引,系统将报错,而不会使用其它索引。 + 在 2.5.0 版本之前,如果用`LOOKUP`语句基于指定属性查询时该属性没有索引,系统将报错,而不会使用其它索引。 ## 前提条件 @@ -97,7 +97,6 @@ nebula> LOOKUP ON player \ +-------------+ | "player144" | | "player140" | -| "player111" | +-------------+ nebula> LOOKUP ON player \ @@ -107,10 +106,8 @@ nebula> LOOKUP ON player \ +-------------------------+------------------------+ | properties(VERTEX).name | properties(VERTEX).age | +-------------------------+------------------------+ -| "Blake Griffin" | 30 | | "Ben Simmons" | 22 | | "Blake Griffin" | 30 | -| "Ben Simmons" | 22 | +-------------------------+------------------------+ nebula> LOOKUP ON player \ From 9cafcbc023476d3e0918ad65b36bdbbbc122e718 Mon Sep 17 00:00:00 2001 From: cooper-lzy <78672629+cooper-lzy@users.noreply.github.com> Date: Tue, 11 Jan 2022 08:43:39 +0800 Subject: [PATCH 31/33] support delete in toss (#1368) --- .../1.configurations/3.graph-config.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs-2.0/5.configurations-and-logs/1.configurations/3.graph-config.md b/docs-2.0/5.configurations-and-logs/1.configurations/3.graph-config.md index a276958f17e..44afec77bc2 100644 --- a/docs-2.0/5.configurations-and-logs/1.configurations/3.graph-config.md +++ b/docs-2.0/5.configurations-and-logs/1.configurations/3.graph-config.md @@ -115,4 +115,4 @@ Graph 服务提供了两份初始配置文件`nebula-graphd.conf.default`和`neb | 名称 | 说明 | | ------------------- | ------------------------------------------| -|TOSS | TOSS(Transaction on Storage Side)功能,用于保证对边进行`INSERT`、`UPDATE`或`UPSERT`操作的最终一致性(因为逻辑上的一条边对应着硬盘上的两个键值对)。暂不支持`DELETE`操作。开启后会增加相关操作的时延约 1 倍。| +|TOSS | TOSS(Transaction on Storage Side)功能,用于保证对边进行`INSERT`、`UPDATE`、`UPSERT`或`DELETE`操作的最终一致性(因为逻辑上的一条边对应着硬盘上的两个键值对)。开启后会增加相关操作的时延约 1 倍。| From 7122425b0ebf2f0b246bb1fef23ac0e6d96d37f6 Mon Sep 17 00:00:00 2001 From: Anqi Date: Tue, 11 Jan 2022 08:44:32 +0800 Subject: [PATCH 32/33] update clickhouse config (#1367) --- .../use-exchange/ex-ug-import-from-clickhouse.md | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/docs-2.0/nebula-exchange/use-exchange/ex-ug-import-from-clickhouse.md b/docs-2.0/nebula-exchange/use-exchange/ex-ug-import-from-clickhouse.md index e004262850c..6bdb274e2b6 100644 --- a/docs-2.0/nebula-exchange/use-exchange/ex-ug-import-from-clickhouse.md +++ b/docs-2.0/nebula-exchange/use-exchange/ex-ug-import-from-clickhouse.md @@ -152,7 +152,8 @@ # ClickHouse 分区数 numPartition:"5" - + + table:"player" sentence:"select * from player" # 在 fields 里指定 player 表中的列名称,其对应的 value 会作为 Nebula Graph 中指定属性。 @@ -185,6 +186,7 @@ user:"user" password:"123456" numPartition:"5" + table:"team" sentence:"select * from team" fields: [name] nebula.fields: [name] @@ -220,7 +222,8 @@ # ClickHouse 分区数 numPartition:"5" - + + table:"follow" sentence:"select * from follow" # 在 fields 里指定 follow 表中的列名称,其对应的 value 会作为 Nebula Graph 中指定属性。 From fe1ea02eb74ca7aebaeffbfc0bc1ca17a85a0e16 Mon Sep 17 00:00:00 2001 From: foesa <35463247+foesa-yang@users.noreply.github.com> Date: Tue, 11 Jan 2022 10:11:37 +0800 Subject: [PATCH 33/33] ignore existed index and add keywords (#1370) * ignore existed index and add keywords * Update docs-2.0/3.ngql-guide/12.vertex-statements/1.insert-vertex.md Co-authored-by: cooper-lzy <78672629+cooper-lzy@users.noreply.github.com> * Update docs-2.0/3.ngql-guide/12.vertex-statements/1.insert-vertex.md Co-authored-by: cooper-lzy <78672629+cooper-lzy@users.noreply.github.com> * Update 1.insert-vertex.md Co-authored-by: cooper-lzy <78672629+cooper-lzy@users.noreply.github.com> --- .../keywords-and-reserved-words.md | 1 + .../12.vertex-statements/1.insert-vertex.md | 62 ++++++++++++++++++- 2 files changed, 61 insertions(+), 2 deletions(-) diff --git a/docs-2.0/3.ngql-guide/1.nGQL-overview/keywords-and-reserved-words.md b/docs-2.0/3.ngql-guide/1.nGQL-overview/keywords-and-reserved-words.md index ae5e8084472..6646747ace0 100644 --- a/docs-2.0/3.ngql-guide/1.nGQL-overview/keywords-and-reserved-words.md +++ b/docs-2.0/3.ngql-guide/1.nGQL-overview/keywords-and-reserved-words.md @@ -66,6 +66,7 @@ GET GO GRANT IF +IGNORE_EXISTED_INDEX IN INDEX INDEXES diff --git a/docs-2.0/3.ngql-guide/12.vertex-statements/1.insert-vertex.md b/docs-2.0/3.ngql-guide/12.vertex-statements/1.insert-vertex.md index 4c5bf8930d2..7809a69409a 100644 --- a/docs-2.0/3.ngql-guide/12.vertex-statements/1.insert-vertex.md +++ b/docs-2.0/3.ngql-guide/12.vertex-statements/1.insert-vertex.md @@ -9,7 +9,6 @@ ## 语法 ```ngql - INSERT VERTEX [IF NOT EXISTS] [tag_props, [tag_props] ...] VALUES VID: ([prop_value_list]) @@ -23,7 +22,31 @@ prop_value_list: [prop_value [, prop_value] ...] ``` -- `IF NOT EXISTS`:用户可以使用`IF NOT EXISTS`关键字检测待插入的 VID 是否存在,只有不存在时,才会插入,如果已经存在,不会进行修改。 + + + +- `IF NOT EXISTS`:检测待插入的 VID 是否存在,只有不存在时,才会插入,如果已经存在,不会进行修改。 !!! Note @@ -63,6 +86,41 @@ nebula> CREATE TAG IF NOT EXISTS t1(); nebula> INSERT VERTEX t1() VALUES "10":(); ``` + + ```ngql nebula> CREATE TAG IF NOT EXISTS t2 (name string, age int); nebula> INSERT VERTEX t2 (name, age) VALUES "11":("n1", 12);