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 9923507b187..81294382fc0 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
@@ -85,6 +85,10 @@ In this topic, we will use the following dataset to demonstrate basic CRUD opera
nebula> CREATE SPACE basketballplayer(partition_num=15, replica_factor=1, vid_type=fixed_string(30));
```
+ !!! note
+
+ If the system returns the error `[ERROR (-1005)]: Host not enough!`, check whether [registered the Storage Service](../2.quick-start/3.1add-storage-hosts.md).
+
2. Check the partition distribution with `SHOW HOSTS` to make sure that the partitions are distributed in a balanced way.
```ngql
diff --git a/docs-2.0/2.quick-start/6.cheatsheet-for-ngql.md b/docs-2.0/2.quick-start/6.cheatsheet-for-ngql.md
index 725cca1fe0b..6818a1cd1d8 100644
--- a/docs-2.0/2.quick-start/6.cheatsheet-for-ngql.md
+++ b/docs-2.0/2.quick-start/6.cheatsheet-for-ngql.md
@@ -31,7 +31,7 @@
| bit_and() | Bitwise AND. |
| bit_or() | Bitwise OR. |
| bit_xor() | Bitwise XOR. |
- | int size() | Returns the number of elements in a list or a map. |
+ | int size() | Returns the number of elements in a list or a map or the length of a string. |
| int range(int start, int end, int step) | Returns a list of integers from `[start,end]` in the specified steps. `step` is 1 by default. |
| int sign(double x) | Returns the signum of the given number.
If the number is `0`, the system returns `0`.
If the number is negative, the system returns `-1`.
If the number is positive, the system returns `1`. |
| double e() | Returns the base of the natural logarithm, e (2.718281828459045). |
@@ -60,7 +60,7 @@
|string toLower(string a) | The same as `lower()`. |
|string upper(string a) | Returns the argument in uppercase. |
|string toUpper(string a) | The same as `upper()`. |
- |int length(string a) | Returns the length of the given string in bytes. |
+ |int length(a) | Returns the length of the given string in bytes or the length of a path in hops. |
|string trim(string a) | Removes leading and trailing spaces. |
|string ltrim(string a) | Removes leading spaces. |
|string rtrim(string a) | Removes trailing spaces. |
@@ -82,13 +82,13 @@
|Function| Description |
|---- | ----|
- |int now() | Returns the current date and time of the system timezone. |
- |timestamp timestamp() | Returns the current date and time of the system timezone. |
+ |int now() | Returns the current timestamp of the system. |
+ |timestamp timestamp() | Returns the current timestamp of the system. |
|date date() | Returns the current UTC date based on the current system. |
|time time() | Returns the current UTC time based on the current system. |
|datetime datetime() | Returns the current UTC date and time based on the current system. |
-* [Schema functions](../3.ngql-guide/6.functions-and-expressions/4.schema.md)
+* [Schema-related functions](../3.ngql-guide/6.functions-and-expressions/4.schema.md)
* For nGQL statements
@@ -185,14 +185,14 @@
| Match vertices | `(v)` | You can use a user-defined variable in a pair of parentheses to represent a vertex in a pattern. For example: `(v)`. |
| Match tags | `MATCH (v:player) RETURN v` | You can specify a tag with `:` after the vertex in a pattern. |
| Match multiple tags | `MATCH (v:player:team) RETURN v LIMIT 10` | To match vertices with multiple tags, use colons (:). |
- | Match vertex properties | `MATCH (v:player{name:"Tim Duncan"}) RETURN v` | You can specify a vertex property with `{: }` after the tag in a pattern. |
+ | Match vertex properties | `MATCH (v:player{name:"Tim Duncan"}) RETURN v`
`MATCH (v) WITH v, properties(v) as props, keys(properties(v)) as kk LIMIT 10000 WHERE [i in kk where props[i] == "Tim Duncan"] RETURN v` | You can specify a vertex property with `{: }` after the tag in a pattern; or use a vertex property value to get vertices directly. |
| Match a VID. | `MATCH (v) WHERE id(v) == 'player101' RETURN v` | You can use the VID to match a vertex. The `id()` function can retrieve the VID of a vertex. |
| Match multiple VIDs. | `MATCH (v:player { name: 'Tim Duncan' })--(v2) WHERE id(v2) IN ["player101", "player102"] RETURN v2` | To match multiple VIDs, use `WHERE id(v) IN [vid_list]`. |
| Match connected vertices | `MATCH (v:player{name:"Tim Duncan"})--(v2) RETURN v2.player.name AS Name` | You can use the `--` symbol to represent edges of both directions and match vertices connected by these edges. You can add a `>` or `<` to the `--` symbol to specify the direction of an edge. |
| Match paths | `MATCH p=(v:player{name:"Tim Duncan"})-->(v2) RETURN p` | Connected vertices and edges form a path. You can use a user-defined variable to name a path as follows. |
| Match edges | `MATCH (v:player{name:"Tim Duncan"})-[e]-(v2) RETURN e`
`MATCH ()<-[e]-() RETURN e LIMIT 3` | Besides using `--`, `-->`, or `<--` to indicate a nameless edge, you can use a user-defined variable in a pair of square brackets to represent a named edge. For example: `-[e]-`. |
| Match an edge type | `MATCH ()-[e:follow]-() RETURN e LIMIT 5` |Just like vertices, you can specify an edge type with `:` in a pattern. For example: `-[e:follow]-`. |
- | Match edge type properties | ` MATCH (v:player{name:"Tim Duncan"})-[e:follow{degree:95}]->(v2) RETURN e` | You can specify edge type properties with `{: }` in a pattern. For example: `[e:follow{likeness:95}]`. |
+ | Match edge type properties | ` MATCH (v:player{name:"Tim Duncan"})-[e:follow{degree:95}]->(v2) RETURN e`
`MATCH ()-[e]->() WITH e, properties(e) as props, keys(properties(e)) as kk LIMIT 10000 WHERE [i in kk where props[i] == 90] RETURN e`| You can specify edge type properties with `{: }` in a pattern. For example: `[e:follow{likeness:95}]`; or use an edge type property value to get edges directly. |
| Match multiple edge types | `MATCH (v:player{name:"Tim Duncan"})-[e:follow | :serve]->(v2) RETURN e` | The `|` symbol can help matching multiple edge types. For example: `[e:follow|:serve]`. The English colon (:) before the first edge type cannot be omitted, but the English colon before the subsequent edge type can be omitted, such as `[e:follow|serve]`. |
| Match multiple edges | `MATCH (v:player{name:"Tim Duncan"})-[]->(v2)<-[e:serve]-(v3) RETURN v2, v3` | You can extend a pattern to match multiple edges in a path. |
| Match fixed-length paths | `MATCH p=(v:player{name:"Tim Duncan"})-[e:follow*2]->(v2) RETURN DISTINCT v2 AS Friends` | You can use the `:*` pattern to match a fixed-length path. `hop` must be a non-negative integer. The data type of `e` is the list.|
diff --git a/docs-2.0/20.appendix/0.FAQ.md b/docs-2.0/20.appendix/0.FAQ.md
index eb8597e5209..4c172e8e808 100644
--- a/docs-2.0/20.appendix/0.FAQ.md
+++ b/docs-2.0/20.appendix/0.FAQ.md
@@ -293,7 +293,7 @@ Or get vertices by each tag, and then group them by yourself.
Yes, for more information, see [Keywords and reserved words](../3.ngql-guide/1.nGQL-overview/keywords-and-reserved-words.md).
-### "How to get the out-degree/the in-degree of a vertex with a given name?"
+### "How to get the out-degree/the in-degree of a given vertex?"
The out-degree of a vertex refers to the number of edges starting from that vertex, while the in-degree refers to the number of edges pointing to that vertex.
@@ -388,9 +388,9 @@ If you have not modified the predefined ports in the [Configurations](../5.confi
| Service | Port |
|---------|---------------------------|
-| Meta | 9559, 9560, 19559, 19560 |
-| Graph | 9669, 19669, 19670 |
-| Storage | 9777 ~ 9780, 19779, 19780 |
+| Meta | 9559, 9560, 19559 |
+| Graph | 9669, 19669 |
+| Storage | 9777 ~ 9780, 19779|
If you have customized the configuration files and changed the predefined ports, find the port numbers in your configuration files and open them on the firewalls.
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 900f714da10..c7a8ab3b092 100644
--- a/docs-2.0/20.appendix/6.eco-tool-version.md
+++ b/docs-2.0/20.appendix/6.eco-tool-version.md
@@ -146,6 +146,18 @@ Docker Compose can quickly deploy NebulaGraph clusters. For how to use it, pleas
|:---|:---|
| {{ nebula.tag }} | {{br.tag}}|
+
+{{ent.ent_begin}}
+## Backup & Restore Enterprise Edition
+
+Backup Restore (BR for short) Enterprise Edition is a Command-Line Interface (CLI) tool. With BR Enterprise Edition, you can back up and restore NebulaGraph Enterprise Edition data.
+
+|NebulaGraph version|BR version|
+|:---|:---|
+| {{ nebula.tag }} | {{br_ent.tag}}|
+
+{{ent.ent_end}}
+
## NebulaGraph Bench
[NebulaGraph Bench](https://github.com/vesoft-inc/nebula-bench/releases/tag/{{bench.tag}}) is used to test the baseline performance data of NebulaGraph. It uses the standard data set of LDBC.
diff --git a/docs-2.0/20.appendix/error-code.md b/docs-2.0/20.appendix/error-code.md
index ee8a0ec46a6..83d7fe214c3 100644
--- a/docs-2.0/20.appendix/error-code.md
+++ b/docs-2.0/20.appendix/error-code.md
@@ -10,180 +10,185 @@ NebulaGraph returns an error code when an error occurs. This topic describes the
- When the code returned is `0`, it means that the operation is successful.
-|Error Code|Description|
-|:---|:---|
-|`-1`| Lost connection |
-|`-2`| Unable to establish connection |
-|`-3`| RPC failure |
-|`-4`| Raft leader has been changed|
-|`-5`| Graph space does not exist |
-|`-6`| Tag does not exist |
-|`-7`| Edge type does not exist |
-|`-8`| Index does not exist|
-|`-9`| Edge type property does not exist|
-|`-10`| Tag property does not exist|
-|`-11`| The current role does not exist|
-|`-12`| The current configuration does not exist|
-|`-13`| The current host does not exist|
-|`-15`| Listener does not exist|
-|`-16`| The current partition does not exist|
-|`-17`| Key does not exist|
-|`-18`| User does not exist|
-|`-19`| Statistics do not exist|
-|`-20`| No current service found|
-|`-21`| Drainer does not exist|
-|`-22`| Drainer client does not exist|
-|`-24`| Backup failed|
-|`-25`| The backed-up table is empty|
-|`-26`| Table backup failure|
-|`-27`| MultiGet could not get all data|
-|`-28`| Index rebuild failed|
-|`-29`| Password is invalid|
-|`-30`| Unable to get absolute path|
-|`-1001`| Authentication failed|
-|`-1002`| Invalid session|
-|`-1003`| Session timeout|
-|`-1004`| Syntax error|
-|`-1005`| Execution error|
-|`-1006`| Statement is empty|
-|`-1008`| Permission denied|
-|`-1009`| Semantic error|
-|`-1010`| Maximum number of connections exceeded|
-|`-1011`| Access to storage failed (only some requests succeeded)|
-|`-2001`| Host does not exist|
-|`-2002`| Host already exists|
-|`-2003`| Invalid host|
-|`-2004`| The current command, statement, or function is not supported|
-|`-2007`| Configuration items cannot be changed|
-|`-2008`| Parameters conflict with meta data|
-|`-2009`| Invalid parameter|
-|`-2010`| Wrong cluster|
-|`-2011`| Listener conflicts|
-|`-2012`| Host not exist|
-|`-2013`| Schema name already exists|
-|`-2014`| There are still indexes related to tag or edge, cannot drop it|
-|`-2015`| There are still some space on the host, cannot drop it|
-|`-2021`| Failed to store data|
-|`-2022`| Illegal storage segment|
-|`-2023`| Invalid data balancing plan|
-|`-2024`| The cluster is already in the data balancing status|
-|`-2025`| There is no running data balancing plan|
-|`-2026`| Lack of valid hosts|
-|`-2027`| A data balancing plan that has been corrupted|
-|`-2029`| Lack of valid drainers|
-|`-2030`| Failed to recover user role|
-|`-2031`| Number of invalid partitions|
-|`-2032`| Invalid replica factor|
-|`-2033`| Invalid character set|
-|`-2034`| Invalid character sorting rules|
-|`-2035`| Character set and character sorting rule mismatch|
-|`-2040`| Failed to generate a snapshot|
-|`-2041`| Failed to write block data|
-|`-2044`| Failed to add new task|
-|`-2045`| Failed to stop task|
-|`-2046`| Failed to save task information|
-|`-2047`| Data balancing failed|
-|`-2048`| The current task has not been completed|
-|`-2049`| Task report failed|
-|`-2050`| The current task is not in the graph space|
-|`-2051`| The current task needs to be resumed|
-|`-2052`| The job status has already been failed or finished |
-|`-2053`| Job default status|
-|`-2054`| The given job do not support stop|
-|`-2055`| The leader distribution has not been reported, so can't send task to storage|
-|`-2065`| Invalid task|
-|`-2066`| Backup terminated (index being created)|
-|`-2067`| Graph space does not exist at the time of backup|
-|`-2068`| Backup recovery failed|
-|`-2069`| Session does not exist|
-|`-2070`| Failed to get cluster information|
-|`-2071`| Failed to get absolute path when getting cluster information|
-|`-2072`| Unable to get an agent when getting cluster information|
-|`-2073`| Query not found|
-|`-2074`| Failed to receive heartbeat from agent|
-|`-2080`| Invalid variable|
-|`-2081`| Variable value and type do not match|
-|`-3001`| Consensus cannot be reached during an election|
-|`-3002`| Key already exists|
-|`-3003`| Data type mismatch|
-|`-3004`| Invalid field value|
-|`-3005`| Invalid operation|
-|`-3006`| Current value is not allowed to be empty|
-|`-3007`| Field value must be set if the field value is `NOT NULL` or has no default value|
-|`-3008`| The value is out of the range of the current type|
-|`-3010`| Data conflict|
-|`-3011`| Writes are delayed|
-|`-3021`| Incorrect data type|
-|`-3022`| Invalid VID length|
-|`-3031`| Invalid filter|
-|`-3032`| Invalid field update|
-|`-3033`| Invalid KV storage|
-|`-3034`| Peer invalid|
-|`-3035`| Out of retries|
-|`-3036`| Leader change failed|
-|`-3037`| Invalid stat type|
-|`-3038`| VID is invalid|
-|`-3040`| Failed to load meta information|
-|`-3041`| Failed to generate checkpoint|
-|`-3042`| Generating checkpoint is blocked|
-|`-3043`| Data is filtered|
-|`-3044`| Invalid data|
-|`-3045`| Concurrent write conflicts on the same edge|
-|`-3046`| Concurrent write conflict on the same vertex |
-|`-3047`| Lock is invalid|
-|`-3051`| Invalid task parameter|
-|`-3052`| The user canceled the task|
-|`-3053`| Task execution failed|
-|`-3060`| Execution plan was cleared|
-|`-3061`| Client and server versions are not compatible|
-|`-3062`| Failed to get ID serial number|
-|`-3070`| The heartbeat process was not completed when the request was received|
-|`-3071`| Out-of-date heartbeat received from the old leader (the new leader has been elected)|
-|`-3073`| Concurrent write conflicts with later requests|
-|`-3500`| Unknown partition|
-|`-3501`| Raft logs lag behind|
-|`-3502`| Raft logs are out of date|
-|`-3503`| Heartbeat messages are out of date|
-|`-3504`| Unknown additional logs|
-|`-3511`| Waiting for the snapshot to complete|
-|`-3512`| There was an error sending the snapshot|
-|`-3513`| Invalid receiver|
-|`-3514`| Raft did not start|
-|`-3515`| Raft has stopped|
-|`-3516`| Wrong role|
-|`-3521`| Write to a WAL failed|
-|`-3522`| The host has stopped|
-|`-3523`| Too many requests|
-|`-3524`| Persistent snapshot failed|
-|`-3525`| RPC exception|
-|`-3526`| No WAL logs found|
-|`-3527`| Host suspended|
-|`-3528`| Writes are blocked|
-|`-3529`| Cache overflow|
-|`-3530`| Atomic operation failed|
-|`-3531`| Leader lease expired|
-|`-3532`| Data has been synchronized on Raft|
-|`-4001`| Drainer logs lag behind|
-|`-4002`| Drainer logs are out of date|
-|`-4003`| The drainer data storage is invalid|
-|`-4004`| Graph space mismatch|
-|`-4005`| Partition mismatch|
-|`-4006`| Data conflict|
-|`-4007`| Request conflict|
-|`-4008`| Illegal data|
-|`-5001`| Cache configuration error|
-|`-5002`| Insufficient space|
-|`-5003`| No cache hit|
-|`-5005`| Write cache failed|
-|`-7001`| Number of machines exceeded the limit|
-|`-7002`| Failed to resolve certificate|
-|`-8000`| Unknown error|
+|Error name|Error Code|Description|
+|:---|:---|:---|
+|`E_DISCONNECTED`|`-1`| Lost connection |
+|`E_FAIL_TO_CONNECT`|`-2`| Unable to establish connection |
+|`E_RPC_FAILURE`|`-3`| RPC failure |
+|`E_LEADER_CHANGED`|`-4`| Raft leader has been changed|
+|`E_SPACE_NOT_FOUND`|`-5`| Graph space does not exist |
+|`E_TAG_NOT_FOUND`|`-6`| Tag does not exist |
+|`E_EDGE_NOT_FOUND`|`-7`| Edge type does not exist |
+|`E_INDEX_NOT_FOUND`|`-8`| Index does not exist|
+|`E_EDGE_PROP_NOT_FOUND`|`-9`| Edge type property does not exist|
+|`E_TAG_PROP_NOT_FOUND`|`-10`| Tag property does not exist|
+|`E_ROLE_NOT_FOUND`|`-11`| The current role does not exist|
+|`E_CONFIG_NOT_FOUND`|`-12`| The current configuration does not exist|
+|`E_MACHINE_NOT_FOUND`|`-13`| The current host does not exist|
+|`E_LISTENER_NOT_FOUND`|`-15`| Listener does not exist|
+|`E_PART_NOT_FOUND`|`-16`| The current partition does not exist|
+|`E_KEY_NOT_FOUND`|`-17`| Key does not exist|
+|`E_USER_NOT_FOUND`|`-18`| User does not exist|
+|`E_STATS_NOT_FOUND`|`-19`| Statistics do not exist|
+|`E_SERVICE_NOT_FOUND`|`-20`| No current service found|
+|`E_BACKUP_FAILED`|`-24`| Backup failed|
+|`E_BACKUP_EMPTY_TABLE`|`-25`| The backed-up table is empty|
+|`E_BACKUP_TABLE_FAILED`|`-26`| Table backup failure|
+|`E_PARTIAL_RESULT`|`-27`| MultiGet could not get all data|
+|`E_REBUILD_INDEX_FAILED`|`-28`| Index rebuild failed|
+|`E_INVALID_PASSWORD`|`-29`| Password is invalid|
+|`E_FAILED_GET_ABS_PATH`|`-30`| Unable to get absolute path|
+|`E_BAD_USERNAME_PASSWORD`|`-1001`| Authentication failed|
+|`E_SESSION_INVALID`|`-1002`| Invalid session|
+|`E_SESSION_TIMEOUT`|`-1003`| Session timeout|
+|`E_SYNTAX_ERROR`|`-1004`| Syntax error|
+|`E_EXECUTION_ERROR`|`-1005`| Execution error|
+|`E_STATEMENT_EMPTY`|`-1006`| Statement is empty|
+|`E_BAD_PERMISSION`|`-1008`| Permission denied|
+|`E_SEMANTIC_ERROR`|`-1009`| Semantic error|
+|`E_TOO_MANY_CONNECTIONS`|`-1010`| Maximum number of connections exceeded|
+|`E_PARTIAL_SUCCEEDED`|`-1011`| Access to storage failed (only some requests succeeded)|
+|`E_NO_HOSTS`|`-2001`| Host does not exist|
+|`E_EXISTED`|`-2002`| Host already exists|
+|`E_INVALID_HOST`|`-2003`| Invalid host|
+|`E_UNSUPPORTED`|`-2004`| The current command, statement, or function is not supported|
+|`E_NOT_DROP`|`-2005`|Not allowed to drop|
+|`E_CONFIG_IMMUTABLE`|`-2007`| Configuration items cannot be changed|
+|`E_CONFLICT`|`-2008`| Parameters conflict with meta data|
+|`E_INVALID_PARM`|`-2009`| Invalid parameter|
+|`E_WRONGCLUSTER`|`-2010`| Wrong cluster|
+|`E_ZONE_NOT_ENOUGH`|`-2011`| Listener conflicts|
+|`E_ZONE_IS_EMPTY`|`-2012`| Host not exist|
+|`E_SCHEMA_NAME_EXISTS`|`-2013`| Schema name already exists|
+|`E_RELATED_INDEX_EXISTS`|`-2014`| There are still indexes related to tag or edge, cannot drop it|
+|`E_RELATED_SPACE_EXISTS`|`-2015`| There are still some space on the host, cannot drop it|
+|`E_STORE_FAILURE`|`-2021`| Failed to store data|
+|`E_STORE_SEGMENT_ILLEGAL`|`-2022`| Illegal storage segment|
+|`E_BAD_BALANCE_PLAN`|`-2023`| Invalid data balancing plan|
+|`E_BALANCED`|`-2024`| The cluster is already in the data balancing status|
+|`E_NO_RUNNING_BALANCE_PLAN`|`-2025`| There is no running data balancing plan|
+|`E_NO_VALID_HOST`|`-2026`| Lack of valid hosts|
+|`E_CORRUPTED_BALANCE_PLAN`|`-2027`| A data balancing plan that has been corrupted|
+|`E_IMPROPER_ROLE`|`-2030`| Failed to recover user role|
+|`E_INVALID_PARTITION_NUM`|`-2031`| Number of invalid partitions|
+|`E_INVALID_REPLICA_FACTOR`|`-2032`| Invalid replica factor|
+|`E_INVALID_CHARSET`|`-2033`| Invalid character set|
+|`E_INVALID_COLLATE`|`-2034`| Invalid character sorting rules|
+|`E_CHARSET_COLLATE_NOT_MATCH`|`-2035`| Character set and character sorting rule mismatch|
+|`E_SNAPSHOT_FAILURE`|`-2040`| Failed to generate a snapshot|
+|`E_BLOCK_WRITE_FAILURE`|`-2041`| Failed to write block data|
+|`E_ADD_JOB_FAILURE`|`-2044`| Failed to add new task|
+|`E_STOP_JOB_FAILURE`|`-2045`| Failed to stop task|
+|`E_SAVE_JOB_FAILURE`|`-2046`| Failed to save task information|
+|`E_BALANCER_FAILURE`|`-2047`| Data balancing failed|
+|`E_JOB_NOT_FINISHED`|`-2048`| The current task has not been completed|
+|`E_TASK_REPORT_OUT_DATE`|`-2049`| Task report failed|
+|`E_JOB_NOT_IN_SPACE`|`-2050`| The current task is not in the graph space|
+|`E_JOB_NEED_RECOVER`|`-2051`| The current task needs to be resumed|
+|`E_JOB_ALREADY_FINISH`|`-2052`| The job status has already been failed or finished |
+|`E_JOB_SUBMITTED`|`-2053`| Job default status|
+|`E_JOB_NOT_STOPPABLE`|`-2054`| The given job do not support stop|
+|`E_JOB_HAS_NO_TARGET_STORAGE`|`-2055`| The leader distribution has not been reported, so can't send task to storage|
+|`E_INVALID_JOB`|`-2065`| Invalid task|
+|`E_BACKUP_BUILDING_INDEX`|`-2066`| Backup terminated (index being created)|
+|`E_BACKUP_SPACE_NOT_FOUND`|`-2067`| Graph space does not exist at the time of backup|
+|`E_RESTORE_FAILURE`|`-2068`| Backup recovery failed|
+|`E_SESSION_NOT_FOUND`|`-2069`| Session does not exist|
+|`E_LIST_CLUSTER_FAILURE`|`-2070`| Failed to get cluster information|
+|`E_LIST_CLUSTER_GET_ABS_PATH_FAILURE`|`-2071`| Failed to get absolute path when getting cluster information|
+|`E_LIST_CLUSTER_NO_AGENT_FAILURE`|`-2072`| Unable to get an agent when getting cluster information|
+|`E_QUERY_NOT_FOUND`|`-2073`| Query not found|
+|`E_AGENT_HB_FAILUE`|`-2074`| Failed to receive heartbeat from agent|
+|`E_CONSENSUS_ERROR`|`-3001`| Consensus cannot be reached during an election|
+|`E_KEY_HAS_EXISTS`|`-3002`| Key already exists|
+|`E_DATA_TYPE_MISMATCH`|`-3003`| Data type mismatch|
+|`E_INVALID_FIELD_VALUE`|`-3004`| Invalid field value|
+|`E_INVALID_OPERATION`|`-3005`| Invalid operation|
+|`E_NOT_NULLABLE`|`-3006`| Current value is not allowed to be empty|
+|`E_FIELD_UNSET`|`-3007`| Field value must be set if the field value is `NOT NULL` or has no default value|
+|`E_OUT_OF_RANGE`|`-3008`| The value is out of the range of the current type|
+|`E_DATA_CONFLICT_ERROR`|`-3010`| Data conflict|
+|`E_WRITE_STALLED`|`-3011`| Writes are delayed|
+|`E_IMPROPER_DATA_TYPE`|`-3021`| Incorrect data type|
+|`E_INVALID_SPACEVIDLEN`|`-3022`| Invalid VID length|
+|`E_INVALID_FILTER`|`-3031`| Invalid filter|
+|`E_INVALID_UPDATER`|`-3032`| Invalid field update|
+|`E_INVALID_STORE`|`-3033`| Invalid KV storage|
+|`E_INVALID_PEER`|`-3034`| Peer invalid|
+|`E_RETRY_EXHAUSTED`|`-3035`| Out of retries|
+|`E_TRANSFER_LEADER_FAILED`|`-3036`| Leader change failed|
+|`E_INVALID_STAT_TYPE`|`-3037`| Invalid stat type|
+|`E_INVALID_VID`|`-3038`| VID is invalid|
+|`E_LOAD_META_FAILED`|`-3040`| Failed to load meta information|
+|`E_FAILED_TO_CHECKPOINT`|`-3041`| Failed to generate checkpoint|
+|`E_CHECKPOINT_BLOCKED`|`-3042`| Generating checkpoint is blocked|
+|`E_FILTER_OUT`|`-3043`| Data is filtered|
+|`E_INVALID_DATA`|`-3044`| Invalid data|
+|`E_MUTATE_EDGE_CONFLICT`|`-3045`| Concurrent write conflicts on the same edge|
+|`E_MUTATE_TAG_CONFLICT`|`-3046`| Concurrent write conflict on the same vertex |
+|`E_OUTDATED_LOCK`|`-3047`| Lock is invalid|
+|`E_INVALID_TASK_PARA`|`-3051`| Invalid task parameter|
+|`E_USER_CANCEL`|`-3052`| The user canceled the task|
+|`E_TASK_EXECUTION_FAILED`|`-3053`| Task execution failed|
+|`E_PLAN_IS_KILLED`|`-3060`| Execution plan was cleared|
+|`E_NO_TERM`|`-3070`| The heartbeat process was not completed when the request was received|
+|`E_OUTDATED_TERM`|`-3071`| Out-of-date heartbeat received from the old leader (the new leader has been elected)|
+|`E_WRITE_WRITE_CONFLICT`|`-3073`| Concurrent write conflicts with later requests|
+|`E_RAFT_UNKNOWN_PART`|`-3500`| Unknown partition|
+|`E_RAFT_LOG_GAP`|`-3501`| Raft logs lag behind|
+|`E_RAFT_LOG_STALE`|`-3502`| Raft logs are out of date|
+|`E_RAFT_TERM_OUT_OF_DATE`|`-3503`| Heartbeat messages are out of date|
+|`E_RAFT_UNKNOWN_APPEND_LOG`|`-3504`| Unknown additional logs|
+|`E_RAFT_WAITING_SNAPSHOT`|`-3511`| Waiting for the snapshot to complete|
+|`E_RAFT_SENDING_SNAPSHOT`|`-3512`| There was an error sending the snapshot|
+|`E_RAFT_INVALID_PEER`|`-3513`| Invalid receiver|
+|`E_RAFT_NOT_READY`|`-3514`| Raft did not start|
+|`E_RAFT_STOPPED`|`-3515`| Raft has stopped|
+|`E_RAFT_BAD_ROLE`|`-3516`| Wrong role|
+|`E_RAFT_WAL_FAIL`|`-3521`| Write to a WAL failed|
+|`E_RAFT_HOST_STOPPED`|`-3522`| The host has stopped|
+|`E_RAFT_TOO_MANY_REQUESTS`|`-3523`| Too many requests|
+|`E_RAFT_PERSIST_SNAPSHOT_FAILED`|`-3524`| Persistent snapshot failed|
+|`E_RAFT_RPC_EXCEPTION`|`-3525`| RPC exception|
+|`E_RAFT_NO_WAL_FOUND`|`-3526`| No WAL logs found|
+|`E_RAFT_HOST_PAUSED`|`-3527`| Host suspended|
+|`E_RAFT_WRITE_BLOCKED`|`-3528`| Writes are blocked|
+|`E_RAFT_BUFFER_OVERFLOW`|`-3529`| Cache overflow|
+|`E_RAFT_ATOMIC_OP_FAILED`|`-3530`| Atomic operation failed|
+|`E_LEADER_LEASE_FAILED`|`-3531`| Leader lease expired|
+|`E_RAFT_CAUGHT_UP`|`-3532`| Data has been synchronized on Raft|
diff --git a/docs-2.0/20.appendix/release-notes/dashboard-ent-release-note.md b/docs-2.0/20.appendix/release-notes/dashboard-ent-release-note.md
index 3fc0475bbc6..4933e91dd88 100644
--- a/docs-2.0/20.appendix/release-notes/dashboard-ent-release-note.md
+++ b/docs-2.0/20.appendix/release-notes/dashboard-ent-release-note.md
@@ -1,5 +1,37 @@
# NebulaGraph Dashboard Enterprise Edition release notes
+## Enterprise Edition v3.2.4
+
+- Enhancement
+
+ - Close experimental features by default when installing NebulaGraph Enterprise Edition 3.1.3 or 3.4.
+
+## Enterprise Edition v3.2.3
+
+- Enhancement
+
+ - Hidden Backup&Restore page if the NebulaGraph Enterprise Edition version is above 3.3.0.
+
+## Enterprise Edition v3.2.2
+
+- Enhancement
+
+ - Delete unnecessary public folders.
+
+- Bugfix
+
+ - Fixed the bug that the RPM and DEB packages could not automatically register services with the Dashboard.
+
+## Enterprise Edition v3.2.1
+
+- Enhancement
+
+ - Add NebulaGraph 3.3.0 version to download list.
+
+- Bugfix
+
+ - Fixed the bug that the BR failed in NebulaGraph Community 3.3.0 version.
+
## Enterprise Edition 3.2.0
- Feature
diff --git a/docs-2.0/20.appendix/release-notes/explorer-release-note.md b/docs-2.0/20.appendix/release-notes/explorer-release-note.md
index 3b71e964a7f..3073e0ba455 100644
--- a/docs-2.0/20.appendix/release-notes/explorer-release-note.md
+++ b/docs-2.0/20.appendix/release-notes/explorer-release-note.md
@@ -1,5 +1,11 @@
# NebulaGraph Explorer release notes
+## v3.2.1
+
+- Bugfix
+ - Fixed the bug that the connection timeout and HTTP error `500` when connecting to a non-existent address.
+ - Fixed the bug that the vertex properties could not be displayed on the canvas when randomly importing vertices.
+
## v3.2.0
- Feature
@@ -23,6 +29,7 @@
- The help page provides introductory videos.
- Workflow supports the configuration of resources on the page.
- Added a white screen page for the crash.
+ - Optimize page loading speed.
- Bugfix
- Fixed the bug that the right-click menu would not collapse automatically.
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 cee24469ea0..8b756f6837d 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
@@ -2,7 +2,7 @@
The `INSERT EDGE` statement inserts an edge or multiple edges into a graph space from a source vertex (given by src_vid) to a destination vertex (given by dst_vid) with a specific rank in NebulaGraph.
-When inserting an edge that already exists, `INSERT VERTEX` **overrides** the edge.
+When inserting an edge that already exists, `INSERT EDGE` **overrides** the edge.
## Syntax
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 2aebd01fdd8..bc7ba12f392 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
@@ -35,8 +35,9 @@ While using the `WHERE` clause in a `GET SUBGRAPH` statement, note the following
- **Only support** the `AND` operator.
- **Only support** filter destination vertex, the vertex format must be `$$.tagName.propName`.
+- **Support** filter edge, the edge format must be `edge_type.propName`.
- **Support** math functions, aggregate functions, string functions, datetime functions, type conversion functions and general functions in list functions.
-- **Not support** aggregate functions, schema functions, conditional expression, predicate functions, geography function and user-defined functions.
+- **Not support** aggregate functions, schema-related functions, conditional expression, predicate functions, geography function and user-defined functions.
## Examples
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 e290b6ceb58..0bd4e23f70c 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
@@ -96,9 +96,9 @@ The `TIMESTAMP` data type is used for values that contain both date and time par
- Supported `TIMESTAMP` inserting methods: timestamp, `timestamp()` function, and `now()` function.
-- `timestamp()` function accepts empty arguments to get the timestamp of the current timezone.
+- `timestamp()` function accepts empty arguments to get the current timestamp. It can pass an integer arguments to identify the integer as a timestamp and the range of passed integer is: `0~9223372036`。
-- `timestamp()` function can convert `DATETIME` to `TIMESTAMP`. The data type of `DATETIME` should be a `string`.
+- `timestamp()` function can convert `DATETIME` to `TIMESTAMP`, and the data type of `DATETIME` should be a `string`.
- The underlying storage data type is **int64**.
diff --git a/docs-2.0/3.ngql-guide/4.variable-and-composite-queries/3.property-reference.md b/docs-2.0/3.ngql-guide/4.variable-and-composite-queries/3.property-reference.md
index dba3a2b24e8..c98378461e7 100644
--- a/docs-2.0/3.ngql-guide/4.variable-and-composite-queries/3.property-reference.md
+++ b/docs-2.0/3.ngql-guide/4.variable-and-composite-queries/3.property-reference.md
@@ -95,7 +95,7 @@ nebula> GO FROM "player100" OVER follow YIELD follow._src, follow._dst, follow._
!!! compatibility "Legacy version compatibility"
- NebulaGraph 2.6.0 and later versions support the new [Schema function](../6.functions-and-expressions/4.schema.md). Similar statements as the above examples are written as follows in {{ nebula.release}}.
+ NebulaGraph 2.6.0 and later versions support the new [Schema-related functions](../6.functions-and-expressions/4.schema.md). Similar statements as the above examples are written as follows in {{ nebula.release}}.
```ngql
GO FROM "player100" OVER follow YIELD properties($^).name AS startName, properties($$).age AS endAge;
diff --git a/docs-2.0/3.ngql-guide/6.functions-and-expressions/1.math.md b/docs-2.0/3.ngql-guide/6.functions-and-expressions/1.math.md
index 734f99bc5b5..6e5331a3400 100644
--- a/docs-2.0/3.ngql-guide/6.functions-and-expressions/1.math.md
+++ b/docs-2.0/3.ngql-guide/6.functions-and-expressions/1.math.md
@@ -551,11 +551,12 @@ nebula> RETURN bit_xor(5,6);
## size()
-size() returns the number of elements in a list or a map.
+size() returns the number of elements in a list or a map, or the length of a string.
-Syntax: `size()`
+Syntax: `size({|})`
- `expression`: An expression for a list or map.
+- `string`: A specified string.
- Result type: Int
@@ -570,6 +571,15 @@ nebula> RETURN size([1,2,3,4]);
+-----------------+
```
+```ngql
+nebula> RETURN size("basketballplayer") as size;
++------+
+| size |
++------+
+| 16 |
++------+
+```
+
## range()
range() returns a list of integers from `[start,end]` in the specified steps.
diff --git a/docs-2.0/3.ngql-guide/6.functions-and-expressions/15.aggregating.md b/docs-2.0/3.ngql-guide/6.functions-and-expressions/15.aggregating.md
index 5bf09187c0f..699941f10c0 100644
--- a/docs-2.0/3.ngql-guide/6.functions-and-expressions/15.aggregating.md
+++ b/docs-2.0/3.ngql-guide/6.functions-and-expressions/15.aggregating.md
@@ -257,24 +257,32 @@ nebula> MATCH (n:player) \
| 25 | ["Joel Embiid", "Kyle Anderson"] |
+-----+--------------------------------------------------------------------------+
...
-```
-## Aggregating example
+nebula> GO FROM "player100" OVER serve \
+ YIELD properties($$).name AS name \
+ | GROUP BY $-.name \
+ YIELD collect($-.name) AS name;
++-----------+
+| name |
++-----------+
+| ["Spurs"] |
++-----------+
-```ngql
-nebula> GO FROM "player100" OVER follow YIELD dst(edge) AS dst, properties($$).age AS age \
- | GROUP BY $-.dst \
- YIELD \
- $-.dst AS dst, \
- toInteger((sum($-.age)/count($-.age)))+avg(distinct $-.age+1)+1 AS statistics;
-+-------------+------------+
-| dst | statistics |
-+-------------+------------+
-| "player125" | 84.0 |
-| "player101" | 74.0 |
-+-------------+------------+
-```
+nebula> LOOKUP ON player \
+ YIELD player.age As playerage \
+ | GROUP BY $-.playerage \
+ YIELD collect($-.playerage) AS playerage;
++------------------+
+| playerage |
++------------------+
+| [22] |
+| [47] |
+| [43] |
+| [25, 25] |
++------------------+
+...
+```
## std()
@@ -312,4 +320,22 @@ nebula> MATCH (v:player) RETURN sum(v.player.age);
+-------------------+
| 1698 |
+-------------------+
-```
\ No newline at end of file
+```
+
+## Aggregating example
+
+```ngql
+nebula> GO FROM "player100" OVER follow YIELD dst(edge) AS dst, properties($$).age AS age \
+ | GROUP BY $-.dst \
+ YIELD \
+ $-.dst AS dst, \
+ toInteger((sum($-.age)/count($-.age)))+avg(distinct $-.age+1)+1 AS statistics;
++-------------+------------+
+| dst | statistics |
++-------------+------------+
+| "player125" | 84.0 |
+| "player101" | 74.0 |
++-------------+------------+
+```
+
+
diff --git a/docs-2.0/3.ngql-guide/6.functions-and-expressions/16.type-conversion.md b/docs-2.0/3.ngql-guide/6.functions-and-expressions/16.type-conversion.md
index 3bccffb7e14..3b7be9f7a18 100644
--- a/docs-2.0/3.ngql-guide/6.functions-and-expressions/16.type-conversion.md
+++ b/docs-2.0/3.ngql-guide/6.functions-and-expressions/16.type-conversion.md
@@ -145,4 +145,5 @@ nebula> YIELD hash(toLower("HELLO NEBULA"));
+-------------------------------+
| -8481157362655072082 |
+-------------------------------+
-```
\ No newline at end of file
+```
+
diff --git a/docs-2.0/3.ngql-guide/6.functions-and-expressions/2.string.md b/docs-2.0/3.ngql-guide/6.functions-and-expressions/2.string.md
index 187cea9bfc0..d02ab3e2c40 100644
--- a/docs-2.0/3.ngql-guide/6.functions-and-expressions/2.string.md
+++ b/docs-2.0/3.ngql-guide/6.functions-and-expressions/2.string.md
@@ -77,10 +77,10 @@ nebula> RETURN upper("Basketball_Player");
length() returns the length of the given string in bytes.
-Syntax: `length()`
+Syntax: `length({|})`
- `string`: A specified string.
-
+- `path`: A specified path represented by a variable.
- Result type: Int
Example:
@@ -94,6 +94,17 @@ nebula> RETURN length("basketball");
+----------------------+
```
+```ngql
+nebula> MATCH p=(v:player{name:"Tim Duncan"})-->(v2) return length(p);
++-----------+
+| length(p) |
++-----------+
+| 1 |
+| 1 |
+| 1 |
++-----------+
+```
+
## trim()
trim() removes the spaces at the leading and trailing of the string.
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 f304db740d4..0681d403bc1 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
@@ -4,8 +4,8 @@ NebulaGraph supports the following built-in date and time functions:
| Function | Description |
|:-- |:-- |
-| int now() | Returns the current date and time of the system time zone. |
-| timestamp timestamp() | Returns the current date and time of the system time zone. |
+| int now() | Returns the current timestamp of the system. |
+| timestamp timestamp() | Returns the current timestamp of the system. |
| date date() | Returns the current UTC date based on the current system. |
| time time() | Returns the current UTC time based on the current system. |
| datetime datetime() | Returns the current UTC date and time based on the current system. |
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 096a5115ec3..89a1c26d84f 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
@@ -1,6 +1,6 @@
-# Schema functions
+# Schema-related functions
-This topic describes the schema functions supported by NebulaGraph. There are two types of schema functions, one for native nGQL statements and the other for openCypher-compatible statements.
+This topic describes the schema-related functions supported by NebulaGraph. There are two types of schema-related functions, one for native nGQL statements and the other for openCypher-compatible statements.
## For nGQL statements
@@ -114,6 +114,10 @@ nebula> GO FROM "player100" OVER follow \
+-------------+-------------+
```
+!!! note
+
+ The semantics of the query for the starting vertex with src(edge) and [properties(`$^`)](../5.operators/5.property-reference.md) are different. src(edge) indicates the starting vertex ID of the edge in the graph database, while properties(`$^`) indicates the data of the starting vertex where you start to expand the graph, such as the data of the starting vertex `player100` in the above GO statement.
+
### dst(edge)
dst(edge) returns the destination vertex ID of an edge.
@@ -135,6 +139,10 @@ nebula> GO FROM "player100" OVER follow \
+-------------+-------------+
```
+!!! note
+
+ dst(edge) indicates the destination vertex ID of the edge in the graph database.
+
### rank(edge)
rank(edge) returns the rank value of an edge.
@@ -339,7 +347,7 @@ nebula> MATCH (v:player{name:"Tim Duncan"})-[e]->() \
### startNode()
-startNode() visits an edge or a path and returns its information of source vertex ID, including VIDs, tags, properties, and values.
+startNode() visits a path and returns its information of source vertex ID, including VIDs, tags, properties, and values.
Syntax: `startNode()`
@@ -357,7 +365,7 @@ nebula> MATCH p = (a :player {name : "Tim Duncan"})-[r:serve]-(t) \
### endNode()
-endNode() visits an edge or a path and returns its information of destination vertex ID, including VIDs, tags, properties, and values.
+endNode() visits a path and returns its information of destination vertex ID, including VIDs, tags, properties, and values.
Syntax: `endNode()`
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 57ecaf5f21c..742b8262674 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
@@ -8,7 +8,7 @@ The examples in this topic use the [basketballplayer](../1.nGQL-overview/1.overv
## Syntax
-The syntax of `MATCH` is relatively more flexible compared with that of other query statements such as `GO` or `LOOKUP`. But generally, it can be summarized as follows.
+The syntax of `MATCH` is relatively more flexible compared with that of other query statements such as `GO` or `LOOKUP`. The path type of the `MATCH` statement is `trail`. That is, only vertices can be repeatedly visited in the graph traversal. Edges cannot be repeatedly visited. For details, see [path](../../1.introduction/2.1.path.md). But generally, it can be summarized as follows.
```ngql
MATCH [] RETURN