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 df746f7afc..e9fd4024f9 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) diff --git a/docs-2.0/1.introduction/2.data-model.md b/docs-2.0/1.introduction/2.data-model.md index 2ab75d26e6..2318359cac 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/1.introduction/3.nebula-graph-architecture/4.storage-service.md b/docs-2.0/1.introduction/3.nebula-graph-architecture/4.storage-service.md index c0d37f1ae2..06f7faed24 100644 --- a/docs-2.0/1.introduction/3.nebula-graph-architecture/4.storage-service.md +++ b/docs-2.0/1.introduction/3.nebula-graph-architecture/4.storage-service.md @@ -152,7 +152,7 @@ EdgeA_Out 和 EdgeA_In 以方向相反的两条边的形式存在于存储层, 创建图空间时需指定分片数量,分片数量设置后无法修改,建议设置时提前满足业务将来的扩容需求。 -点和边分布在不同的分片,分片分布在不同的机器。分片数量在 CREATE SPACE 语句中指定,此后不可更改。 +多机集群部署时,分片分布在集群内的不同机器上。分片数量在 CREATE SPACE 语句中指定,此后不可更改。 如果需要将某些点放置在相同的分片(例如在一台机器上),可以参考[公式或代码](https://github.com/vesoft-inc/nebula-common/blob/master/src/common/clients/meta/MetaClient.cpp)。 diff --git a/docs-2.0/15.contribution/how-to-contribute.md b/docs-2.0/15.contribution/how-to-contribute.md index f681a7e280..d294da3b46 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)。 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 c51e78c9cb..9a00a30a17 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) | 边的类型,定义了一组描述边的类型的属性。 | @@ -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 语法 @@ -186,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 | VALUE} : ([, ...]) - [, : ([, ...]; + VALUES : ([[, ...]]); ``` `VID`是 Vertex ID 的缩写,`VID`在一个图空间中是唯一的。参数详情请参见 [INSERT VERTEX](../3.ngql-guide/12.vertex-statements/1.insert-vertex.md)。 @@ -198,7 +191,7 @@ nebula> CREATE EDGE serve(start_year int, end_year int); ```ngql INSERT EDGE [IF NOT EXISTS] ([, ...]) - {VALUES | VALUE} -> [@] : ([, ...]) + VALUES -> [@] : ([, ...]) [, -> [@] : ([, ...]), ...]; ``` @@ -248,7 +241,7 @@ nebula> CREATE EDGE serve(start_year int, end_year int); GO [[ TO] STEPS ] FROM OVER [{REVERSELY | BIDIRECT}] [ WHERE  ] - [YIELD [DISTINCT] ] + YIELD [DISTINCT] [{SAMPLE | LIMIT }] [| GROUP BY {col_name | expr | position} YIELD ] [| ORDER BY [{ASC | DESC}]] @@ -262,14 +255,14 @@ nebula> CREATE EDGE serve(start_year int, end_year int); ```ngql FETCH PROP ON {[, tag_name ...] | *} [, vid ...] - [YIELD [AS ]]; + YIELD [AS ]; ``` - 查询边属性 ```ngql FETCH PROP ON -> [@] [, -> ...] - [YIELD ]; + YIELD ; ``` - `LOOKUP` @@ -277,7 +270,7 @@ nebula> CREATE EDGE serve(start_year int, end_year int); ```ngql LOOKUP ON { | } [WHERE [AND ...]] - [YIELD [AS ]]; + YIELD [AS ]; ``` - `MATCH` @@ -291,12 +284,13 @@ nebula> CREATE EDGE serve(start_year int, end_year int); - 从 VID 为`player101`的球员开始,沿着边`follow`找到连接的球员。 ```ngql - nebula> GO FROM "player101" OVER follow; + nebula> GO FROM "player101" OVER follow YIELD id($$); +-------------+ - | follow._dst | + | id($$) | +-------------+ | "player100" | | "player102" | + | "player125" | +-------------+ ``` @@ -305,11 +299,12 @@ nebula> CREATE EDGE serve(start_year int, end_year int); ```ngql nebula> GO FROM "player101" OVER follow WHERE properties($$).age >= 35 \ YIELD properties($$).name AS Teammate, properties($$).age AS Age; - +--------------+-----+ - | Teammate | Age | - +--------------+-----+ - | "Tim Duncan" | 42 | - +--------------+-----+ + +-----------------+-----+ + | Teammate | Age | + +-----------------+-----+ + | "Tim Duncan" | 42 | + | "Manu Ginobili" | 41 | + +-----------------+-----+ ``` |子句/符号|说明| @@ -329,7 +324,10 @@ nebula> CREATE EDGE serve(start_year int, end_year int); +-----------------+---------------------+ | Team | Player | +-----------------+---------------------+ + | "Spurs" | "Tim Duncan" | | "Trail Blazers" | "LaMarcus Aldridge" | + | "Spurs" | "LaMarcus Aldridge" | + | "Spurs" | "Manu Ginobili" | +-----------------+---------------------+ ``` @@ -352,7 +350,10 @@ nebula> CREATE EDGE serve(start_year int, end_year int); +-----------------+---------------------+ | Team | Player | +-----------------+---------------------+ + | "Spurs" | "Tim Duncan" | | "Trail Blazers" | "LaMarcus Aldridge" | + | "Spurs" | "LaMarcus Aldridge" | + | "Spurs" | "Manu Ginobili" | +-----------------+---------------------+ ``` @@ -361,12 +362,12 @@ nebula> CREATE EDGE serve(start_year int, end_year int); 查询 VID 为`player100`的球员的属性。 ```ngql -nebula> FETCH PROP ON player "player100"; -+----------------------------------------------------+ -| vertices_ | -+----------------------------------------------------+ -| ("player100" :player{age: 42, name: "Tim Duncan"}) | -+----------------------------------------------------+ +nebula> FETCH PROP ON player "player100" YIELD properties(vertex); ++-------------------------------+ +| properties(VERTEX) | ++-------------------------------+ +| {age: 42, name: "Tim Duncan"} | ++-------------------------------+ ``` !!! Note @@ -413,12 +414,12 @@ nebula> FETCH PROP ON player "player100"; ```ngql nebula> UPDATE VERTEX "player100" SET player.name = "Tim"; - nebula> FETCH PROP ON player "player100"; - +---------------------------------------------+ - | vertices_ | - +---------------------------------------------+ - | ("player100" :player{age: 42, name: "Tim"}) | - +---------------------------------------------+ + nebula> FETCH PROP ON player "player100" YIELD properties(vertex); + +------------------------+ + | properties(VERTEX) | + +------------------------+ + | {age: 42, name: "Tim"} | + +------------------------+ ``` - 用`UPDATE`修改某条边的`degree`属性,然后用`FETCH`检查结果。 @@ -426,18 +427,18 @@ nebula> FETCH PROP ON player "player100"; ```ngql nebula> UPDATE EDGE "player101" -> "player100" OF follow SET degree = 96; - nebula> FETCH PROP ON follow "player101" -> "player100"; - +----------------------------------------------------+ - | edges_ | - +----------------------------------------------------+ - | [:follow "player101"->"player100" @0 {degree: 96}] | - +----------------------------------------------------+ + nebula> FETCH PROP ON follow "player101" -> "player100" YIELD properties(edge); + +------------------+ + | properties(EDGE) | + +------------------+ + | {degree: 96} | + +------------------+ ``` - 用`INSERT`插入一个 VID 为`player111`的点,然后用`UPSERT`更新它。 ```ngql - nebula> INSERT VERTEX player(name,age) values "player111":("David West", 38); + nebula> INSERT VERTEX player(name,age) VALUES "player111":("David West", 38); nebula> UPSERT VERTEX "player111" SET player.name = "David", player.age = $^.player.age + 11 \ WHEN $^.player.name == "David West" AND $^.player.age > 20 \ @@ -517,7 +518,7 @@ nebula> FETCH PROP ON player "player100"; ```nGQL // 为 name 属性创建索引 player_index_1。 -nebula> CREATE TAG INDEX player_index_1 ON player(name(20)); +nebula> CREATE TAG INDEX IF NOT EXISTS player_index_1 ON player(name(20)); // 重建索引确保能对已存在数据生效。 nebula> REBUILD TAG INDEX player_index_1 @@ -530,11 +531,11 @@ nebula> REBUILD TAG INDEX player_index_1 // 使用 LOOKUP 语句检索点的属性。 nebula> LOOKUP ON player WHERE player.name == "Tony Parker" \ YIELD properties(vertex).name AS name, properties(vertex).age AS age; -+-------------+---------------+-----+ -| VertexID | name | age | -+-------------+---------------+-----+ -| "player101" | "Tony Parker" | 36 | -+-------------+---------------+-----+ ++---------------+-----+ +| name | age | ++---------------+-----+ +| "Tony Parker" | 36 | ++---------------+-----+ // 使用 MATCH 语句检索点的属性。 nebula> MATCH (v:player{name:"Tony Parker"}) RETURN v; 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 ef3c87a61f..d0a7217451 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 @@ -15,7 +15,7 @@ | double hypot(double x, double y) | 返回直角三角形(直角边长为 x 和 y)的斜边长。 | | double pow(double x, double y) | 返回$x^y$的值。 | | double exp(double x) | 返回$e^x$的值。 | - | double exp2(double x) | 返回$2^x2$的值。 | + | double exp2(double x) | 返回$2^x$的值。 | | double log(double x) | 返回以自然数 e 为底 x 的对数。 | | double log2(double x) | 返回以 2 为底 x 的对数。 | | double log10(double x) | 返回以 10 为底 x 的对数。 | @@ -234,7 +234,7 @@ ``` LOOKUP ON { | } [WHERE [AND ...]] - [YIELD [AS ]] + YIELD [AS ] ``` | 模式 | 示例 | 说明 | @@ -254,7 +254,7 @@ GO [[ TO] STEPS ] FROM OVER [{REVERSELY | BIDIRECT}] [ WHERE ] - [YIELD [DISTINCT] ] + YIELD [DISTINCT] [| GROUP BY {col_name | expr | position} YIELD ] [| ORDER BY [{ASC | DESC}]] [| LIMIT [,] ] @@ -276,7 +276,7 @@ ``` FETCH PROP ON {[, tag_name ...] | *} [, vid ...] - [YIELD [AS ]] + YIELD [AS ] ``` | 示例 | 说明 | @@ -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 @@ -384,7 +384,7 @@ | 语句 | 语法 | 示例 | 说明 | | ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | -| [INSERT VERTEX](../3.ngql-guide/12.vertex-statements/1.insert-vertex.md) | `INSERT VERTEX [IF NOT EXISTS] () [, (), ...] {VALUES | VALUE} 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`,如果点存在,会修改点的属性值;如果点不存在,会插入新的点。 | @@ -393,7 +393,7 @@ | 语句 | 语法 | 示例 | 说明 | | ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | -| [INSERT EDGE](../3.ngql-guide/13.edge-statements/1.insert-edge.md) | `INSERT EDGE [IF NOT EXISTS] ( ) {VALUES | VALUE} -> [@] : ( ) [, -> [@] : ( ), ...]` | `INSERT EDGE e2 (name, age) VALUES "11"->"13":("n1", 1)` | 在 Nebula Graph 实例的指定图空间中插入一条或多条边。 | +| [INSERT EDGE](../3.ngql-guide/13.edge-statements/1.insert-edge.md) | `INSERT EDGE [IF NOT EXISTS] ( ) VALUES -> [@] : ( ) [, -> [@] : ( ), ...]` | `INSERT EDGE e2 (name, age) VALUES "11"->"13":("n1", 1)` | 在 Nebula Graph 实例的指定图空间中插入一条或多条边。 | | [DELETE EDGE](../3.ngql-guide/12.vertex-statements/3.upsert-vertex.md) | `DELETE EDGE -> [@] [, -> [@] ...]` | `DELETE EDGE serve "player100" -> "team204"@0` | 删除边。一次可以删除一条或多条边。 | | [UPDATE EDGE](../3.ngql-guide/13.edge-statements/2.update-edge.md) | `UPDATE EDGE ON -> [@] SET [WHEN ] [YIELD ]` | `UPDATE EDGE ON serve "player100" -> "team204"@0 SET start_year = start_year + 1` | 修改边上 Edge type 的属性。 | | [UPSERT EDGE](../3.ngql-guide/12.vertex-statements/3.upsert-vertex.md) | `UPSERT EDGE ON -> [@rank] SET [WHEN ] [YIELD ]` | `UPSERT EDGE on serve "player666" -> "team200"@0 SET end_year = 2021` | 结合`UPDATE`和`INSERT`,如果边存在,会更新边的属性;如果边不存在,会插入新的边。 | diff --git a/docs-2.0/20.appendix/0.FAQ.md b/docs-2.0/20.appendix/0.FAQ.md index 9d67b34e0d..e35672cf3e 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.` @@ -69,6 +69,10 @@ Nebula Graph {{ nebula.release }} 的数据模型中,异常情况下可能会 已知问题,通常需要重试 1-N 次 (N==partition 数量)。原因为 meta client 更新 leader 缓存需要 1-2 个心跳或者通过错误触发强制更新。 +### 如何处理错误信息 `SemanticError: Missing yield clause.` + +从 Nebula Graph 3.0 开始,查询语句`LOOKUP`、`GO`、`FETCH`必须用`YIELD`子句指定输出结果。详情请参见[YIELD](../3.ngql-guide/8.clauses-and-options/yield.md)。 + ### 返回消息中 `time spent` 的含义是什么? 将命令`SHOW SPACES`返回的消息作为示例: @@ -232,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)。 ### 获取指定点的出度(或者入度)? @@ -322,7 +322,7 @@ storaged 扩缩容之后,还需要运行 [Balance Data 和 Balance Leader 命 ## 关于连接 -### 防火墙中需要开放哪些端口 +### 防火墙中需要开放哪些端口? 如果没有修改过[配置文件](../5.configurations-and-logs/1.configurations/1.configurations.md) 中预设的端口,请在防火墙中开放如下端口: @@ -336,7 +336,7 @@ storaged 扩缩容之后,还需要运行 [Balance Data 和 Balance Leader 命 周边工具各自使用不用的端口,请参考各工具文档。 -### 如何测试端口是否已开放 +### 如何测试端口是否已开放? 用户可以使用如下 telnet 命令检查端口状态: @@ -362,3 +362,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))购买并更换新的证书。 | 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 9e31c6c8fa..14f2916aba 100644 --- a/docs-2.0/20.appendix/6.eco-tool-version.md +++ b/docs-2.0/20.appendix/6.eco-tool-version.md @@ -81,7 +81,7 @@ Nebula Exchange(简称 Exchange)是一款 Apache Spark™ 应用,用 |Nebula Graph 版本|Exchange 社区版版本(commit id)|Exchange 企业版版本(commit id)| |:---|:---|:--| -| {{ nebula.release }} | {{exchange.release}}(e6d8601) |{{exchange_ent.release}}(9c54c97) | +| {{ nebula.release }} | {{exchange.release}}(e6d8601) |{{exchange_ent.release}}(8712390) | ## Nebula Operator @@ -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/20.appendix/learning-path.png b/docs-2.0/20.appendix/learning-path.png index cf504b7eda..9eef99cd37 100644 Binary files a/docs-2.0/20.appendix/learning-path.png and b/docs-2.0/20.appendix/learning-path.png differ 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 4ea2605b33..385b560055 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,10 +97,10 @@ 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 用于定义点的一种类型及相应的属性,无索引功能。 | -| 预编译与参数化查询 | 支持 | 不支持 | +| 预编译与参数化查询 | 支持 | 仅支持参数化查询。 | !!! compatibility 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 2686ced70a..e6298b81c0 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/1.nGQL-overview/keywords-and-reserved-words.md b/docs-2.0/3.ngql-guide/1.nGQL-overview/keywords-and-reserved-words.md index f5a773fb87..d13eca7117 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 @@ -17,11 +17,13 @@ Execution succeeded nebula> CREATE TAG SPACE(name string); Execution succeeded -``` -- `TAG`是保留关键字,要将`TAG`作为标识符,用户必须使用反引号(\`)括起来。 +nebula> CREATE TAG 中文(简体 string); +Execution succeeded -- `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 2295bfef21..cd79ce64cd 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 名称由大小写英文字母、数字或下划线组成,区分大写小,且不可使用[关键字和保留字](../../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`。| @@ -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 7cb673ba2c..ee55d93f31 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/10.tag-statements/6.delete-tag.md b/docs-2.0/3.ngql-guide/10.tag-statements/6.delete-tag.md index 546ab020a2..c2ae2e9ae6 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)。 @@ -28,26 +22,27 @@ DELETE TAG FROM ; nebula> CREATE TAG IF NOT EXISTS test1(p1 string, p2 int); nebula> CREATE TAG IF NOT EXISTS test2(p3 string, p4 int); nebula> INSERT VERTEX test1(p1, p2),test2(p3, p4) VALUES "test":("123", 1, "456", 2); -nebula> FETCH PROP ON * "test"; +nebula> FETCH PROP ON * "test" YIELD vertex AS v; +------------------------------------------------------------+ -| vertices_ | +| v | +------------------------------------------------------------+ -| ("test" :test2{p3: "456", p4: 2} :test1{p1: "123", p2: 1}) | +| ("test" :test1{p1: "123", p2: 1} :test2{p3: "456", p4: 2}) | +------------------------------------------------------------+ nebula> DELETE TAG test1 FROM "test"; -nebula> FETCH PROP ON * "test"; +nebula> FETCH PROP ON * "test" YIELD vertex AS v; +-----------------------------------+ -| vertices_ | +| v | +-----------------------------------+ | ("test" :test2{p3: "456", p4: 2}) | +-----------------------------------+ nebula> DELETE TAG * FROM "test"; -nebula> FETCH PROP ON * "test"; -+-----------+ -| vertices_ | -+-----------+ +nebula> FETCH PROP ON * "test" YIELD vertex AS v; ++---+ +| v | ++---+ ++---+ ``` !!! Compatibility 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 9ad2c1c1fd..2a94deb14f 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。 @@ -29,9 +25,9 @@ nebula> MATCH (v:shareholder) RETURN v; | ("player100" :player{age: 42, name: "Tim Duncan"} :shareholder{}) | | ("player101" :player{age: 36, name: "Tony Parker"} :shareholder{}) | +---------------------------------------------------------------------+ -nebula> LOOKUP ON shareholder; +nebula> LOOKUP ON shareholder YIELD id(vertex); +-------------+ -| VertexID | +| id(VERTEX) | +-------------+ | "player100" | | "player101" | @@ -39,9 +35,9 @@ nebula> LOOKUP ON shareholder; //如果 player100 不再是股东 nebula> DELETE TAG shareholder FROM "player100"; -nebula> LOOKUP ON shareholder; +nebula> LOOKUP ON shareholder YIELD id(vertex); +-------------+ -| VertexID | +| id(VERTEX) | +-------------+ | "player101" | +-------------+ 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 a966ad87df..2800e143b5 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 名称由大小写英文字母、数字或下划线组成,区分大写小,且不可使用[关键字和保留字](../../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/11.edge-type-statements/3.alter-edge.md b/docs-2.0/3.ngql-guide/11.edge-type-statements/3.alter-edge.md index e7575eee34..a52ee12d09 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/12.vertex-statements/1.insert-vertex.md b/docs-2.0/3.ngql-guide/12.vertex-statements/1.insert-vertex.md index b6ad732c32..4c5bf8930d 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 | VALUE} 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 中的数据类型不匹配,会返回错误。如果没有填写属性值,而 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,9 +55,12 @@ prop_value_list: ## 示例 ```ngql +# 插入不包含 Tag 的点。 +nebula> INSERT VERTEX VALUES "1":(); + # 插入不包含属性的点。 nebula> CREATE TAG IF NOT EXISTS t1(); -nebula> INSERT VERTEX t1() VALUE "10":(); +nebula> INSERT VERTEX t1() VALUES "10":(); ``` ```ngql @@ -78,12 +89,12 @@ nebula> INSERT VERTEX t3 (p1), t4(p2) VALUES "21": (321, "hello"); nebula> INSERT VERTEX t2 (name, age) VALUES "11":("n2", 13); nebula> INSERT VERTEX t2 (name, age) VALUES "11":("n3", 14); nebula> INSERT VERTEX t2 (name, age) VALUES "11":("n4", 15); -nebula> FETCH PROP ON t2 "11"; -+---------------------------------+ -| vertices_ | -+---------------------------------+ -| ("11" :t2{age: 15, name: "n4"}) | -+---------------------------------+ +nebula> FETCH PROP ON t2 "11" YIELD properties(vertex); ++-----------------------+ +| properties(VERTEX) | ++-----------------------+ +| {age: 15, name: "n4"} | ++-----------------------+ ``` ```ngql @@ -96,21 +107,21 @@ nebula> INSERT VERTEX t5(p1, p2, p3) VALUES "002":(NULL, 4, 5); # 属性 p3 为默认值 NULL。 nebula> INSERT VERTEX t5(p1, p2) VALUES "003":("cd", 5); -nebula> FETCH PROP ON t5 "003"; -+--------------------------------------------+ -| vertices_ | -+--------------------------------------------+ -| ("003" :t5{p1: "cd", p2: 5, p3: __NULL__}) | -+--------------------------------------------+ +nebula> FETCH PROP ON t5 "003" YIELD properties(vertex); ++---------------------------------+ +| properties(VERTEX) | ++---------------------------------+ +| {p1: "cd", p2: 5, p3: __NULL__} | ++---------------------------------+ # 属性 p1 最大长度为 5,因此会被截断。 nebula> INSERT VERTEX t5(p1, p2) VALUES "004":("shalalalala", 4); -nebula> FETCH PROP on t5 "004"; -+-----------------------------------------------+ -| vertices_ | -+-----------------------------------------------+ -| ("004" :t5{p1: "shala", p2: 4, p3: __NULL__}) | -+-----------------------------------------------+ +nebula> FETCH PROP on t5 "004" YIELD properties(vertex); ++------------------------------------+ +| properties(VERTEX) | ++------------------------------------+ +| {p1: "shala", p2: 4, p3: __NULL__} | ++------------------------------------+ ``` 使用`IF NOT EXISTS`插入已存在的点时,不会进行修改。 @@ -118,12 +129,13 @@ nebula> FETCH PROP on t5 "004"; ```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"; -+--------------------------------+ -| vertices_ | -+--------------------------------+ -| ("1" :t2{age: 13, name: "n2"}) | -+--------------------------------+ +nebula> FETCH PROP ON t2 "1" YIELD properties(vertex); ++-----------------------+ +| properties(VERTEX) | ++-----------------------+ +| {age: 13, name: "n2"} | ++-----------------------+ ``` diff --git a/docs-2.0/3.ngql-guide/12.vertex-statements/2.update-vertex.md b/docs-2.0/3.ngql-guide/12.vertex-statements/2.update-vertex.md index a5ed3c1447..2a38b292df 100644 --- a/docs-2.0/3.ngql-guide/12.vertex-statements/2.update-vertex.md +++ b/docs-2.0/3.ngql-guide/12.vertex-statements/2.update-vertex.md @@ -29,12 +29,12 @@ SET ```ngql // 查看点”player101“的属性。 -nebula> FETCH PROP ON player "player101"; -+-----------------------------------------------------+ -| vertices_ | -+-----------------------------------------------------+ -| ("player101" :player{age: 36, name: "Tony Parker"}) | -+-----------------------------------------------------+ +nebula> FETCH PROP ON player "player101" YIELD properties(vertex); ++--------------------------------+ +| properties(VERTEX) | ++--------------------------------+ +| {age: 36, name: "Tony Parker"} | ++--------------------------------+ // 修改属性 age 的值,并返回 name 和新的 age。 nebula> UPDATE VERTEX ON player "player101" \ diff --git a/docs-2.0/3.ngql-guide/12.vertex-statements/3.upsert-vertex.md b/docs-2.0/3.ngql-guide/12.vertex-statements/3.upsert-vertex.md index 05951c2e86..4873fdbaf5 100644 --- a/docs-2.0/3.ngql-guide/12.vertex-statements/3.upsert-vertex.md +++ b/docs-2.0/3.ngql-guide/12.vertex-statements/3.upsert-vertex.md @@ -56,10 +56,11 @@ SET ```ngql // 查看三个点是否存在,结果 “Empty set” 表示顶点不存在。 -nebula> FETCH PROP ON * "player666", "player667", "player668"; -+-----------+ -| vertices_ | -+-----------+ +nebula> FETCH PROP ON * "player666", "player667", "player668" YIELD properties(vertex); ++--------------------+ +| properties(VERTEX) | ++--------------------+ ++--------------------+ Empty set nebula> UPSERT VERTEX ON player "player666" \ @@ -123,12 +124,12 @@ nebula> UPSERT VERTEX ON player_with_default "player101" \ 如果点存在,且满足`WHEN`子句的条件,就会修改点的属性值。 ```ngql -nebula> FETCH PROP ON player "player101"; -+-----------------------------------------------------+ -| vertices_ | -+-----------------------------------------------------+ -| ("player101" :player{age: 42, name: "Tony Parker"}) | -+-----------------------------------------------------+ +nebula> FETCH PROP ON player "player101" YIELD properties(vertex); ++--------------------------------+ +| properties(VERTEX) | ++--------------------------------+ +| {age: 36, name: "Tony Parker"} | ++--------------------------------+ nebula> UPSERT VERTEX ON player "player101" \ SET age = age + 2 \ @@ -137,19 +138,19 @@ nebula> UPSERT VERTEX ON player "player101" \ +---------------+-----+ | Name | Age | +---------------+-----+ -| "Tony Parker" | 44 | +| "Tony Parker" | 38 | +---------------+-----+ ``` 如果点存在,但是不满足`WHEN`子句的条件,修改不会生效。 ```ngql -nebula> FETCH PROP ON player "player101"; -+-----------------------------------------------------+ -| vertices_ | -+-----------------------------------------------------+ -| ("player101" :player{age: 44, name: "Tony Parker"}) | -+-----------------------------------------------------+ +nebula> FETCH PROP ON player "player101" YIELD properties(vertex); ++--------------------------------+ +| properties(VERTEX) | ++--------------------------------+ +| {age: 38, name: "Tony Parker"} | ++--------------------------------+ nebula> UPSERT VERTEX ON player "player101" \ SET age = age + 2 \ @@ -158,6 +159,6 @@ nebula> UPSERT VERTEX ON player "player101" \ +---------------+-----+ | Name | Age | +---------------+-----+ -| "Tony Parker" | 44 | +| "Tony Parker" | 38 | +---------------+-----+ ``` \ No newline at end of file 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 b831f80461..7edbcfcbb2 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 diff --git a/docs-2.0/3.ngql-guide/13.edge-statements/1.insert-edge.md b/docs-2.0/3.ngql-guide/13.edge-statements/1.insert-edge.md index ea99dbff11..67888bfbbc 100644 --- a/docs-2.0/3.ngql-guide/13.edge-statements/1.insert-edge.md +++ b/docs-2.0/3.ngql-guide/13.edge-statements/1.insert-edge.md @@ -7,7 +7,7 @@ ## 语法 ```ngql -INSERT EDGE [IF NOT EXISTS] ( ) {VALUES | VALUE} +INSERT EDGE [IF NOT EXISTS] ( ) VALUES -> [@] : ( ) [, -> [@] : ( ), ...]; @@ -71,9 +71,9 @@ nebula> INSERT EDGE e2 (name, age) VALUES "11"->"13":("n1", "a13"); nebula> INSERT EDGE e2 (name, age) VALUES "11"->"13":("n1", 12); nebula> INSERT EDGE e2 (name, age) VALUES "11"->"13":("n1", 13); nebula> INSERT EDGE e2 (name, age) VALUES "11"->"13":("n1", 14); -nebula> FETCH PROP ON e2 "11"->"13"; +nebula> FETCH PROP ON e2 "11"->"13" YIELD edge AS e; +-------------------------------------------+ -| edges_ | +| e | +-------------------------------------------+ | [:e2 "11"->"13" @0 {age: 14, name: "n1"}] | +-------------------------------------------+ @@ -86,9 +86,9 @@ nebula> FETCH PROP ON e2 "11"->"13"; nebula> INSERT EDGE e2 (name, age) VALUES "14"->"15"@1:("n1", 12); # 使用 IF NOT EXISTS 修改边,因为边已存在,不会进行修改。 nebula> INSERT EDGE IF NOT EXISTS e2 (name, age) VALUES "14"->"15"@1:("n2", 13); -nebula> FETCH PROP ON e2 "14"->"15"@1; +nebula> FETCH PROP ON e2 "14"->"15"@1 YIELD edge AS e; +-------------------------------------------+ -| edges_ | +| e | +-------------------------------------------+ | [:e2 "14"->"15" @1 {age: 12, name: "n1"}] | +-------------------------------------------+ diff --git a/docs-2.0/3.ngql-guide/13.edge-statements/3.upsert-edge.md b/docs-2.0/3.ngql-guide/13.edge-statements/3.upsert-edge.md index e3ae15a383..0a4e85d7bd 100644 --- a/docs-2.0/3.ngql-guide/13.edge-statements/3.upsert-edge.md +++ b/docs-2.0/3.ngql-guide/13.edge-statements/3.upsert-edge.md @@ -58,6 +58,10 @@ SET nebula> GO FROM "player666", "player667", "player668" \ OVER serve \ YIELD properties(edge).start_year, properties(edge).end_year; ++-----------------------------+---------------------------+ +| properties(EDGE).start_year | properties(EDGE).end_year | ++-----------------------------+---------------------------+ ++-----------------------------+---------------------------+ Empty set nebula> UPSERT EDGE on serve \ 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 94cd1d72d5..3d51a2afca 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 @@ -74,7 +70,7 @@ CREATE {TAG | EDGE} INDEX [IF NOT EXISTS] ON { | `|索引名。索引名在一个图空间中必须是唯一的。推荐的命名方式为`i_tagName_propName`。索引名称由大小写英文字母、数字或下划线组成,区分大写小,且不可使用[关键字和保留字](../../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/15.full-text-index-statements/1.search-with-text-based-index.md b/docs-2.0/3.ngql-guide/15.full-text-index-statements/1.search-with-text-based-index.md index 0ffb449f8b..9f68ce88cc 100644 --- a/docs-2.0/3.ngql-guide/15.full-text-index-statements/1.search-with-text-based-index.md +++ b/docs-2.0/3.ngql-guide/15.full-text-index-statements/1.search-with-text-based-index.md @@ -123,9 +123,9 @@ nebula> INSERT VERTEX player(name, age) VALUES \ "Blake Griffin": ("Blake Griffin", 30); //测试查询 -nebula> LOOKUP ON player WHERE PREFIX(player.name, "B"); +nebula> LOOKUP ON player WHERE PREFIX(player.name, "B") YIELD id(vertex); +-----------------+ -| _vid | +| id(VERTEX) | +-----------------+ | "Boris Diaw" | | "Ben Simmons" | @@ -133,13 +133,13 @@ nebula> LOOKUP ON player WHERE PREFIX(player.name, "B"); +-----------------+ nebula> LOOKUP ON player WHERE WILDCARD(player.name, "*ri*") YIELD player.name, player.age; -+-----------------+-----------------+-----+ -| _vid | name | age | -+-----------------+-----------------+-----+ -| "Chris Paul" | "Chris Paul" | 33 | -| "Boris Diaw" | "Boris Diaw" | 36 | -| "Blake Griffin" | "Blake Griffin" | 30 | -+-----------------+-----------------+-----+ ++-----------------+-----+ +| name | age | ++-----------------+-----+ +| "Chris Paul" | 33 | +| "Boris Diaw" | 36 | +| "Blake Griffin" | 30 | ++-----------------+-----+ nebula> LOOKUP ON player WHERE WILDCARD(player.name, "*ri*") | YIELD count(*); +----------+ @@ -149,15 +149,15 @@ nebula> LOOKUP ON player WHERE WILDCARD(player.name, "*ri*") | YIELD count(*); +----------+ nebula> LOOKUP ON player WHERE REGEXP(player.name, "R.*") YIELD player.name, player.age; -+---------------------+---------------------+-----+ -| _vid | name | age | -+---------------------+---------------------+-----+ -| "Russell Westbrook" | "Russell Westbrook" | 30 | -+---------------------+---------------------+-----+ ++---------------------+-----+ +| name | age | ++---------------------+-----+ +| "Russell Westbrook" | 30 | ++---------------------+-----+ -nebula> LOOKUP ON player WHERE REGEXP(player.name, ".*"); +nebula> LOOKUP ON player WHERE REGEXP(player.name, ".*") YIELD id(vertex); +---------------------+ -| _vid | +| id(VERTEX) | +---------------------+ | "Danny Green" | | "David West" | @@ -166,11 +166,11 @@ nebula> LOOKUP ON player WHERE REGEXP(player.name, ".*"); ... nebula> LOOKUP ON player WHERE FUZZY(player.name, "Tim Dunncan", AUTO, OR) YIELD player.name; -+--------------+--------------+ -| _vid | name | -+--------------+--------------+ -| "Tim Duncan" | "Tim Duncan" | -+--------------+--------------+ ++--------------+ +| name | ++--------------+ +| "Tim Duncan" | ++--------------+ //删除全文索引。 nebula> DROP FULLTEXT INDEX nebula_index_1; 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 f55c083281..00f98d1513 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 @@ -110,9 +110,9 @@ nebula> INSERT EDGE serve(start_year, end_year) VALUES "player101" -> "team204": 如果只是查询满足条件的路径或点,建议使用 [MATCH](../7.general-query-statements/2.match.md) 或 [GO](../7.general-query-statements/3.go.md) 语句。例如: ```ngql -nebula> match p= (v:player) -- (v2) where id(v)=="A" return p; +nebula> MATCH p= (v:player) -- (v2) WHERE id(v)=="A" RETURN p; -nebula> go 1 steps from "A" over follow; +nebula> GO 1 STEPS FROM "A" OVER follow YIELD id(vertex); ``` ### 为什么返回结果中会出现低于`step_count`跳数的关系? diff --git a/docs-2.0/3.ngql-guide/16.subgraph-and-path/2.find-path.md b/docs-2.0/3.ngql-guide/16.subgraph-and-path/2.find-path.md index 2ad7f7bd0e..b45fc5f431 100644 --- a/docs-2.0/3.ngql-guide/16.subgraph-and-path/2.find-path.md +++ b/docs-2.0/3.ngql-guide/16.subgraph-and-path/2.find-path.md @@ -51,27 +51,27 @@ OVER [REVERSELY | BIDIRECT] [] [UPTO STEPS] [ 返回的路径格式类似于`()-[:@]->( FIND SHORTEST PATH FROM "player102" TO "team204" OVER *; +nebula> FIND SHORTEST PATH FROM "player102" TO "team204" OVER * YIELD path AS p; +--------------------------------------------+ -| path | +| p | +--------------------------------------------+ | <("player102")-[:serve@0 {}]->("team204")> | +--------------------------------------------+ ``` ```ngql -nebula> FIND SHORTEST PATH WITH PROP FROM "team204" TO "player100" OVER * REVERSELY; +nebula> FIND SHORTEST PATH WITH PROP FROM "team204" TO "player100" OVER * REVERSELY YIELD path AS p; +--------------------------------------------------------------------------------------------------------------------------------------+ -| path | +| p | +--------------------------------------------------------------------------------------------------------------------------------------+ | <("team204" :team{name: "Spurs"})<-[:serve@0 {end_year: 2016, start_year: 1997}]-("player100" :player{age: 42, name: "Tim Duncan"})> | +--------------------------------------------------------------------------------------------------------------------------------------+ ``` ```ngql -nebula> FIND ALL PATH FROM "player100" TO "team204" OVER * WHERE follow.degree is EMPTY or follow.degree >=0; +nebula> FIND ALL PATH FROM "player100" TO "team204" OVER * WHERE follow.degree is EMPTY or follow.degree >=0 YIELD path AS p; +------------------------------------------------------------------------------+ -| path | +| p | +------------------------------------------------------------------------------+ | <("player100")-[:serve@0 {}]->("team204")> | | <("player100")-[:follow@0 {}]->("player125")-[:serve@0 {}]->("team204")> | @@ -81,9 +81,9 @@ nebula> FIND ALL PATH FROM "player100" TO "team204" OVER * WHERE follow.degree i ``` ```ngql -nebula> FIND NOLOOP PATH FROM "player100" TO "team204" OVER *; +nebula> FIND NOLOOP PATH FROM "player100" TO "team204" OVER * YIELD path AS p; +--------------------------------------------------------------------------------------------------------+ -| path | +| p | +--------------------------------------------------------------------------------------------------------+ | <("player100")-[:serve@0 {}]->("team204")> | | <("player100")-[:follow@0 {}]->("player125")-[:serve@0 {}]->("team204")> | 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 cdd6a87cfc..791dce6cd1 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 类型的列,会将数值四舍五入取整。 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 78e371df10..d322200385 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 @@ -1,25 +1,31 @@ # 日期和时间类型 -本文介绍日期和时间的类型,包括`DATE`、`TIME`、`DATETIME`和`TIMESTAMP`。 +本文介绍日期和时间的类型,包括`DATE`、`TIME`、`DATETIME`、`TIMESTAMP`和`DURATION`。 -在插入时间类型的属性值时,Nebula Graph 会根据[配置文件](../../5.configurations-and-logs/1.configurations/1.configurations.md)中`timezone_name`参数指定的时区,将该时间值(`TIMESTAMP`类型例外)转换成相应的世界协调时间(UTC)时间。在查询中返回的时间类型值为 UTC 时间。 +## 注意事项 -!!! Note +- 在插入时间类型的属性值时,Nebula Graph 会根据[配置文件](../../5.configurations-and-logs/1.configurations/1.configurations.md)中`timezone_name`参数指定的时区,将该`DATE`、`TIME`、`DATETIME`转换成相应的世界协调时间(UTC)时间。 - 如需修改当前时区,请同时修改所有服务的配置文件中的`timezone_name`参数。 + !!! Note + + 如需修改当前时区,请同时修改所有服务的配置文件中的`timezone_name`参数。 + +- 函数`date()`、`time()`和`datetime()`可以指定时区进行转换,例如`datetime("2017-03-04 22:30:40.003000+08:00")`或`datetime("2017-03-04T22:30:40.003000[Asia/Shanghai]")`。 - 函数`date()`、`time()`、`datetime()`和`timestamp()`可以用空值获取当前的日期或时间。 -- 函数`date()`、`time()`和`datetime()`可以用属性名称获取自身的某一个具体属性值,例如`date().month`获取当前月份、`time("02:59:40").minute`获取传入时间的分钟数。 +- 函数`date()`、`time()`、`datetime()`和`duration()`可以用属性名称获取自身的某一个具体属性值,例如`date().month`获取当前月份、`time("02:59:40").minute`获取传入时间的分钟数。 ## openCypher 兼容性 -- 支持年、月、日、时、分、秒,不支持毫秒。 +- 支持年、月、日、时、分、秒、毫秒、微秒,不支持纳秒。 -- 不支持函数`localdatetime()`和`duration()`。 +- 不支持函数`localdatetime()`。 - 不支持大部分字符串时间格式,支持`YYYY-MM-DDThh:mm:ss`和`YYYY-MM-DD hh:mm:ss`。 +- 支持单个数字的字符串时间格式,例如`time("1:1:1")`。 + ## DATE `DATE`包含日期,但是不包含时间。Nebula Graph 检索和显示`DATE`的格式为`YYYY-MM-DD`。支持的范围是`-32768-01-01`到`32767-12-31`。 @@ -72,6 +78,16 @@ - 底层存储的数据格式为** 64 位 int**。 +## DURATION + +`DURATION`是一段连续的时间,由`years`、`months`、`days`、`hours`、`minutes`、`seconds`六个Key自由组合成的Map类型数据表示。例如`duration({years: 12, months: 5, days: 14, hours: 16, minutes: 12, seconds: 70})`。 + +`DURATION`还有以下特点: + +- 不支持为`DURATION`类型数据创建索引。 + +- 可以用于对指定时间进行计算。 + ## 示例 1. 创建 Tag,名称为`date1`,包含`DATE`、`TIME`和`DATETIME`三种类型。 @@ -83,7 +99,7 @@ 2. 插入点,名称为`test1`。 ```ngql - nebula> INSERT VERTEX date1(p1, p2, p3) VALUES "test1":(date("2021-03-17"), time("17:53:59"), datetime("2021-03-17T17:53:59")); + nebula> INSERT VERTEX date1(p1, p2, p3) VALUES "test1":(date("2021-03-17"), time("17:53:59"), datetime("2017-03-04T22:30:40.003000[Asia/Shanghai]")); ``` 3. 获取`test1`的属性`p1`的月份。 @@ -125,7 +141,7 @@ nebula> INSERT VERTEX school(name, found_time) VALUES "dut":("dut", timestamp()); ``` -还可以使用`WITH`语句设置具体日期和时间,例如: +还可以使用`WITH`语句设置具体日期时间或进行计算,例如: ```ngql nebula> WITH time({hour: 12, minute: 31, second: 14, millisecond:111, microsecond: 222}) AS d RETURN d; @@ -141,4 +157,12 @@ nebula> WITH date({year: 1984, month: 10, day: 11}) AS x RETURN x + 1; +------------+ | 1984-10-12 | +------------+ + +nebula> WITH date('1984-10-11') as x, duration({years: 12, days: 14, hours: 99, minutes: 12}) as d \ + RETURN x + d AS sum, x - d AS diff; ++------------+------------+ +| sum | diff | ++------------+------------+ +| 1996-10-29 | 1972-09-23 | ++------------+------------+ ``` diff --git a/docs-2.0/3.ngql-guide/3.data-types/5.null.md b/docs-2.0/3.ngql-guide/3.data-types/5.null.md index bd9fd384ed..8441951468 100644 --- a/docs-2.0/3.ngql-guide/3.data-types/5.null.md +++ b/docs-2.0/3.ngql-guide/3.data-types/5.null.md @@ -77,10 +77,10 @@ nebula> INSERT VERTEX player(name) VALUES "Kobe":("Kobe"); 查询点`Kobe`,属性`age`为默认值`18`。 ```ngql -nebula> FETCH PROP ON player "Kobe"; -+-----------------------------------------+ -| vertices_ | -+-----------------------------------------+ -| ("Kobe" :player{age: 18, name: "Kobe"}) | -+-----------------------------------------+ +nebula> FETCH PROP ON player "Kobe" YIELD properties(vertex); ++--------------------------+ +| properties(VERTEX) | ++--------------------------+ +| {age: 18, name: "Kobe"} | ++--------------------------+ ``` 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 1fbde4143f..6dba8771d1 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/5.operators/4.pipe.md b/docs-2.0/3.ngql-guide/5.operators/4.pipe.md index 5de8e6d115..a21ebb17e3 100644 --- a/docs-2.0/3.ngql-guide/5.operators/4.pipe.md +++ b/docs-2.0/3.ngql-guide/5.operators/4.pipe.md @@ -19,10 +19,10 @@ nGQL 和 SQL 之间的一个主要区别是子查询的组成方式。 ```ngql nebula> GO FROM "player100" OVER follow \ YIELD dst(edge) AS dstid, properties($$).name AS Name | \ - GO FROM $-.dstid OVER follow; + GO FROM $-.dstid OVER follow YIELD dst(edge); +-------------+ -| follow._dst | +| dst(EDGE) | +-------------+ | "player100" | | "player102" | diff --git a/docs-2.0/3.ngql-guide/5.operators/6.set.md b/docs-2.0/3.ngql-guide/5.operators/6.set.md index c34c741bcf..b3c0b2c150 100644 --- a/docs-2.0/3.ngql-guide/5.operators/6.set.md +++ b/docs-2.0/3.ngql-guide/5.operators/6.set.md @@ -24,11 +24,11 @@ ```ngql # 返回两个查询结果的并集,不包含重复的元素。 -nebula> GO FROM "player102" OVER follow \ +nebula> GO FROM "player102" OVER follow YIELD dst(edge) \ UNION \ - GO FROM "player100" OVER follow; + GO FROM "player100" OVER follow YIELD dst(edge); +-------------+ -| follow._dst | +| dst(EDGE) | +-------------+ | "player100" | | "player101" | @@ -36,14 +36,15 @@ nebula> GO FROM "player102" OVER follow \ +-------------+ # 返回两个查询结果的并集,包含重复的元素。 -nebula> GO FROM "player102" OVER follow \ +nebula> GO FROM "player102" OVER follow YIELD dst(edge) \ UNION ALL \ - GO FROM "player100" OVER follow; + GO FROM "player100" OVER follow YIELD dst(edge); +-------------+ -| follow._dst | +| dst(EDGE) | +-------------+ | "player100" | | "player101" | +| "player101" | | "player125" | +-------------+ @@ -84,6 +85,7 @@ nebula> GO FROM "player102" OVER follow \ +----+--------+-----+ | id | Degree | Age | +----+--------+-----+ ++----+--------+-----+ ``` ## MINUS @@ -97,20 +99,20 @@ nebula> GO FROM "player102" OVER follow \ ### 示例 ```ngql -nebula> GO FROM "player100" OVER follow \ +nebula> GO FROM "player100" OVER follow YIELD dst(edge) \ MINUS \ - GO FROM "player102" OVER follow; + GO FROM "player102" OVER follow YIELD dst(edge); +-------------+ -| follow._dst | +| dst(EDGE) | +-------------+ | "player125" | +-------------+ -nebula> GO FROM "player102" OVER follow \ +nebula> GO FROM "player102" OVER follow YIELD dst(edge) \ MINUS \ - GO FROM "player100" OVER follow; + GO FROM "player100" OVER follow YIELD dst(edge); +-------------+ -| follow._dst | +| dst(EDGE) | +-------------+ | "player100" | +-------------+ diff --git a/docs-2.0/3.ngql-guide/6.functions-and-expressions/11.reduce.md b/docs-2.0/3.ngql-guide/6.functions-and-expressions/11.reduce.md index 11fcf82589..dbb759418e 100644 --- a/docs-2.0/3.ngql-guide/6.functions-and-expressions/11.reduce.md +++ b/docs-2.0/3.ngql-guide/6.functions-and-expressions/11.reduce.md @@ -55,7 +55,7 @@ nebula> MATCH p = (n:player{name:"LeBron James"})<-[:follow]-(m) \ | 34 | 37 | 171 | +------+------+-----+ -nebula> LOOKUP ON player WHERE player.name == "Tony Parker" \ +nebula> LOOKUP ON player WHERE player.name == "Tony Parker" YIELD id(vertex) AS VertexID \ | GO FROM $-.VertexID over follow \ WHERE properties(edge).degree != reduce(totalNum = 5, n IN range(1, 3) | properties($$).age + totalNum + n) \ YIELD properties($$).name AS id, properties($$).age AS age, properties(edge).degree AS degree; diff --git a/docs-2.0/3.ngql-guide/6.functions-and-expressions/3.date-and-time.md b/docs-2.0/3.ngql-guide/6.functions-and-expressions/3.date-and-time.md index da74903728..73dd0e3128 100644 --- a/docs-2.0/3.ngql-guide/6.functions-and-expressions/3.date-and-time.md +++ b/docs-2.0/3.ngql-guide/6.functions-and-expressions/3.date-and-time.md @@ -9,22 +9,17 @@ Nebula Graph 支持以下内置日期时间函数。 |date date() | 根据当前系统返回当前日期(UTC 时间)。 | |time time() | 根据当前系统返回当前时间(UTC 时间)。 | |datetime datetime() | 根据当前系统返回当前日期和时间(UTC 时间)。 | +|map duration() | 持续时间。可以用于对指定时间进行计算。 | -`date()`、`time()`和`datetime()`函数除了传入空值获取当前时间或日期,还接受 string 和 map 类型的参数。`timestamp()`函数除了传入空值获取当前时区的时间戳,还接受 string 类型的参数。 - -## openCypher 兼容性 - -- 在 openCypher 中,时间精确到毫秒。 - -- 在 nGQL 中,时间精确到毫秒。微秒数显示为`000`。 +详细信息参见[日期和时间类型](../3.data-types/4.date-and-time.md)。 ## 示例 ```ngql -> RETURN now(), timestamp(), date(), time(), datetime(); +nebula> RETURN now(), timestamp(), date(), time(), datetime(); +------------+-------------+------------+-----------------+----------------------------+ | now() | timestamp() | date() | time() | datetime() | +------------+-------------+------------+-----------------+----------------------------+ -| 1625470028 | 1625470028 | 2021-07-05 | 07:27:07.944000 | 2021-07-05T07:27:07.944000 | +| 1640057560 | 1640057560 | 2021-12-21 | 03:32:40.351000 | 2021-12-21T03:32:40.351000 | +------------+-------------+------------+-----------------+----------------------------+ ``` diff --git a/docs-2.0/3.ngql-guide/6.functions-and-expressions/4.schema.md b/docs-2.0/3.ngql-guide/6.functions-and-expressions/4.schema.md index 4938afee29..cb26f35b1f 100644 --- a/docs-2.0/3.ngql-guide/6.functions-and-expressions/4.schema.md +++ b/docs-2.0/3.ngql-guide/6.functions-and-expressions/4.schema.md @@ -6,9 +6,7 @@ Nebula Graph 支持以下 Schema 函数。 !!! note - - GO 语句中,WHERE 子句和 YIELD 子句中可以使用如下函数。 - - LOOKUP 语句中,YIELD 子句中可以使用如下函数。 - - FETCH 语句中,YIELD 子句中可以使用如下函数。 + YIELD 和 WHERE 子句中可以使用如下函数。 |函数| 说明 | |:---- | :----| @@ -19,6 +17,15 @@ Nebula Graph 支持以下 Schema 函数。 |src(edge)|返回边的起始点 ID。数据类型和点 ID 的类型保持一致。| |dst(edge)|返回边的目的点 ID。数据类型和点 ID 的类型保持一致。| |int rank(edge) | 返回边的 rank。| +|vertex | 返回点的信息。包括点 ID、Tag、属性和值。| +|edge | 返回边的信息。包括 Edge type、起始点 ID、目的点 ID、rank、属性和值。| +|vertices | 返回子图中的点的信息。详情参见 [GET SUBGRAPH](../16.subgraph-and-path/1.get-subgraph.md)。| +|edges | 返回子图中的边的信息。详情参见 [GET SUBGRAPH](../16.subgraph-and-path/1.get-subgraph.md)。| +|path | 返回路径信息。详情参见 [FIND PATH](../16.subgraph-and-path/2.find-path.md)。| + +!!! note + + 由于 vertex、edge、vertices、edges、path 属于关键字,使用时需要用`AS `设置别名才能正常使用。例如`GO FROM "player100" OVER follow YIELD edge AS e;`。 ## openCypher 兼容语句适用 @@ -45,15 +52,15 @@ nebula> GO FROM "player100" OVER follow REVERSELY \ +-------------+ | "player101" | | "player102" | -+-------------+ +... nebula> LOOKUP ON player WHERE player.age > 45 YIELD id(vertex); -+-------------+-------------+ -| VertexID | id(VERTEX) | -+-------------+-------------+ -| "player144" | "player144" | -| "player140" | "player140" | -+-------------+-------------+ ++-------------+ +| id(VERTEX) | ++-------------+ +| "player144" | +| "player140" | ++-------------+ nebula> MATCH (a:player) WHERE id(a) == "player100" \ RETURN tags(a), labels(a), properties(a); 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 d4890d8dac..e5df90846a 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/3.go.md b/docs-2.0/3.ngql-guide/7.general-query-statements/3.go.md index 94eab57fa9..4409c2815d 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 @@ -12,7 +12,7 @@ GO [[ TO] STEPS ] FROM OVER [{REVERSELY | BIDIRECT}] [ WHERE  ] -[YIELD [DISTINCT] ] +YIELD [DISTINCT] [{SAMPLE | LIMIT }] [| GROUP BY {col_name | expr | position} YIELD ] [| ORDER BY [{ASC | DESC}]] @@ -49,7 +49,7 @@ OVER [{REVERSELY | BIDIRECT}] 遍历多个 Edge type 时,`WHERE`子句有一些限制。例如不支持`WHERE edge1.prop1 > edge2.prop2`。 -- `YIELD [DISTINCT] `:定义需要返回的输出。` `建议使用 [Schema 函数](../6.functions-and-expressions/4.schema.md),当前支持`src(edge)`、`dst(edge)`、`type(edge)`、`rank(edge)`、`properties(edge)`、`id(vertex)`、`properties(vertex)`,暂不支持嵌套函数。详情参见 [YIELD](../8.clauses-and-options/yield.md)。如果没有指定,默认返回目的点 ID。 +- `YIELD [DISTINCT] `:定义需要返回的输出。` `建议使用 [Schema 函数](../6.functions-and-expressions/4.schema.md),当前支持`src(edge)`、`dst(edge)`、`type(edge)`等,暂不支持嵌套函数。详情参见 [YIELD](../8.clauses-and-options/yield.md)。 - `SAMPLE `:用于在结果集中取样。详情参见 [SAMPLE](../8.clauses-and-options/sample.md)。 @@ -69,25 +69,27 @@ OVER [{REVERSELY | BIDIRECT}] ```ngql # 返回 player102 所属队伍。 -nebula> GO FROM "player102" OVER serve; -+------------+ -| serve._dst | -+------------+ -| "team203" | -| "team204" | -+------------+ +nebula> GO FROM "player102" OVER serve YIELD dst(edge); ++-----------+ +| dst(EDGE) | ++-----------+ +| "team203" | +| "team204" | ++-----------+ ``` ```ngql # 返回距离 player102 两跳的朋友。 -nebula> GO 2 STEPS FROM "player102" OVER follow; +nebula> GO 2 STEPS FROM "player102" OVER follow YIELD dst(edge); +-------------+ -| follow._dst | +| dst(EDGE) | +-------------+ | "player101" | | "player125" | +| "player100" | +| "player102" | +| "player125" | +-------------+ -... ``` ```ngql @@ -113,6 +115,7 @@ nebula> GO FROM "player100" OVER follow, serve \ | properties(EDGE).degree | properties(EDGE).start_year | +-------------------------+-----------------------------+ | 95 | UNKNOWN_PROP | +| 95 | UNKNOWN_PROP | | UNKNOWN_PROP | 1997 | +-------------------------+-----------------------------+ ``` @@ -126,7 +129,6 @@ nebula> GO FROM "player100" OVER follow REVERSELY \ +-------------+ | "player101" | | "player102" | -+-------------+ ... # 该 MATCH 查询与上一个 GO 查询具有相同的语义。 @@ -137,7 +139,6 @@ nebula> MATCH (v)<-[e:follow]- (v2) WHERE id(v) == 'player100' \ +-------------+ | "player101" | | "player102" | -+-------------+ ... ``` diff --git a/docs-2.0/3.ngql-guide/7.general-query-statements/4.fetch.md b/docs-2.0/3.ngql-guide/7.general-query-statements/4.fetch.md index 73240230be..edd9a833d1 100644 --- a/docs-2.0/3.ngql-guide/7.general-query-statements/4.fetch.md +++ b/docs-2.0/3.ngql-guide/7.general-query-statements/4.fetch.md @@ -1,7 +1,5 @@ # FETCH - - `FETCH`可以获取指定点或边的属性值。 ## openCypher 兼容性 @@ -15,7 +13,7 @@ ```ngql FETCH PROP ON {[, tag_name ...] | *} [, vid ...] -[YIELD [AS ]]; +YIELD [AS ]; ``` |参数|说明| @@ -23,7 +21,7 @@ FETCH PROP ON {[, tag_name ...] | *} |`tag_name`|Tag 名称。| |`*`|表示当前图空间中的所有 Tag。| |`vid`|点 ID。| -|`YIELD`|定义需要返回的输出。除了返回定义的属性,额外返回`VertexID`。详情请参见 [`YIELD`](../8.clauses-and-options/yield.md)。如果没有`YIELD`子句,默认返回`vertices_`,包含点的所有信息。| +|`YIELD`|定义需要返回的输出。详情请参见 [`YIELD`](../8.clauses-and-options/yield.md)。| |`AS`| 设置别名。| ### 基于 Tag 获取点的属性值 @@ -31,12 +29,12 @@ FETCH PROP ON {[, tag_name ...] | *} 在`FETCH`语句中指定 Tag 获取对应点的属性值。 ```ngql -nebula> FETCH PROP ON player "player100"; -+----------------------------------------------------+ -| vertices_ | -+----------------------------------------------------+ -| ("player100" :player{age: 42, name: "Tim Duncan"}) | -+----------------------------------------------------+ +nebula> FETCH PROP ON player "player100" YIELD properties(vertex); ++-------------------------------+ +| properties(VERTEX) | ++-------------------------------+ +| {age: 42, name: "Tim Duncan"} | ++-------------------------------+ ``` ### 获取点的指定属性值 @@ -46,11 +44,11 @@ nebula> FETCH PROP ON player "player100"; ```ngql nebula> FETCH PROP ON player "player100" \ YIELD properties(vertex).name AS name; -+-------------+--------------+ -| VertexID | name | -+-------------+--------------+ -| "player100" | "Tim Duncan" | -+-------------+--------------+ ++--------------+ +| name | ++--------------+ +| "Tim Duncan" | ++--------------+ ``` ### 获取多个点的属性值 @@ -58,14 +56,14 @@ nebula> FETCH PROP ON player "player100" \ 指定多个点 ID 获取多个点的属性值,点之间用英文逗号(,)分隔。 ```ngql -nebula> FETCH PROP ON player "player101", "player102", "player103"; -+-----------------------------------------------------------+ -| vertices_ | -+-----------------------------------------------------------+ -| ("player101" :player{age: 36, name: "Tony Parker"}) | -| ("player102" :player{age: 33, name: "LaMarcus Aldridge"}) | -| ("player103" :player{age: 32, name: "Rudy Gay"}) | -+-----------------------------------------------------------+ +nebula> FETCH PROP ON player "player101", "player102", "player103" YIELD properties(vertex); ++--------------------------------------+ +| properties(VERTEX) | ++--------------------------------------+ +| {age: 33, name: "LaMarcus Aldridge"} | +| {age: 40, name: "Tony Parker"} | +| {age: 32, name: "Rudy Gay"} | ++--------------------------------------+ ``` ### 基于多个 Tag 获取点的属性值 @@ -77,25 +75,25 @@ nebula> FETCH PROP ON player "player101", "player102", "player103"; nebula> CREATE TAG IF NOT EXISTS t1(a string, b int); # 为点 player100 添加 Tag t1。 -nebula> INSERT VERTEX t1(a, b) VALUE "player100":("Hello", 100); +nebula> INSERT VERTEX t1(a, b) VALUES "player100":("Hello", 100); # 基于 Tag player 和 t1 获取点 player100 上的属性值。 -nebula> FETCH PROP ON player, t1 "player100"; +nebula> FETCH PROP ON player, t1 "player100" YIELD vertex AS v; +----------------------------------------------------------------------------+ -| vertices_ | +| v | +----------------------------------------------------------------------------+ -| ("player100" :t1{a: "Hello", b: 100} :player{age: 42, name: "Tim Duncan"}) | +| ("player100" :player{age: 42, name: "Tim Duncan"} :t1{a: "Hello", b: 100}) | +----------------------------------------------------------------------------+ ``` 用户可以在`FETCH`语句中组合多个 Tag 和多个点。 ```ngql -nebula> FETCH PROP ON player, t1 "player100", "player103"; +nebula> FETCH PROP ON player, t1 "player100", "player103" YIELD vertex AS v; +----------------------------------------------------------------------------+ -| vertices_ | +| v | +----------------------------------------------------------------------------+ -| ("player100" :t1{a: "Hello", b: 100} :player{age: 42, name: "Tim Duncan"}) | +| ("player100" :player{age: 42, name: "Tim Duncan"} :t1{a: "Hello", b: 100}) | | ("player103" :player{age: 32, name: "Rudy Gay"}) | +----------------------------------------------------------------------------+ ``` @@ -105,13 +103,13 @@ nebula> FETCH PROP ON player, t1 "player100", "player103"; 在`FETCH`语句中使用`*`获取当前图空间所有标签里,点的属性值。 ```ngql -nebula> FETCH PROP ON * "player100", "player106", "team200"; +nebula> FETCH PROP ON * "player100", "player106", "team200" YIELD vertex AS v; +----------------------------------------------------------------------------+ -| vertices_ | +| v | +----------------------------------------------------------------------------+ +| ("player100" :player{age: 42, name: "Tim Duncan"} :t1{a: "Hello", b: 100}) | | ("player106" :player{age: 25, name: "Kyle Anderson"}) | | ("team200" :team{name: "Warriors"}) | -| ("player100" :t1{a: "Hello", b: 100} :player{age: 42, name: "Tim Duncan"}) | +----------------------------------------------------------------------------+ ``` @@ -121,7 +119,7 @@ nebula> FETCH PROP ON * "player100", "player106", "team200"; ```ngql FETCH PROP ON -> [@] [, -> ...] -[YIELD ] +YIELD ; ``` |参数|说明| @@ -130,18 +128,18 @@ FETCH PROP ON -> [@] [, -> FETCH PROP ON serve "player100" -> "team204"; -+-----------------------------------------------------------------------+ -| edges_ | -+-----------------------------------------------------------------------+ -| [:serve "player100"->"team204" @0 {end_year: 2016, start_year: 1997}] | -+-----------------------------------------------------------------------+ +nebula> FETCH PROP ON serve "player100" -> "team204" YIELD properties(edge); ++------------------------------------+ +| properties(EDGE) | ++------------------------------------+ +| {end_year: 2016, start_year: 1997} | ++------------------------------------+ ``` ### 获取边的指定属性值 @@ -151,11 +149,11 @@ nebula> FETCH PROP ON serve "player100" -> "team204"; ```ngql nebula> FETCH PROP ON serve "player100" -> "team204" \ YIELD properties(edge).start_year; -+-------------+------------+-------------+-----------------------------+ -| serve._src | serve._dst | serve._rank | properties(EDGE).start_year | -+-------------+------------+-------------+-----------------------------+ -| "player100" | "team204" | 0 | 1997 | -+-------------+------------+-------------+-----------------------------+ ++-----------------------------+ +| properties(EDGE).start_year | ++-----------------------------+ +| 1997 | ++-----------------------------+ ``` ### 获取多条边的属性值 @@ -163,9 +161,9 @@ nebula> FETCH PROP ON serve "player100" -> "team204" \ 指定多个边模式 (` -> [@]`) 获取多个边的属性值。模式之间用英文逗号(,)分隔。 ```ngql -nebula> FETCH PROP ON serve "player100" -> "team204", "player133" -> "team202"; +nebula> FETCH PROP ON serve "player100" -> "team204", "player133" -> "team202" YIELD edge AS e; +-----------------------------------------------------------------------+ -| edges_ | +| e | +-----------------------------------------------------------------------+ | [:serve "player100"->"team204" @0 {end_year: 2016, start_year: 1997}] | | [:serve "player133"->"team202" @0 {end_year: 2011, start_year: 2002}] | @@ -185,17 +183,17 @@ nebula> insert edge serve(start_year,end_year) \ values "player100"->"team204"@2:(1990, 2018); # 默认返回 rank 为 0 的边。 -nebula> FETCH PROP ON serve "player100" -> "team204"; +nebula> FETCH PROP ON serve "player100" -> "team204" YIELD edge AS e; +-----------------------------------------------------------------------+ -| edges_ | +| e | +-----------------------------------------------------------------------+ | [:serve "player100"->"team204" @0 {end_year: 2016, start_year: 1997}] | +-----------------------------------------------------------------------+ # 要获取 rank 不为 0 的边,请在 FETCH 语句中设置 rank。 -nebula> FETCH PROP ON serve "player100" -> "team204"@1; +nebula> FETCH PROP ON serve "player100" -> "team204"@1 YIELD edge AS e; +-----------------------------------------------------------------------+ -| edges_ | +| e | +-----------------------------------------------------------------------+ | [:serve "player100"->"team204" @1 {end_year: 2017, start_year: 1998}] | +-----------------------------------------------------------------------+ @@ -211,13 +209,13 @@ nebula> GO FROM "player101" OVER follow \ YIELD src(edge) AS s, dst(edge) AS d \ | FETCH PROP ON follow $-.s -> $-.d \ YIELD properties(edge).degree; -+-------------+-------------+--------------+-------------------------+ -| follow._src | follow._dst | follow._rank | properties(EDGE).degree | -+-------------+-------------+--------------+-------------------------+ -| "player101" | "player100" | 0 | 95 | -| "player101" | "player102" | 0 | 90 | -| "player101" | "player125" | 0 | 95 | -+-------------+-------------+--------------+-------------------------+ ++-------------------------+ +| properties(EDGE).degree | ++-------------------------+ +| 95 | +| 90 | +| 95 | ++-------------------------+ ``` 用户也可以通过自定义变量构建类似的查询。 @@ -227,13 +225,13 @@ nebula> $var = GO FROM "player101" OVER follow \ YIELD src(edge) AS s, dst(edge) AS d; \ FETCH PROP ON follow $var.s -> $var.d \ YIELD properties(edge).degree; -+-------------+-------------+--------------+-------------------------+ -| follow._src | follow._dst | follow._rank | properties(EDGE).degree | -+-------------+-------------+--------------+-------------------------+ -| "player101" | "player100" | 0 | 95 | -| "player101" | "player102" | 0 | 90 | -| "player101" | "player125" | 0 | 95 | -+-------------+-------------+--------------+-------------------------+ ++-------------------------+ +| properties(EDGE).degree | ++-------------------------+ +| 95 | +| 90 | +| 95 | ++-------------------------+ ``` 更多复合语句的详情,请参见[复合查询(子句结构)](../4.variable-and-composite-queries/1.composite-queries.md)。 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 a18fd9e54a..c054574976 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 @@ -1,7 +1,5 @@ # LOOKUP - - `LOOKUP`根据索引遍历数据。用户可以使用`LOOKUP`实现如下功能: - 根据`WHERE`子句搜索特定数据。 @@ -37,7 +35,7 @@ ```ngql LOOKUP ON { | } [WHERE [AND ...]] -[YIELD [AS ]]; +YIELD [AS ]; [AS ] [, [AS ] ...]; @@ -45,10 +43,7 @@ LOOKUP ON { | } - `WHERE `:指定遍历的过滤条件,还可以结合布尔运算符 AND 和 OR 一起使用。详情请参见 [WHERE](../8.clauses-and-options/where.md)。 -- `YIELD`:定义需要返回的输出。 - - - `LOOKUP`Tag 时,除了返回定义的属性,额外返回`VertexID`。如果没有`YIELD`子句,返回`VertexID`。 - - `LOOKUP`Edge type 时,除了返回定义的属性,额外返回`起始点 ID`、`目的点 ID`和`rank`。如果没有`YIELD`子句,返回`起始点 ID`、`目的点 ID`和`rank`。 +- `YIELD`:定义需要返回的输出。详情请参见 [`YIELD`](../8.clauses-and-options/yield.md)。 - `AS`:设置别名。 @@ -77,45 +72,50 @@ nebula> REBUILD TAG INDEX index_player; +------------+ nebula> LOOKUP ON player \ - WHERE player.name == "Tony Parker"; -+-------------+ -| VertexID | -+-------------+ -| "player101" | -+-------------+ + WHERE player.name == "Tony Parker" \ + YIELD id(vertex); ++---------------+ +| id(VERTEX) | ++---------------+ +| "player101" | ++---------------+ nebula> LOOKUP ON player \ WHERE player.name == "Tony Parker" \ YIELD properties(vertex).name AS name, properties(vertex).age AS age; -+-------------+---------------+-----+ -| VertexID | name | age | -+-------------+---------------+-----+ -| "player101" | "Tony Parker" | 36 | -+-------------+---------------+-----+ ++---------------+-----+ +| name | age | ++---------------+-----+ +| "Tony Parker" | 36 | ++---------------+-----+ nebula> LOOKUP ON player \ - WHERE player.age > 45; + WHERE player.age > 45 \ + YIELD id(vertex); +-------------+ -| VertexID | +| id(VERTEX) | +-------------+ -| "player140" | | "player144" | +| "player140" | +| "player111" | +-------------+ nebula> LOOKUP ON player \ WHERE player.name STARTS WITH "B" \ AND player.age IN [22,30] \ YIELD properties(vertex).name, properties(vertex).age; -+-------------+-------------------------+------------------------+ -| VertexID | properties(VERTEX).name | properties(VERTEX).age | -+-------------+-------------------------+------------------------+ -| "player134" | "Blake Griffin" | 30 | -| "player149" | "Ben Simmons" | 22 | -+-------------+-------------------------+------------------------+ ++-------------------------+------------------------+ +| properties(VERTEX).name | properties(VERTEX).age | ++-------------------------+------------------------+ +| "Blake Griffin" | 30 | +| "Ben Simmons" | 22 | +| "Blake Griffin" | 30 | +| "Ben Simmons" | 22 | ++-------------------------+------------------------+ nebula> LOOKUP ON player \ WHERE player.name == "Kobe Bryant"\ - YIELD properties(vertex).name AS name |\ + YIELD id(vertex) AS VertexID, properties(vertex).name AS name |\ GO FROM $-.VertexID OVER serve \ YIELD $-.name, properties(edge).start_year, properties(edge).end_year, properties($$).name; +---------------+-----------------------------+---------------------------+---------------------+ @@ -140,13 +140,13 @@ nebula> REBUILD EDGE INDEX index_follow; +------------+ nebula> LOOKUP ON follow \ - WHERE follow.degree == 90; -+-------------+-------------+---------+ -| SrcVID | DstVID | Ranking | -+-------------+-------------+---------+ -| "player150" | "player143" | 0 | -| "player150" | "player137" | 0 | -| "player148" | "player136" | 0 | + WHERE follow.degree == 90 YIELD edge AS e; ++----------------------------------------------------+ +| e | ++----------------------------------------------------+ +| [:follow "player109"->"player125" @0 {degree: 90}] | +| [:follow "player118"->"player120" @0 {degree: 90}] | +| [:follow "player118"->"player131" @0 {degree: 90}] | ... nebula> LOOKUP ON follow \ @@ -162,16 +162,16 @@ nebula> LOOKUP ON follow \ nebula> LOOKUP ON follow \ WHERE follow.degree == 60 \ - YIELD properties(edge).degree AS Degree |\ + YIELD dst(edge) AS DstVID, properties(edge).degree AS Degree |\ GO FROM $-.DstVID OVER serve \ YIELD $-.DstVID, properties(edge).start_year, properties(edge).end_year, properties($$).name; -+-------------+------------------------------+---------------------------+---------------------+ -| $-.DstVID | properties(EDGE).start_year | properties(EDGE).end_year | properties($$).name | -+-------------+------------------------------+---------------------------+---------------------+ -| "player105" | 2010 | 2018 | "Spurs" | -| "player105" | 2009 | 2010 | "Cavaliers" | -| "player105" | 2018 | 2019 | "Raptors" | -+-------------+------------------------------+---------------------------+---------------------+ ++-------------+-----------------------------+---------------------------+---------------------+ +| $-.DstVID | properties(EDGE).start_year | properties(EDGE).end_year | properties($$).name | ++-------------+-----------------------------+---------------------------+---------------------+ +| "player105" | 2010 | 2018 | "Spurs" | +| "player105" | 2009 | 2010 | "Cavaliers" | +| "player105" | 2018 | 2019 | "Raptors" | ++-------------+-----------------------------+---------------------------+---------------------+ ``` ## 通过 Tag 列出所有的对应的点/通过 Edge type 列出边 @@ -199,13 +199,13 @@ nebula> LOOKUP ON follow \ # 列出所有的 player。类似于 MATCH (n:player) RETURN id(n) /*, n */。 - nebula> LOOKUP ON player; + nebula> LOOKUP ON player YIELD id(vertex); +-------------+ - | VertexID | + | id(VERTEX) | +-------------+ | "player100" | | "player101" | - +-------------+ + ... ``` - 查找 Edge type 为`follow`的所有边的信息。 @@ -227,12 +227,14 @@ nebula> LOOKUP ON follow \ # 列出所有的 follow 边。类似于 MATCH (s)-[e:follow]->(d) RETURN id(s), rank(e), id(d) /*, type(e) */。 - nebula)> LOOKUP ON follow; - +-------------+-------------+---------+ - | SrcVID | DstVID | Ranking | - +-------------+-------------+---------+ - | "player100" | "player101" | 0 | - +-------------+-------------+---------+ + nebula)> LOOKUP ON follow YIELD edge AS e; + +-----------------------------------------------------+ + | e | + +-----------------------------------------------------+ + | [:follow "player105"->"player100" @0 {degree: 70}] | + | [:follow "player105"->"player116" @0 {degree: 80}] | + | [:follow "player109"->"player100" @0 {degree: 80}] | + ... ``` ## 统计点或边 @@ -240,7 +242,7 @@ nebula> LOOKUP ON follow \ 统计 Tag 为`player`的点和 Edge type 为`follow`的边。 ```ngql -nebula> LOOKUP ON player |\ +nebula> LOOKUP ON player YIELD id(vertex)|\ YIELD COUNT(*) AS Player_Number; +---------------+ | Player_Number | @@ -248,7 +250,7 @@ nebula> LOOKUP ON player |\ | 51 | +---------------+ -nebula> LOOKUP ON follow | \ +nebula> LOOKUP ON follow YIELD edge AS e| \ YIELD COUNT(*) AS Follow_Number; +---------------+ | Follow_Number | 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 be49d01360..1e98f7862a 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 3b6374e44f..48707c24f7 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 | +------------------+-----------------+---------+----------------------+----------------------------+----------------+-----------+-------------------------------------------------------+ 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 0000000000..0f7db7446f --- /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/8.clauses-and-options/limit.md b/docs-2.0/3.ngql-guide/8.clauses-and-options/limit.md index dc4962085c..2dab4c77ae 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 @@ -35,10 +35,10 @@ ```ngql # 从结果中返回最前面的 3 行数据。 -nebula> LOOKUP ON player |\ +nebula> LOOKUP ON player YIELD id(vertex)|\ LIMIT 3; +-------------+ -| VertexID | +| id(VERTEX) | +-------------+ | "player100" | | "player101" | @@ -92,16 +92,17 @@ nebula> GO 3 STEPS FROM "player100" \ | "Manu Ginobili" | 41 | +-----------------+--------------+ -nebula> GO 3 STEPS FROM "player102" \ - OVER * \ +nebula> GO 3 STEPS FROM "player102" OVER * \ + YIELD dst(edge) \ LIMIT [rand32(5),rand32(5),rand32(5)]; -+------------+-------------+ -| serve._dst | follow._dst | -+------------+-------------+ -| "team204" | | -| "team215" | | -| | "player100" | -+------------+-------------+ ++-------------+ +| dst(EDGE) | ++-------------+ +| "team204" | +| "team215" | +| "player100" | +| "player102" | ++-------------+ ``` ## openCypher 兼容语句中的 LIMIT 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 50e6bcff1f..cb292966ad 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 @@ -28,14 +28,14 @@ ORDER BY [ASC | DESC] [, [ASC | DESC] ...]; nebula> FETCH PROP ON player "player100", "player101", "player102", "player103" \ YIELD properties(vertex).age AS age, properties(vertex).name AS name \ | ORDER BY $-.age ASC, $-.name DESC; -+-------------+-----+---------------------+ -| VertexID | age | name | -+-------------+-----+---------------------+ -| "player103" | 32 | "Rudy Gay" | -| "player102" | 33 | "LaMarcus Aldridge" | -| "player101" | 36 | "Tony Parker" | -| "player100" | 42 | "Tim Duncan" | -+-------------+-----+---------------------+ ++-----+---------------------+ +| age | name | ++-----+---------------------+ +| 32 | "Rudy Gay" | +| 33 | "LaMarcus Aldridge" | +| 36 | "Tony Parker" | +| 42 | "Tim Duncan" | ++-----+---------------------+ nebula> $var = GO FROM "player100" OVER follow \ YIELD dst(edge) AS dst; \ 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 2f2c2268e7..954034442c 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/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 555b1162c6..49b204699a 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 @@ -75,11 +75,11 @@ nebula> GO FROM "player100" \ ``` ```ngql - nebula> GO FROM "player100" \ - OVER follow \ - WHERE $^.player.age >= 42; + nebula> GO FROM "player100" OVER follow \ + WHERE $^.player.age >= 42 \ + YIELD dst(edge); +-------------+ - | follow._dst | + | dst(EDGE) | +-------------+ | "player101" | | "player125" | @@ -105,11 +105,11 @@ nebula> GO FROM "player100" \ ``` ```ngql - nebula> GO FROM "player100" \ - OVER follow \ - WHERE follow.degree > 90; + nebula> GO FROM "player100" OVER follow \ + WHERE follow.degree > 90 \ + YIELD dst(edge); +-------------+ - | follow._dst | + | dst(EDGE) | +-------------+ | "player101" | | "player125" | @@ -305,15 +305,15 @@ nebula> MATCH (v:player) \ nebula> LOOKUP ON player \ WHERE player.age IN [25,28] \ YIELD properties(vertex).name, properties(vertex).age; -+-------------+-------------------------+------------------------+ -| VertexID | properties(VERTEX).name | properties(VERTEX).age | -+-------------+-------------------------+------------------------+ -| "player106" | "Kyle Anderson" | 25 | -| "player135" | "Damian Lillard" | 28 | -| "player130" | "Joel Embiid" | 25 | -| "player131" | "Paul George" | 28 | -| "player123" | "Ricky Rubio" | 28 | -+-------------+-------------------------+------------------------+ ++-------------------------+------------------------+ +| properties(VERTEX).name | properties(VERTEX).age | ++-------------------------+------------------------+ +| "Kyle Anderson" | 25 | +| "Damian Lillard" | 28 | +| "Joel Embiid" | 25 | +| "Paul George" | 28 | +| "Ricky Rubio" | 28 | ++-------------------------+------------------------+ ``` ### 结合 NOT 使用 diff --git a/docs-2.0/3.ngql-guide/8.clauses-and-options/yield.md b/docs-2.0/3.ngql-guide/8.clauses-and-options/yield.md index da41af5ce1..9c33e99694 100644 --- a/docs-2.0/3.ngql-guide/8.clauses-and-options/yield.md +++ b/docs-2.0/3.ngql-guide/8.clauses-and-options/yield.md @@ -4,7 +4,7 @@ `YIELD`可以引导子句或语句: -- `YIELD`子句可以用于原生 nGQL 语句中,例如`GO`、`FETCH`或`LOOKUP`。 +- `YIELD`子句用于原生 nGQL 语句中,例如`GO`、`FETCH`或`LOOKUP`,必须通过`YIELD`子句定义返回结果。 - `YIELD`语句可以在独立查询或复合查询中使用。 @@ -59,11 +59,11 @@ YIELD [DISTINCT] [AS ] [, [AS ] ...]; ```ngql nebula> FETCH PROP ON player "player100" \ YIELD properties(vertex).name; - +-------------+-------------------------+ - | VertexID | properties(VERTEX).name | - +-------------+-------------------------+ - | "player100" | "Tim Duncan" | - +-------------+-------------------------+ + +-------------------------+ + | properties(VERTEX).name | + +-------------------------+ + | "Tim Duncan" | + +-------------------------+ ``` - `LOOKUP`语句中使用`YIELD`: @@ -71,11 +71,11 @@ YIELD [DISTINCT] [AS ] [, [AS ] ...]; ```ngql nebula> LOOKUP ON player WHERE player.name == "Tony Parker" \ YIELD properties(vertex).name, properties(vertex).age; - +-------------+-------------------------+------------------------+ - | VertexID | properties(VERTEX).name | properties(VERTEX).age | - +-------------+-------------------------+------------------------+ - | "player101" | "Tony Parker" | 36 | - +-------------+-------------------------+------------------------+ + +-------------------------+------------------------+ + | properties(VERTEX).name | properties(VERTEX).age | + +-------------------------+------------------------+ + | "Tony Parker" | 36 | + +-------------------------+------------------------+ ``` ## YIELD 语句 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 99f109f2fa..c046c528d7 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 实例中唯一标识一个图空间。图空间名称由大小写英文字母、数字或下划线组成,区分大写小,且不可使用[关键字和保留字](../../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`表示数据类型为整数。| @@ -58,7 +58,7 @@ CREATE SPACE AS ; |参数|说明| |:---|:---| -|``|目标图空间名称。该图空间必须未创建。图空间名称由大小写英文字母、数字或下划线组成,区分大写小,且不可使用[关键字和保留字](../../3.ngql-guide/1.nGQL-overview/keywords-and-reserved-words.md)。创建时会克隆``图空间的 Schema,包括图空间本身参数(分片数量、副本数量等),以及 Tag、Edge type 和原生索引。| +|``|目标图空间名称。该图空间必须未创建。图空间名称支持 1~4 字节的 UTF-8 编码字符,包括英文字母(区分大小写)、数字、中文等,但是不包括除下划线外的特殊字符。使用保留关键字时,需要用反引号(\`)包围,详情参见[关键字和保留字](../../3.ngql-guide/1.nGQL-overview/keywords-and-reserved-words.md)。创建时会克隆``图空间的 Schema,包括图空间本身参数(分片数量、副本数量等),以及 Tag、Edge type 和原生索引。| |``|原始图空间名称。该图空间必须已存在。| ## 示例 @@ -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 秒)可能会导致分布式系统中的机器误判对端失联。 ## 检查分片分布情况 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 89fee8f9b7..f8e16bc83e 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 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 51e82119d2..68d12f9c23 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`。 diff --git a/docs-2.0/4.deployment-and-installation/2.compile-and-install-nebula-graph/3.deploy-nebula-graph-with-docker-compose.md b/docs-2.0/4.deployment-and-installation/2.compile-and-install-nebula-graph/3.deploy-nebula-graph-with-docker-compose.md index f4d631a5e9..5cd48f9b9b 100644 --- a/docs-2.0/4.deployment-and-installation/2.compile-and-install-nebula-graph/3.deploy-nebula-graph-with-docker-compose.md +++ b/docs-2.0/4.deployment-and-installation/2.compile-and-install-nebula-graph/3.deploy-nebula-graph-with-docker-compose.md @@ -230,9 +230,6 @@ graphd: 2. 在目录`nebula-docker-compose`内执行命令`docker-compose pull`,更新 Graph 服务、Storage 服务和 Meta 服务的镜像。 - !!! note - 执行`docker-compose pull`命令更新服务镜像前,确保已停止 Nebula Graph。 - 3. 执行命令`docker-compose up -d`启动 Nebula Graph 服务。 4. 通过 Nebula Console 连接 Nebula Graph 后,分别执行命令`SHOW HOSTS GRAPH`、`SHOW HOSTS STORAGE`、`SHOW HOSTS META`查看各服务版本。 diff --git a/docs-2.0/4.deployment-and-installation/6.deploy-text-based-index/2.deploy-es.md b/docs-2.0/4.deployment-and-installation/6.deploy-text-based-index/2.deploy-es.md index 594fbc40f0..569c637d32 100644 --- a/docs-2.0/4.deployment-and-installation/6.deploy-text-based-index/2.deploy-es.md +++ b/docs-2.0/4.deployment-and-installation/6.deploy-text-based-index/2.deploy-es.md @@ -12,7 +12,7 @@ Nebula Graph 的全文索引是基于 [Elasticsearch](https://en.wikipedia.org/w 当 Elasticsearch 集群启动时,请添加 Nebula Graph 全文索引的模板文件。关于索引模板的说明请参见 [Elasticsearch 官方文档](https://www.elastic.co/guide/en/elasticsearch/reference/current/index-templates.html)。 -以下面的模板为例: +以下面的模板为例(针对ES 7.0及以上版本): ```json { 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 4d993cd1db..e2f3d75714 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 说明 diff --git a/docs-2.0/5.configurations-and-logs/1.configurations/1.configurations.md b/docs-2.0/5.configurations-and-logs/1.configurations/1.configurations.md index 16e4102539..f4ed2bb190 100644 --- a/docs-2.0/5.configurations-and-logs/1.configurations/1.configurations.md +++ b/docs-2.0/5.configurations-and-logs/1.configurations/1.configurations.md @@ -1,6 +1,6 @@ # 配置管理 -Nebula Graph 基于 [gflags](https://gflags.github.io/gflags/) 库打造了系统配置,多数配置项都是其中的 flags。Nebula Graph 服务启动时,默认会从[配置文件](#_4) 中获取配置信息,文件中没有的配置项应用默认值。 +Nebula Graph 基于 [gflags](https://gflags.github.io/gflags/) 库打造了系统配置,多数配置项都是其中的 flags。Nebula Graph 服务启动时,默认会从[配置文件](#_4)中获取配置信息。对于文件中没有的配置项,系统使用默认值。 !!! enterpriseonly @@ -63,7 +63,9 @@ curl 127.0.0.1:19779/flags ## 配置文件简介 -Nebula Graph 为每个服务都提供了两份初始配置文件`.conf.default`和`.conf.production`,方便用户在不同场景中使用。文件的默认路径为`/usr/local/nebula/etc/`。 +### 源码、RPM/DEB、TAR 包集群的配置文件 + +Nebula Graph 为每个服务都提供了两份初始配置文件`.conf.default`和`.conf.production`,方便用户在不同场景中使用。使用源码和 RPM/DEB 安装集群的配置文件的默认路径为`/usr/local/nebula/etc/`;使用 TAR 包安装集群的配置文件路径为`//etc`TAR 包的安装路径。 初始配置文件中的配置值仅供参考,使用时可根据实际需求调整。如需使用初始配置文件,从上述两个文件选择其一,删除后缀`.default`或`.production`使其生效。 @@ -83,10 +85,35 @@ Nebula Graph 为每个服务都提供了两份初始配置文件`. !!! caution 不建议修改`local_config`的值为`false`。修改后 Nebula Graph 服务启动后会先尝试从 Meta 服务获取缓存的配置信息,可能导致集群配置不一致,造成未知风险。 +### Docker Compose 集群的配置文件 + +对于使用 Docker Compose 创建的集群,集群的配置文件的默认路径为`/nebula-docker-compose/docker-compose.yaml`。配置文件中的`command`下面的参数为各服务的启动参数。 + +### Nebula Operator 集群的配置文件 + +对于通过 Nebula Operator 使用 Kubectl 方式创建的集群,集群的配置文件的路径为用户创建集群 YAML 文件的路径。用户可通过配置文件中的`spec.{graphd|storaged|metad}.config`参数修改集群各个服务的相关配置。 + +!!! note + + 通过 Helm 部署的集群,暂不支持修改集群服务的相关配置。 + +关于 Nebula Graph 的配置相关的更多信息,参见 [Nebula Config](https://siwei.io/sketches/nebula-config-explained/)。 + ## 修改配置 -默认情况下,所有 Nebula Graph 服务从配置文件获取配置。用户可以按照以下步骤修改配置并使其生效: +默认情况下,所有 Nebula Graph 服务从配置文件获取配置。用户可以按照以下步骤修改配置并使其生效。 + +* 针对使用源码、RPM/DEB、TAR 包安装的集群: + + 1. 使用文本编辑器修改目标服务的配置文件并保存。 + + 2. 选择合适的时间重启**所有** Nebula Graph 服务使修改生效。 -1. 使用文本编辑器修改目标服务的配置文件并保存。 +* 针对使用 Docker Compose 安装的集群: + + 1. 在文件`/nebula-docker-compose/docker-compose.yaml`中,修改服务配置。 + 2. 在目录`nebula-docker-compose`内执行命令`docker-compose up -d`重启涉及配置变化的服务。 -2. 选择合适的时间重启**所有** Nebula Graph 服务使修改生效。 +* 针对使用 Kubectl 方式创建的集群: + + 具体操作,参见[自定义集群的配置参数](../../nebula-operator/8.custom-cluster-configurations/8.1.custom-conf-parameter.md)。 \ No newline at end of file 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 e62918eb61..608d18e148 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)。 @@ -63,8 +63,8 @@ Graph 服务提供了两份初始配置文件`nebula-graphd.conf.default`和`neb | `port` | `9669` | Graph 服务的 RPC 守护进程监听端口。 | |`reuse_port` |`false` | 是否启用 SO_REUSEPORT。 | |`listen_backlog` |`1024` | socket 监听的连接队列最大长度,调整本参数需要同时调整`net.core.somaxconn`。 | -|`client_idle_timeout_secs` |`0` | 空闲连接的超时时间。`0`表示永不超时。单位:秒。 | -|`session_idle_timeout_secs` |`0` | 空闲会话的超时时间。`0`表示永不超时。单位:秒。 | +|`client_idle_timeout_secs` |`28800` | 空闲连接的超时时间。默认 8 小时。`0`表示永不超时。单位:秒。 | +|`session_idle_timeout_secs` |`28800` | 空闲会话的超时时间。取值范围为 1~604800。默认 8 小时。单位:秒。 | |`num_accept_threads` |`1` | 接受传入连接的线程数。 | |`num_netio_threads` |`0` | 网络 IO 线程数。`0`表示 CPU 核数。 | |`num_worker_threads` |`0` | 执行用户查询的线程数。`0`表示 CPU 核数。 | 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 c451f5fb73..65092b71cd 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 @@ -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 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 0c0865b998..1a7f9eccbb 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 服务。 diff --git a/docs-2.0/8.service-tuning/2.graph-modeling.md b/docs-2.0/8.service-tuning/2.graph-modeling.md index d68ccf9063..0d0951654c 100644 --- a/docs-2.0/8.service-tuning/2.graph-modeling.md +++ b/docs-2.0/8.service-tuning/2.graph-modeling.md @@ -34,6 +34,44 @@ 例如,在一个业务模型中,人的属性是相对固定的,例如“年龄”,“性别”,“姓名”。而“通信好友”,“出入场所”,“交易账号”,“登录设备”等是相对容易改变的。前者适合建模为属性,后者适合建模为点或边。 +### 自环 + +Nebula Graph是强Schema类型系统,使用`ALTER TAG`的开销很大,而且也不支持List类型属性,当用户需要为点添加一些临时属性或者List类型的属性时,可以先创建包含所需属性的边类型,然后为点插入一条或多条指向自身的边。查询时只需要查询指向自己的边属性。如下图所示。 + +![loop property](loop-property.png) + +示例: + +如果要检索点的临时属性,请从自环边中获取。例如: + +```ngql +//创建边类型并插入自环属性。 +nebula> CREATE EDGE IF NOT EXISTS temp(tmp int); +nebula> INSERT EDGE temp(tmp) VALUES "player100"->"player100"@1:(1); +nebula> INSERT EDGE temp(tmp) VALUES "player100"->"player100"@2:(2); +nebula> INSERT EDGE temp(tmp) VALUES "player100"->"player100"@3:(3); + +//插入数据后,可以通过查询语句查询,例如: +nebula> GO FROM "player100" OVER temp YIELD properties(edge).tmp; ++----------------------+ +| properties(EDGE).tmp | ++----------------------+ +| 1 | +| 2 | +| 3 | ++----------------------+ + +//如果需要返回结果为List,可以通过函数实现,例如: +nebula> MATCH (v1:player)-[e:temp]->() return collect(e.tmp); ++----------------+ +| collect(e.tmp) | ++----------------+ +| [1, 2, 3] | ++----------------+ +``` + +对于自环的操作没有封装任何的语法糖,操作方式与普通的边无异。 + ### 广度优先大于深度优先 - Nebula Graph 基于图拓扑结构进行深度图遍历的性能较低,广度优先遍历以及获取属性的性能较好。例如,模型 a 包括姓名、年龄、眼睛颜色三种属性,建议创建一个 Tag`person`,然后为它添加姓名、年龄、眼睛颜色的属性。如果创建一个包含眼睛颜色的 Tag 和一个 Edge type`has`,然后创建一个边用来表示人拥有的眼睛颜色,这种建模方法会降低遍历性能。 @@ -68,11 +106,11 @@ 为边创建属性时请勿使用长文本:这些属性会被[存储 2 份](../1.introduction/3.nebula-graph-architecture/4.storage-service.md),导致写入放大问题(write amplification)。此时建议将长文本放在 HBase/ES 中,将其地址存放在 Nebula Graph 中。 -## 不能支持动态图(时序图) +## 关于支持动态图(时序图) 在某些场景下,图需要同时带有时序信息,以描述整个图的结构随着时间变化的情况 [^twitter]。 -Nebula Graph {{ nebula.release }} 的边可以使用 Rank 字段存放时间信息 (int64),但是点上没有字段可以存放时间信息(存放在属性会被新写入覆盖)。因此不能支持动态时序图。 +Nebula Graph {{ nebula.release }} 的边可以使用 Rank 字段存放时间信息 (int64),但是点上没有字段可以存放时间信息(存放在属性会被新写入覆盖)。一个折中的办法是在点上设计自己指向自己的自环,并将时间信息放置在自环上。但 Rank 字段目前缺少 `next(), pre(), head(), tail(), max(), min(), lessThan(), moreThan()` 等语法功能(也不能创建索引加速),需要取得全部的 Rank 然后应用程序自己拼接。 ![image](sequence.png) diff --git a/docs-2.0/8.service-tuning/loop-property.png b/docs-2.0/8.service-tuning/loop-property.png new file mode 100644 index 0000000000..467b59f82a Binary files /dev/null and b/docs-2.0/8.service-tuning/loop-property.png differ diff --git a/docs-2.0/nebula-algorithm.md b/docs-2.0/nebula-algorithm.md index 4c5acf8246..98919848ba 100644 --- a/docs-2.0/nebula-algorithm.md +++ b/docs-2.0/nebula-algorithm.md @@ -16,7 +16,7 @@ ## 使用限制 -- 点 ID 的数据必须为整数,即点 ID 可以是 INT 类型,或者是 String 类型但数据本身为整数。 +- 直接提交算法包时,点 ID 的数据必须为整数,即点 ID 可以是 INT 类型,或者是 String 类型但数据本身为整数。 - 对于非整数的 String 类型数据,推荐使用调用算法接口的方式,可以使用 SparkSQL 的`dense_rank`函数进行编码,将 String 类型转换为 Long 类型。 @@ -39,6 +39,7 @@ Nebula Algorithm 支持的图计算算法如下。 | GraphTriangleCount | 全图三角形计数 |网络结构及紧密程度分析| | BetweennessCentrality | 介数中心性 |关键节点挖掘,节点影响力计算| | DegreeStatic | 度统计 |图结构分析| + | ClusteringCoefficient | 聚集系数 |推荐、电信诈骗分析| ## 实现方法 @@ -96,7 +97,7 @@ Nebula Algorithm 实现图计算的流程如下: ``` -2. 传入参数调用算法(以 PageRank 为例)。更多算法请参见[测试用例](https://github.com/vesoft-inc/nebula-algorithm/tree/master/nebula-algorithm/src/test/scala/com/vesoft/nebula/algorithm/lib)。 +2. 传入参数调用算法(以 PageRank 为例)。更多调用示例请参见[示例](https://github.com/vesoft-inc/nebula-algorithm/tree/master/example/src/main/scala/com/vesoft/nebula/algorithm)。 !!! note @@ -107,6 +108,8 @@ Nebula Algorithm 实现图计算的流程如下: val louvainResult = PageRankAlgo.apply(spark, data, prConfig, false) ``` + 如果用户的节点 ID 是 String 类型,可以参考 PageRank 的[示例](https://github.com/vesoft-inc/nebula-algorithm/blob/master/example/src/main/scala/com/vesoft/nebula/algorithm/PageRankExample.scala)。示例中进行了 ID 转换,将 String 类型编码为 Long 类型, 并在算法结果中将 Long 类型 ID 解码为原始的 String 类型。 + ### 直接提交算法包 !!! note diff --git a/docs-2.0/nebula-console.md b/docs-2.0/nebula-console.md new file mode 100644 index 0000000000..484d740bb2 --- /dev/null +++ b/docs-2.0/nebula-console.md @@ -0,0 +1,179 @@ +# 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; + ``` + +- 查看指定参数,命令如下: + + ```ngql + nebula> :params ; + ``` + +- 删除指定参数,命令如下: + + ```ngql + nebula> :param =>; + ``` + +## 导出执行结果 + +导出命令执行的返回结果,可以保存为 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/nebula-dashboard-ent/1.what-is-dashboard-ent.md b/docs-2.0/nebula-dashboard-ent/1.what-is-dashboard-ent.md index 53b8adef08..b47db1947c 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 8a79fda945..1ae5224d03 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`的数据库。 - 确保在安装开始前,以下端口处于未被使用状态。 @@ -26,7 +22,7 @@ !!! enterpriseonly - License 仅在企业版提供,请发送邮件至 inquiry@vesoft.com。 + License 仅在企业版提供,申请 License 需填写 [Nebula Dashboard 试用申请](https://wj.qq.com/s2/9437467/b3b1)。 ## 安装及启动 @@ -34,7 +30,7 @@ !!! enterpriseonly - Dashboard 仅在企业版提供,点击[定价](https://nebula-graph.com.cn/pricing/) 查看更多。 + Dashboard 仅在企业版提供,点击[定价](https://nebula-graph.com.cn/pricing/)查看更多。 2. 使用`tar -xzvf`解压 tar 包。 diff --git a/docs-2.0/nebula-dashboard-ent/3.create-import-dashboard/2.import-cluster.md b/docs-2.0/nebula-dashboard-ent/3.create-import-dashboard/2.import-cluster.md index 85f29dd27f..5ac4595f35 100644 --- a/docs-2.0/nebula-dashboard-ent/3.create-import-dashboard/2.import-cluster.md +++ b/docs-2.0/nebula-dashboard-ent/3.create-import-dashboard/2.import-cluster.md @@ -6,11 +6,15 @@ !!! caution - - 在同一集群下,服务需要统一版本。不支持在同一集群中导入不同版本的 Nebula Graph 实例。 - - Nebula Graph 的安装路径需要为默认安装路径`/usr/local`。 + 在同一集群下,服务需要统一版本。不支持在同一集群中导入不同版本的 Nebula Graph 实例。 -1. 在集群管理页面,点击 **导入集群** 标签。 -2. 在导入集群页面,输入连接 Nebula Graph 的信息: + +1. 在各个服务的配置文件中,将`_server_addrs`和`local_ip`中的IP地址改为本机的IP地址,然后启动服务。 + + 具体步骤,参见[配置管理](../../5.configurations-and-logs/1.configurations/1.configurations.md)和[管理服务](../../4.deployment-and-installation/manage-service.md)。 + +2. 在集群管理页面,点击 **导入集群** 标签。 +3. 在导入集群页面,输入连接 Nebula Graph 的信息: - Graphd Host:<其中一个 Graphd 进程的虚机 IP>:<端口号>。本示例设置为 `192.168.8.157:9669`。 - 用户名:连接 Nebula Graph 的账号,本示例设置为`vesoft`。 - 密码:连接 Nebula Graph 的密码,本示例设置为`nebula`。 @@ -26,9 +30,12 @@ - 输入集群的名称,最大可输入 15 个字符,本示例设置为`create_1027`。 - 对节点进行 **授权**,授权需输入每个节点的 SSH 用户名及密码。 - **批量授权**需要上传 CSV 文件。请根据下载的 CSV 文件,编辑每个节点授权信息,尽量确保节点信息正确,否则容易造成上传失败。 - ![批量授权](../figs/ds-026.png) + + ![批量授权](../figs/ds-026.png) + - 页面中节点状态变为 **已授权**,则该节点授权成功。 - ![授权](../figs/ds-027.png) + + ![授权](../figs/ds-027.png) 4. 确保所有节点都授权成功,点击 **导入集群**。 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 937122969b..89ba9accc3 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-ent/8.faq.md b/docs-2.0/nebula-dashboard-ent/8.faq.md index dae8adb236..d49a25541a 100644 --- a/docs-2.0/nebula-dashboard-ent/8.faq.md +++ b/docs-2.0/nebula-dashboard-ent/8.faq.md @@ -44,3 +44,8 @@ Meta 服务主要存储 Nebula Graph 数据库中的元数据。一旦 Meta 服 ## 是否可以手动添加 Nebula Graph 安装包? Dashboard 支持手动添加安装包,可以点击[如何获取 Nebula Graph](https://nebula-graph.com.cn/download/) 下载所需系统和版本的 RPM 包或 DEB 包,添加到`dashboard/download/nebula-graph`路径下。在创建、扩容集群时,可选择添加的包进行部署。 + + +## 为什么导入集群时,提示“权限不足”? + +导入集群的时候,需要访问服务安装的路径。如果操作服务的账号没有访问权限的话,无法成功导入集群。用户可授予操作账号访问服务的权限,然后使用操作账号重启服务。 \ No newline at end of file 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 0fefb5630b..cf78d052d4 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 c80a712419..47f940a396 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 34854bba09..7f2e38c4ff 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`| 空闲内存| + ### 负载 |参数|说明| 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 e74887ba82..92547dc7ae 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/about-exchange/ex-ug-what-is-exchange.md b/docs-2.0/nebula-exchange/about-exchange/ex-ug-what-is-exchange.md index 5b637cfa64..7c6dcc0a7c 100644 --- a/docs-2.0/nebula-exchange/about-exchange/ex-ug-what-is-exchange.md +++ b/docs-2.0/nebula-exchange/about-exchange/ex-ug-what-is-exchange.md @@ -8,7 +8,7 @@ Exchange 由 Reader、Processor 和 Writer 三部分组成。Reader 读取不同 ## 版本系列 -Exchange 有社区版和企业版两个系列。社区版在 [GitHub](https://github.com/vesoft-inc/nebula-exchange) 开源开发,企业版除了支持社区版的功能,还增加了额外的特性,详情参见[版本对比](https://nebula-graph.com.cn/pricing/)。 +Exchange 有社区版和企业版两个系列,二者功能不同。社区版在 [GitHub](https://github.com/vesoft-inc/nebula-exchange) 开源开发,企业版属于 Nebula Graph 企业套餐,详情参见[版本对比](https://nebula-graph.com.cn/pricing/)。 ## 适用场景 @@ -76,9 +76,9 @@ Exchange {{exchange.release}} 支持将以下格式或来源的数据转换为 N - 发布/订阅消息平台:[Apache Pulsar 2.4.5](../use-exchange/ex-ug-import-from-pulsar.md) -除了用 nGQL 语句的形式导入数据,Exchange 还支持将数据源的数据生成 SST 文件,然后通过 Console[导入 SST 文件](../use-exchange/ex-ug-import-from-sst.md)。 +除了用 nGQL 语句的形式导入数据,Exchange 还支持将数据源的数据生成 SST 文件,然后通过 Console [导入 SST 文件](../use-exchange/ex-ug-import-from-sst.md)。 -此外,企业版 Exchange 还支持以 Nebula Graph 为源,将数据[导出到 CSV 文件](../use-exchange/ex-ug-export-from-nebula.md)。 +此外,企业版 Exchange 支持以 Nebula Graph 为源,将数据[导出到 CSV 文件](../use-exchange/ex-ug-export-from-nebula.md)。 ## 更新说明 diff --git a/docs-2.0/nebula-exchange/ex-ug-FAQ.md b/docs-2.0/nebula-exchange/ex-ug-FAQ.md index df8f2bc4f1..40867bfd3c 100644 --- a/docs-2.0/nebula-exchange/ex-ug-FAQ.md +++ b/docs-2.0/nebula-exchange/ex-ug-FAQ.md @@ -116,6 +116,31 @@ nebula-exchange-2.0.0.jar \ -c application.conf ``` +### Q:Hive 数据导入时提示 schema 版本不一致 + +Spark 日志提示 `Hive Schema version 1.2.0 does not match metastore's schema version 2.1.0 Metastore is not upgraded or corrupt` 的原因是 Hive 环境中配置的 metastore schema 版本和 Spark 使用的 metastore 版本不一致。 + +解决方法: + +1. 将 Hive 环境中存储 Hive metastore 信息的 MySQL version 信息更新为 Spark 中使用的 metastore 版本。 + + 假设 Hive 在 MySQL 中存储 metastore 的数据库是`hive`,需要按如下方式修改 `hive.VERSION` 表中的 `version` 字段: + + ``` + update hive.VERSION set SCHEMA_VERSION="2.1.0" where VER_ID=1 + ``` + +2. 在 Hive 环境的 `hive-site.xml` 文件中增加如下配置: + + ``` + + hive.metastore.schema.verification + false + + ``` + +3. 重启 Hive。 + ## 配置问题 ### Q:哪些配置项影响导入性能? diff --git a/docs-2.0/nebula-exchange/ex-ug-compile.md b/docs-2.0/nebula-exchange/ex-ug-compile.md index 9e2b153815..566bbf330b 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)查看最新版本。 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 48b30248a7..e280626477 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 @@ -50,6 +50,7 @@ |`nebula.pswd`|string|-|是|用户名对应的密码。| |`nebula.space`|string|-|是|需要导入数据的的图空间名称。| |`nebula.ssl.enable.graph`|bool|`false`|是|开启 Exchange 与 Graph 服务之间的 [SSL 加密](https://en.wikipedia.org/wiki/Transport_Layer_Security)传输。当值为`true`时开启,下方的 SSL 相关参数生效。如果 Exchange 运行在多机集群上,在设置以下 SSL 相关路径时,需要在每台机器的相同路径都存储相应的文件。| +|`nebula.ssl.enable.meta`|bool|`false`|是|开启 Exchange 与 Meta 服务之间的 SSL 加密传输。当值为`true`时开启,下方的 SSL 相关参数生效。如果 Exchange 运行在多机集群上,在设置以下 SSL 相关路径时,需要在每台机器的相同路径都存储相应的文件。| |`nebula.ssl.sign`|string|`ca`|是|签名方式,可选值:`ca`(CA 签名)或`self`(自签名)。| |`nebula.ssl.ca.param.caCrtFilePath`|string|`"/path/caCrtFilePath"`|是|`nebula.ssl.sign`的值为`ca`时生效,用于指定 CA 证书的存储路径。| |`nebula.ssl.ca.param.crtFilePath`|string|`"/path/crtFilePath"`|是|`nebula.ssl.sign`的值为`ca`时生效,用于指定 CRT 证书的存储路径。| @@ -116,6 +117,7 @@ |`tags.accessKeyId`|string|-|是|MaxCompute 服务的 accessKeyId。| |`tags.accessKeySecret`|string|-|是|MaxCompute 服务的 accessKeySecret。| |`tags.partitionSpec`|string|-|否|MaxCompute 表的分区描述。| +|`tags.numPartitions`|int|`1`|否|MaxCompute 的 Spark 连接器在读取 MaxCompute 数据时使用的分区数。| |`tags.sentence`|string|-|否|查询数据源的语句。SQL 语句中的表名和上方 table 的值相同。| ### Neo4j 源特有参数 @@ -177,7 +179,7 @@ |`tags.topic`|string|-|是|消息类别。| |`tags.interval.seconds`|int|`10`|是|读取消息的间隔。单位:秒。| -### SST 源特有参数 +### 生成 SST 时的特有参数 |参数|数据类型|默认值|是否必须|说明| |:---|:---|:---|:---|:---| diff --git a/docs-2.0/nebula-exchange/use-exchange/ex-ug-export-from-nebula.md b/docs-2.0/nebula-exchange/use-exchange/ex-ug-export-from-nebula.md index e21c69675e..bc8078550a 100644 --- a/docs-2.0/nebula-exchange/use-exchange/ex-ug-export-from-nebula.md +++ b/docs-2.0/nebula-exchange/use-exchange/ex-ug-export-from-nebula.md @@ -6,10 +6,6 @@ 仅企业版 Exchange 支持导出 Nebula Graph 数据到 CSV 文件。 -!!! note - - 导出 Nebula Graph 数据时不支持 SSL 加密传输。 - ## 环境准备 本示例在 Linux 系统的虚拟机环境下完成,导出数据前准备的软硬件信息如下。 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 aefbbb6f85..52685d35b5 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 diff --git a/docs-2.0/nebula-exchange/use-exchange/ex-ug-import-from-maxcompute.md b/docs-2.0/nebula-exchange/use-exchange/ex-ug-import-from-maxcompute.md index ef449c4e84..c16c1cef83 100644 --- a/docs-2.0/nebula-exchange/use-exchange/ex-ug-import-from-maxcompute.md +++ b/docs-2.0/nebula-exchange/use-exchange/ex-ug-import-from-maxcompute.md @@ -162,6 +162,9 @@ # MaxCompute 表的分区描述,该配置可选。 partitionSpec:"dt='partition1'" + # MaxCompute 的 Spark 连接器在读取 MaxCompute 数据时使用的分区数。默认为1,该配置可选。 + numPartitions:100 + # 请确保 SQL 语句中的表名和上方 table 的值相同,该配置可选。 sentence:"select id, name, age, playerid from player where id < 10" diff --git a/docs-2.0/nebula-exchange/use-exchange/ex-ug-import-from-mysql.md b/docs-2.0/nebula-exchange/use-exchange/ex-ug-import-from-mysql.md index f9928be0ea..39f33bd0b6 100644 --- a/docs-2.0/nebula-exchange/use-exchange/ex-ug-import-from-mysql.md +++ b/docs-2.0/nebula-exchange/use-exchange/ex-ug-import-from-mysql.md @@ -191,7 +191,7 @@ mysql> desc serve; table:"player" user:"test" password:"123456" - sentence:"select playerid, age, name from basketball.player order by playerid;" + sentence:"select playerid, age, name from basketball order by playerid;" # 在 fields 里指定 player 表中的列名称,其对应的 value 会作为 Nebula Graph 中指定属性。 # fields 和 nebula.fields 里的配置必须一一对应。 @@ -224,7 +224,7 @@ mysql> desc serve; table:"team" user:"test" password:"123456" - sentence:"select teamid, name from basketball.team order by teamid;" + sentence:"select teamid, name from basketball order by teamid;" fields: [name] nebula.fields: [name] @@ -259,7 +259,7 @@ mysql> desc serve; table:"follow" user:"test" password:"123456" - sentence:"select src_player,dst_player,degree from basketball.follow order by src_player;" + sentence:"select src_player,dst_player,degree from basketball order by src_player;" # 在 fields 里指定 follow 表中的列名称,其对应的 value 会作为 Nebula Graph 中指定属性。 # fields 和 nebula.fields 里的配置必须一一对应。 @@ -298,7 +298,7 @@ mysql> desc serve; table:"serve" user:"test" password:"123456" - sentence:"select playerid,teamid,start_year,end_year from basketball.serve order by playerid;" + sentence:"select playerid,teamid,start_year,end_year from basketball order by playerid;" fields: [start_year,end_year] nebula.fields: [start_year,end_year] source: { diff --git a/docs-2.0/nebula-exchange/use-exchange/ex-ug-import-from-sst.md b/docs-2.0/nebula-exchange/use-exchange/ex-ug-import-from-sst.md index b7aa1e0cb9..8160c66674 100644 --- a/docs-2.0/nebula-exchange/use-exchange/ex-ug-import-from-sst.md +++ b/docs-2.0/nebula-exchange/use-exchange/ex-ug-import-from-sst.md @@ -443,12 +443,12 @@ SST 文件是一个内部包含了任意长度的有序键值对集合的文件 运行如下命令将 CSV 源文件生成为 SST 文件。关于参数的说明,请参见[命令参数](../parameter-reference/ex-ug-para-import-command.md)。 ```bash -${SPARK_HOME}/bin/spark-submit --master "local" --conf spark.sql.shuffle.partition= --class com.vesoft.nebula.exchange.Exchange -c +${SPARK_HOME}/bin/spark-submit --master "local" --conf spark.sql.shuffle.partitions= --class com.vesoft.nebula.exchange.Exchange -c ``` !!! note - 生成 SST 文件时,会涉及到 Spark 的 shuffle 操作,请注意在提交命令中增加`spark.sql.shuffle.partition`的配置。 + 生成 SST 文件时,会涉及到 Spark 的 shuffle 操作,请注意在提交命令中增加`spark.sql.shuffle.partitions`的配置。 !!! note @@ -457,7 +457,7 @@ ${SPARK_HOME}/bin/spark-submit --master "local" --conf spark.sql.shuffle.partiti 示例: ```bash -${SPARK_HOME}/bin/spark-submit --master "local" --conf spark.sql.shuffle.partition=200 --class com.vesoft.nebula.exchange.Exchange /root/nebula-exchange/nebula-exchange/target/nebula-exchange-{{exchange.release}}.jar -c /root/nebula-exchange/nebula-exchange/target/classes/sst_application.conf +${SPARK_HOME}/bin/spark-submit --master "local" --conf spark.sql.shuffle.partitions=200 --class com.vesoft.nebula.exchange.Exchange /root/nebula-exchange/nebula-exchange/target/nebula-exchange-{{exchange.release}}.jar -c /root/nebula-exchange/nebula-exchange/target/classes/sst_application.conf ``` 任务执行完成后,可以在 HDFS 上的`/sst`目录(`nebula.path.remote`参数指定)内查看到生成的 SST 文件。 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 630c2252f4..1007b2b150 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) diff --git a/docs-2.0/nebula-explorer/deploy-connect/ex-ug-deploy.md b/docs-2.0/nebula-explorer/deploy-connect/ex-ug-deploy.md index 0d6e0bebe2..f65ee2de77 100644 --- a/docs-2.0/nebula-explorer/deploy-connect/ex-ug-deploy.md +++ b/docs-2.0/nebula-explorer/deploy-connect/ex-ug-deploy.md @@ -33,6 +33,11 @@ - 使用的 Linux 发行版为 CentOS。 - 安装有版本为 1.13 及以上的 Go。 +- 准备 License。 + + !!! enterpriseonly + + License 仅在企业版提供,申请 License 需填写 [Nebula Explorer 试用申请](https://wj.qq.com/s2/9414111/81f4)。 ### 安装 @@ -66,10 +71,6 @@ $ cp -r nebula.license /usr/local/nebula-explorer ``` - !!! enterpriseonly - - License 仅在企业版提供,请发送邮件至 inquiry@vesoft.com。 - 4. 添加 License 后需要使用以下命令停止并重启服务。 ```bash @@ -119,6 +120,11 @@ $ sudo rpm -e nebula-explorer-.x86_64 - 使用的 Linux 发行版为 CentOS。 - 安装有版本为 1.13 及以上的 Go。 +- 准备 License。 + + !!! enterpriseonly + + License 仅在企业版提供,申请 License 需填写 [Nebula Explorer 试用申请](https://wj.qq.com/s2/9414111/81f4)。 ### 安装及部署 @@ -145,10 +151,6 @@ $ sudo rpm -e nebula-explorer-.x86_64 $ cp -r nebula.license /usr/local/nebula-explorer ``` - !!! enterpriseonly - - License 仅在企业版提供,请发送邮件至 inquiry@vesoft.com。 - 4. 进入`nebula-explorer`文件夹,启动 explorer。 ```bash diff --git a/docs-2.0/nebula-flink-connector.md b/docs-2.0/nebula-flink-connector.md index 718ba4dc0c..5784192c90 100644 --- a/docs-2.0/nebula-flink-connector.md +++ b/docs-2.0/nebula-flink-connector.md @@ -16,4 +16,4 @@ Nebula Flink Connector 适用于以下场景: ## 更新说明 -[Release](https://github.com/vesoft-inc/nebula-flink-connector/releases/tag/{{flinkconnector.tag}}) +[Release notes](https://github.com/vesoft-inc/nebula-flink-connector/releases/tag/{{flinkconnector.tag}}) diff --git a/docs-2.0/nebula-operator/8.custom-cluster-configurations/8.1.custom-conf-parameter.md b/docs-2.0/nebula-operator/8.custom-cluster-configurations/8.1.custom-conf-parameter.md index ab8cdcc037..f4a8115f11 100644 --- a/docs-2.0/nebula-operator/8.custom-cluster-configurations/8.1.custom-conf-parameter.md +++ b/docs-2.0/nebula-operator/8.custom-cluster-configurations/8.1.custom-conf-parameter.md @@ -18,7 +18,7 @@ Config map[string]string `json:"config,omitempty"` ## 操作步骤 -以下示例使用名为`nebula`的集群说明如何在 YAML 中为集群的 Graph 服务配置`config`: +以下示例使用名为`nebula`的集群、名为`nebula_cluster.yaml`的 YAML 配置文件,说明如何为集群的 Graph 服务配置`config`: 1. 执行以下命令进入`nebula`集群的编辑页面。 @@ -57,6 +57,8 @@ Config map[string]string `json:"config,omitempty"` ... ``` +3. 执行`kubectl apply -f nebula_cluster.yaml`使上述更新生效。 + 在自定义参数`enable_authorize`和`auth_type`后,Graph 服务对应的 ConfigMap(`nebula-graphd`)中的配置将被覆盖。 ## 更多信息 diff --git a/docs-2.0/nebula-operator/8.custom-cluster-configurations/8.2.pv-reclaim.md b/docs-2.0/nebula-operator/8.custom-cluster-configurations/8.2.pv-reclaim.md index 64780af087..18ca789f91 100644 --- a/docs-2.0/nebula-operator/8.custom-cluster-configurations/8.2.pv-reclaim.md +++ b/docs-2.0/nebula-operator/8.custom-cluster-configurations/8.2.pv-reclaim.md @@ -12,7 +12,7 @@ Nebula Operator 使用持久化卷 PV(Persistent Volume)和持久化卷声 ## 操作步骤 -以下示例使用名为`nebula`的集群说明如何设置`enablePVReclaim`: +以下示例使用名为`nebula`的集群、名为`nebula_cluster.yaml`的 YAML 配置文件,说明如何设置`enablePVReclaim`: 1. 执行以下命令进入`nebula`集群的编辑页面。 @@ -96,3 +96,5 @@ Nebula Operator 使用持久化卷 PV(Persistent Volume)和持久化卷声 version: {{nebula.branch}} ... ``` + + 3. 执行`kubectl apply -f nebula_cluster.yaml`使上述更新生效。 diff --git a/docs-2.0/nebula-operator/8.custom-cluster-configurations/8.3.balance-data-when-scaling-storage.md b/docs-2.0/nebula-operator/8.custom-cluster-configurations/8.3.balance-data-when-scaling-storage.md index 22e8f70b91..a432d970dc 100644 --- a/docs-2.0/nebula-operator/8.custom-cluster-configurations/8.3.balance-data-when-scaling-storage.md +++ b/docs-2.0/nebula-operator/8.custom-cluster-configurations/8.3.balance-data-when-scaling-storage.md @@ -12,7 +12,7 @@ Nebula Graph 的 Storage 服务的扩容分为两个阶段,第一个阶段等 ## 操作步骤 -以下示例使用名为`nebula`的集群说明如何设置`enableAutoBalance`: +以下示例使用名为`nebula`的集群、名为`nebula_cluster.yaml`的 YAML 配置文件,说明如何设置`enableAutoBalance`: 1. 执行以下命令进入`nebula`集群的编辑页面。 @@ -101,4 +101,6 @@ Nebula Graph 的 Storage 服务的扩容分为两个阶段,第一个阶段等 - 当设置`enableAutoBalance`的值为`false`时,表示扩容后不会均衡 Storage 数据。 - - 当不设置`enableAutoBalance`参数时,默认扩容 Storage 后系统不会自动均衡 Storage 数据。 \ No newline at end of file + - 当不设置`enableAutoBalance`参数时,默认扩容 Storage 后系统不会自动均衡 Storage 数据。 + +3. 执行`kubectl apply -f nebula_cluster.yaml`使上述更新生效。 \ No newline at end of file diff --git a/docs-2.0/nebula-plato.md b/docs-2.0/nebula-plato.md new file mode 100644 index 0000000000..6f3612a1c0 --- /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/docs-2.0/nebula-spark-connector.md b/docs-2.0/nebula-spark-connector.md index 8619cd7089..733c3e187b 100644 --- a/docs-2.0/nebula-spark-connector.md +++ b/docs-2.0/nebula-spark-connector.md @@ -40,9 +40,11 @@ Nebula Spark Connector {{sparkconnector.release}}版本特性如下: - 支持`insert`、`update`和`delete`三种写入模式。`insert`模式会插入(覆盖)数据,`update`模式仅会更新已存在的数据,`delete`模式只删除数据。 +- 支持与 Nebula Graph 之间的 SSL 加密连接。 + ## 更新说明 -[Release](https://github.com/vesoft-inc/nebula-spark-connector/releases/tag/{{sparkconnector.tag}}) +[Release notes](https://github.com/vesoft-inc/nebula-spark-connector/releases/tag/{{sparkconnector.tag}}) ## 获取 Nebula Spark Connector @@ -169,7 +171,7 @@ val nebulaWriteVertexConfig: WriteNebulaVertexConfig = WriteNebulaVertexConfig .withVidAsProp(true) .withUser("root") .withPasswd("nebula") - .withBatch(1000) + .withBatch(512) .build() df.write.nebula(config, nebulaWriteVertexConfig).writeVertices() @@ -187,7 +189,7 @@ val nebulaWriteEdgeConfig: WriteNebulaEdgeConfig = WriteNebulaEdgeConfig .withRankAsProperty(true) .withUser("root") .withPasswd("nebula") - .withBatch(1000) + .withBatch(512) .build() df.write.nebula(config, nebulaWriteEdgeConfig).writeEdges() ``` @@ -206,7 +208,7 @@ val nebulaWriteVertexConfig = WriteNebulaVertexConfig .withTag("person") .withVidField("id") .withVidAsProp(true) - .withBatch(1000) + .withBatch(512) .withWriteMode(WriteMode.UPDATE) .build() df.write.nebula(config, nebulaWriteVertexConfig).writeVertices() @@ -231,7 +233,7 @@ df.write.nebula(config, nebulaWriteVertexConfig).writeVertices() |`withVidAsProp` |否| DataFrame 中作为点 ID 的列是否也作为属性写入。默认值为`false`。如果配置为`true`,请确保 Tag 中有和`VidField`相同的属性名。 | |`withUser` |否| Nebula Graph 用户名。若未开启[身份验证](7.data-security/1.authentication/1.authentication.md),无需配置用户名和密码。 | |`withPasswd` |否| Nebula Graph 用户名对应的密码。 | - |`withBatch` |是| 一次写入的数据行数。默认值为`1000`. | + |`withBatch` |是| 一次写入的数据行数,默认值为`512`。当`withWriteMode`为`update`时,该参数的最大值为`512`。 | |`withWriteMode`|否|写入模式。可选值为`insert`和`update`。默认为`insert`。| - `WriteNebulaEdgeConfig`是写入边的配置,说明如下。 @@ -250,5 +252,9 @@ df.write.nebula(config, nebulaWriteVertexConfig).writeVertices() |`withRankAsProperty` |否| DataFrame 中作为 rank 的列是否也作为属性写入。默认值为`false`。如果配置为`true`,请确保 Edge type 中有和`RankField`相同的属性名。 | |`withUser` |否| Nebula Graph 用户名。若未开启[身份验证](7.data-security/1.authentication/1.authentication.md),无需配置用户名和密码。 | |`withPasswd` |否| Nebula Graph 用户名对应的密码。 | - |`withBatch` |是| 一次写入的数据行数。默认值为`1000`. | + |`withBatch` |是| 一次写入的数据行数,默认值为`512`。当`withWriteMode`为`update`时,该参数的最大值为`512`。 | |`withWriteMode`|否|写入模式。可选值为`insert`和`update`。默认为`insert`。| + +### 示例代码 + +详细的使用方式参见 [示例代码](https://github.com/vesoft-inc/nebula-spark-connector/tree/{{sparkconnector.branch}}/example/src/main/scala/com/vesoft/nebula/examples/connector)。 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 b956ef5941..517be590e8 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)。 ## 发行版本 diff --git a/docs-2.0/nebula-studio/quick-start/st-ug-create-schema.md b/docs-2.0/nebula-studio/quick-start/st-ug-create-schema.md index 938e797ff2..d3b1e13290 100644 --- a/docs-2.0/nebula-studio/quick-start/st-ug-create-schema.md +++ b/docs-2.0/nebula-studio/quick-start/st-ug-create-schema.md @@ -43,29 +43,29 @@ 3. 在命令行中,依次输入以下语句,并点击 ![表示运行的图标](../figs/st-ug-008.png "Run 图标") 图标。 ```nGQL - -- 创建 Tag player,带有 2 个属性 + // 创建 Tag player,带有 2 个属性 CREATE TAG player(name string, age int); - -- 创建 Tag team,带有 1 个属性 + // 创建 Tag team,带有 1 个属性 CREATE TAG team(name string); - -- 创建 Edge type follow,带有 1 个属性 + // 创建 Edge type follow,带有 1 个属性 CREATE EDGE follow(degree int); - -- 创建 Edge type serve,带有 2 个属性 + // 创建 Edge type serve,带有 2 个属性 CREATE EDGE serve(start_year int, end_year int); ``` 至此,用户已经完成了 Schema 创建。用户可以运行以下语句查看 Tag 与 Edge type 的定义是否正确、完整。 ```nGQL --- 列出当前图空间中所有 Tag +// 列出当前图空间中所有 Tag SHOW TAGS; --- 列出当前图空间中所有 Edge type +// 列出当前图空间中所有 Edge type SHOW EDGES; --- 查看每种 Tag 和 Edge type 的结构是否正确 +// 查看每种 Tag 和 Edge type 的结构是否正确 DESCRIBE TAG player; DESCRIBE TAG team; DESCRIBE EDGE follow; diff --git a/docs-2.0/nebula-studio/use-console/st-ug-visualize-subgraph.md b/docs-2.0/nebula-studio/use-console/st-ug-visualize-subgraph.md index c1e63fbd28..84d7108ff8 100644 --- a/docs-2.0/nebula-studio/use-console/st-ug-visualize-subgraph.md +++ b/docs-2.0/nebula-studio/use-console/st-ug-visualize-subgraph.md @@ -33,7 +33,7 @@ Studio v{{ studio.release }} 及以后版本。请更新版本,详细操作参 查询语句示例如下: ```nGQL - nebula> FIND ALL PATH FROM "player114" to "player100" OVER follow; + nebula> FIND ALL PATH FROM "player114" to "player100" OVER follow YIELD path AS p; ``` 查询得到如下图所示路径信息。 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 254c4e680d..99eebca12d 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; -+-------------+ -| follow._dst | -+-------------+ -| "player101" | -| "player125" | -+-------------+ -Got 2 rows (time spent 2602/3214 us) - -Fri, 20 Aug 2021 06:36:05 UTC - -+-------------+ -| follow._dst | -+-------------+ -| "player101" | -| "player125" | -+-------------+ -Got 2 rows (time spent 583/849 us) - -Fri, 20 Aug 2021 06:36:05 UTC - -+-------------+ -| follow._dst | -+-------------+ -| "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 5c8715d18e..c70721f429 100755 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -63,8 +63,8 @@ extra: base100: 1.0.0 release: 2.1.0 exchange_ent: - release: 2.6.0 - branch: v2.6 + release: 2.6.1 + branch: v2.6.1 exchange: release: 2.6.1 branch: v2.6 @@ -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 @@ -194,10 +197,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 +230,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 @@ -368,6 +372,8 @@ nav: - 用户服务条款: nebula-cloud/7.terms-and-conditions.md - 隐私政策条款: nebula-cloud/8.privacy-policy.md + - Nebula Console: nebula-console.md + - Nebula Graph Studio: - Studio 版本更新说明: nebula-studio/about-studio/st-ug-release-note.md - 认识 Nebula Graph Studio: @@ -488,6 +494,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 @@ -545,7 +553,7 @@ plugins: # - '.*\.(tmp|bin|tar)$' - with-pdf: - copyright: 2021 Vesoft Inc. + copyright: 2021 vesoft Inc. cover_subtitle: master sinnce 2.6.1 author: 吴敏,周瑶,梁振亚,杨怡璇,黄凤仙 cover: true