diff --git a/docs-2.0/2.quick-start/6. cheatcheet-for-ngql-command.md b/docs-2.0/2.quick-start/6. cheatcheet-for-ngql-command.md new file mode 100644 index 0000000000..919b0851e8 --- /dev/null +++ b/docs-2.0/2.quick-start/6. cheatcheet-for-ngql-command.md @@ -0,0 +1,513 @@ +# nGQL命令汇总 + +## 函数 + +- [数学函数](../3.ngql-guide/6.functions-and-expressions/1.math.md) + + | 函数 | 说明 | + | :-------------------------------------- | :----------------------------------------------------------- | + | double abs(double x) | 返回x的绝对值。 | + | double floor(double x) | 返回小于或等于x的最大整数。 | + | double ceil(double x) | 返回大于或等于x的最小整数。 | + | double round(double x) | 返回离x最近的整数值,如果x恰好在中间,则返回离0较远的整数。 | + | double sqrt(double x) | 返回x的平方根。 | + | double cbrt(double x) | 返回x的立方根。 | + | 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 log(double x) | 返回以自然数e为底x的对数。 | + | double log2(double x) | 返回以2为底x的对数。 | + | double log10(double x) | 返回以10为底x的对数。 | + | double sin(double x) | 返回x的正弦值。 | + | double asin(double x) | 返回x的反正弦值。 | + | double cos(double x) | 返回x的余弦值。 | + | double acos(double x) | 返回x的反余弦值。 | + | double tan(double x) | 返回x的正切值。 | + | double atan(double x) | 返回x的反正切值。 | + | double rand() | 返回[0,1)内的随机浮点数。 | + | int rand32(int min, int max) | 返回`[min, max)`内的一个随机32位整数。 用户可以只传入一个参数,该参数会判定为`max`,此时`min`默认为`0`。 如果不传入参数,此时会从带符号的32位int范围内随机返回。 | + | int rand64(int min, int max) | 返回`[min, max)`内的一个随机64位整数。 用户可以只传入一个参数,该参数会判定为`max`,此时`min`默认为`0`。 如果不传入参数,此时会从带符号的64位int范围内随机返回。 | + | collect() | 将收集的所有值放在一个列表中。 | + | avg() | 返回参数的平均值。 | + | count() | 返回参数的数量。 | + | max() | 返回参数的最大值。 | + | min() | 返回参数的最小值。 | + | std() | 返回参数的总体标准差。 | + | sum() | 返回参数的和。 | + | bit_and() | 逐位做AND操作。 | + | bit_or() | 逐位做OR操作。 | + | bit_xor() | 逐位做XOR操作。 | + | int size() | 返回列表或映射中元素的数量。 | + | int range(int start, int end, int step) | 返回`[start,end]`中指定步长的值组成的列表。步长`step`默认为1。 | + | int sign(double x) | 返回x的正负号。 如果x为`0`,则返回`0`。 如果x为负数,则返回`-1`。 如果x为正数,则返回`1`。 | + | double e() | 返回自然对数的底e(2.718281828459045)。 | + | double pi() | 返回数学常数π(3.141592653589793)。 | + | double radians() | 将角度转换为弧度。`radians(180)`返回`3.141592653589793`。 | + + + +- [字符串函数](../3.ngql-guide/6.functions-and-expressions/2.string.md) + + | 函数 | 说明 | + | :---------------------------------------------- | :----------------------------------------------------------- | + | int strcasecmp(string a, string b) | 比较两个字符串(不区分大小写)。当a=b时,返回0,当a>b是,返回大于0的数,当a`count()`返回总行数(包括NULL)。
`count(expr)`返回满足表达式的非空值的总数。
`count()`和`size()`是不同的。 | + + + +* [collect函数](../3.ngql-guide/6.functions-and-expressions/10.collect.md) + + | 函数 | 说明 | + | :-------- | :----------------------------------------------------------- | + | collect() | `collect()`函数返回一个符合表达式返回结果的列表。该函数可以将多条记录或值合并进一个列表,实现数据聚合。 | + + + +* [reduce函数](../3.ngql-guide/6.functions-and-expressions/11.reduce.md) + + | 函数 | 语法 | 说明 | + | :------- | :-------------------------------------------------------- | ------------------------------------------------------------ | + | reduce() | `reduce( = , IN ` | `reduce()`将表达式逐个应用于列表中的元素,然后和累加器中的当前结果累加,最后返回完整结果。 | + + + +* [hash函数](../3.ngql-guide/6.functions-and-expressions/12.hash.md) + + | 函数 | 说明 | + | :----- | :----------------------------------------------------------- | + | hash() | `hash()`函数返回参数的哈希值。其参数可以是数字、字符串、列表、布尔值、NULL等类型的值,或者计算结果为这些类型的表达式。`hash()`函数采用MurmurHash2算法,种子(seed)为`0xc70f6907UL`。用户可以在[`MurmurHash2.h`](https://github.com/vesoft-inc/nebula/blob/master/src/common/base/MurmurHash2.h)中查看其源代码。 | + + + +* [concat函数](../3.ngql-guide/6.functions-and-expressions/13.concat.md) + + | 函数 | 说明 | + | :------- | :----------------------------------------------------------- | + | concat() | `concat()`函数至少需要两个或以上字符串参数,并将所有参数连接成一个字符串。
语法:`concat(string1,string2,...)` | + + + +* [concat_ws函数](../3.ngql-guide/6.functions-and-expressions/13.concat.md) + + | 函数 | 说明 | + | ----------- | ------------------------------------------------------------ | + | concat_ws() | `concat_ws()`函数将两个或以上字符串参数与预定义的分隔符(separator)相连接。 | + + + +* [谓词函数](../3.ngql-guide/6.functions-and-expressions/8.predicate.md) + + 谓词函数只返回`true`或`false`,通常用于`WHERE`子句中。 + + ``` + ( IN WHERE ) + ``` + + | 函数 | 说明 | + | :------- | :----------------------------------------------------------- | + | exists() | 如果指定的属性在点、边或映射中存在,则返回`true`,否则返回`false`。 | + | any() | 如果指定的谓词适用于列表中的至少一个元素,则返回`true`,否则返回`false`。 | + | all() | 如果指定的谓词适用于列表中的每个元素,则返回`true`,否则返回`false`。 | + | none() | 如果指定的谓词不适用于列表中的任何一个元素,则返回`true`,否则返回`false`。 | + | single() | 如果指定的谓词适用于列表中的唯一一个元素,则返回`true`,否则返回`false`。 | + + + +* [CASE表达式](../3.ngql-guide/6.functions-and-expressions/5.case-expressions.md) + + `CASE`表达式使用条件来过滤nGQL查询语句的结果,常用于`YIELD`和`RETURN`子句中。`CASE`表达式会遍历所有条件,并在满足第一个条件时停止读取后续条件,然后返回结果。如果不满足任何条件,将通过`ELSE`子句返回结果。如果没有`ELSE`子句且不满足任何条件,则返回`NULL`。 + + 语法: + + ``` + CASE + WHEN THEN + [WHEN ...] + [ELSE ] + END + ``` + + | 参数 | 说明 | + | :--------- | :--------------------------------------------- | + | `comparer` | 用于与`value`进行比较的值或者有效表达式。 | + | `value` | 和`comparer`进行比较,如果匹配,则满足此条件。 | + | `result` | 如果`value`匹配`comparer`,则返回该`result`。 | + | `default` | 如果没有条件匹配,则返回该`default`。 | + + + +## 通用查询语句 + +* [MATCH](../3.ngql-guide/7.general-query-statements/2.match.md) + + ``` + MATCH [] RETURN + ``` + + | 模式 | 示例 | 说明 | + | --------------------------- | ------------------------------------------------------------ | ------------------------------------------------------------ | + | 匹配点 | `(v)` | 用户可以在一对括号中使用自定义变量来表示模式中的点。例如`(v)`。 | + | 匹配Tag | `MATCH (v:player) RETURN v` | 用户可以在点的右侧用`:`表示模式中的Tag。 | + | 匹配点的属性 | `MATCH (v:player{name:"Tim Duncan"}) RETURN v` | 用户可以在Tag的右侧用`{: }`表示模式中点的属性。 | + | 匹配单点ID | `MATCH (v) WHERE id(v) == 'player101' RETURN v` | 用户可以使用点ID去匹配点。`id()`函数可以检索点的ID。 | + | 匹配多点ID | `MATCH (v:player { name: 'Tim Duncan' })--(v2) WHERE id(v2) IN ["player101", "player102"] RETURN v2` | 要匹配多个点的ID,可以用`WHERE id(v) IN [vid_list]`。 | + | 匹配连接的点 | `MATCH (v:player{name:"Tim Duncan"})--(v2) RETURN v2.name AS Name` | 用户可以使用`--`符号表示两个方向的边,并匹配这些边连接的点。用户可以在`--`符号上增加`<`或`>`符号指定边的方向。 | + | 匹配路径 | `MATCH p=(v:player{name:"Tim Duncan"})-->(v2) RETURN p` | 连接起来的点和边构成了路径。用户可以使用自定义变量命名路径。 | + | 匹配边 | `MATCH (v:player{name:"Tim Duncan"})-[e]-(v2) RETURN e` | 除了用`--`、`-->`、`<--`表示未命名的边之外,用户还可以在方括号中使用自定义变量命名边。例如`-[e]-`。 | + | 匹配Edge type | `MATCH ()-[e:follow]-() RETURN e` | 和点一样,用户可以用`:`表示模式中的Edge type,例如`-[e:follow]-`。 | + | 匹配边的属性 | ` MATCH (v:player{name:"Tim Duncan"})-[e:follow{degree:95}]->(v2) RETURN e` | 用户可以用`{: }`表示模式中Edge type的属性,例如`[e:follow{likeness:95}]`。 | + | 匹配多个Edge type | `MATCH (v:player{name:"Tim Duncan"})-[e:follow \| :serve]->(v2) RETURN e` | 使用`\|`可以匹配多个Edge type,例如`[e:follow \| :serve]`。第一个Edge type前的英文冒号(:)不可省略,后续Edge type前的英文冒号可以省略,例如`[e:follow \| serve]`。 | + | 匹配多条边 | `MATCH (v:player{name:"Tim Duncan"})-[]->(v2)<-[e:serve]-(v3) RETURN v2, v3` | 用户可以扩展模式,匹配路径中的多条边。 | + | 匹配定长路径 | `MATCH p=(v:player{name:"Tim Duncan"})-[e:follow*2]->(v2) RETURN DISTINCT v2 AS Friends` | 用户可以在模式中使用`:*`匹配定长路径。`hop`必须是一个非负整数。 | + | 匹配变长路径 | `MATCH p=(v:player{name:"Tim Duncan"})-[e:follow*1..3]->(v2) RETURN v2 AS Friends` | `minHop`:可选项。表示路径的最小长度。`minHop`必须是一个非负整数,默认值为1。
`maxHop`:必选项。表示路径的最大长度。`maxHop`必须是一个非负整数,没有默认值。 | + | 匹配多个Edge type的变长路径 | `MATCH p=(v:player{name:"Tim Duncan"})-[e:follow \| serve*2]->(v2) RETURN DISTINCT v2` | 用户可以在变长或定长模式中指定多个Edge type。`hop`、`minHop`和`maxHop`对所有Edge type都生效。 | + | 检索点或边的信息 | `MATCH (v:player{name:"Tim Duncan"}) RETURN v`
`MATCH (v:player{name:"Tim Duncan"})-[e]->(v2) RETURN e` | 使用`RETURN { \| }`检索点或边的所有信息。 | + | 检索点ID | `MATCH (v:player{name:"Tim Duncan"}) RETURN id(v)` | 使用`id()`函数检索点ID。 | + | 检索Tag | `MATCH (v:player{name:"Tim Duncan"}) RETURN labels(v)` | 使用`labels()`函数检索点上的Tag列表。
检索列表`labels(v)`中的第N个元素,可以使用`labels(v)[n-1]`。 | + | 检索点或边的单个属性 | `MATCH (v:player{name:"Tim Duncan"}) RETURN v.age` | 使用`RETURN { \| }.`检索单个属性。
使用`AS`设置属性的别名。 | + | 检索点或边的所有属性 | `MATCH p=(v:player{name:"Tim Duncan"})-[]->(v2) RETURN properties(v2)` | 使用`properties()`函数检索点或边的所有属性。 | + | 检索Edge type | `MATCH p=(v:player{name:"Tim Duncan"})-[e]->() RETURN DISTINCT type(e)` | 使用`type()`函数检索匹配的Edge type。 | + | 检索路径 | `MATCH p=(v:player{name:"Tim Duncan"})-[*3]->() RETURN p` | 使用`RETURN `检索匹配路径的所有信息。 | + | 检索路径中的点 | `MATCH p=(v:player{name:"Tim Duncan"})-[]->(v2) RETURN nodes(p)` | 使用`nodes()`函数检索路径中的所有点。 | + | 检索路径中的边 | `MATCH p=(v:player{name:"Tim Duncan"})-[]->(v2) RETURN relationships(p)` | 使用`relationships()`函数检索路径中的所有边。 | + | 检索路径长度 | `MATCH p=(v:player{name:"Tim Duncan">})-[*..2]->(v2) RETURN p AS Paths, length(p) AS Length` | 使用`length()`函数检索路径的长度。 | + + + +* [LOOKUP](../3.ngql-guide/7.general-query-statements/5.lookup.md) + + ``` + LOOKUP ON { | } + [WHERE [AND ...]] + [YIELD [AS ]] + ``` + + | 模式 | 示例 | 说明 | + | ------------------- | ------------------------------------------------------------ | ---------------------------------------------- | + | 检索点 | `LOOKUP ON player WHERE player.name == "Tony Parker" YIELD player.name AS name, player.age AS age` | 返回Tag为`player`且`name`为`Tony Parker`的点。 | + | 检索边 | `LOOKUP ON follow WHERE follow.degree == 90 YIELD follow.degree` | 返回Edge type为`follow`且`degree`为`90`的边。 | + | 通过Tag列出所有点 | `LOOKUP ON player` | 查找所有Tag为`player`的点 VID。 | + | 通过Edge type列出边 | `LOOKUP ON like` | 查找Edge type为`like`的所有边的信息。 | + | 统计点 | `LOOKUP ON player \| YIELD COUNT(*) AS Player_Number` | 统计Tag为`player`的点。 | + | 统计边 | `LOOKUP ON like \| YIELD COUNT(*) AS Like_Number` | 统计Edge type为`like`的边。 | + + + +* [GO](../3.ngql-guide/7.general-query-statements/3.go.md) + + ``` + GO [[ TO] STEPS ] FROM + OVER [{REVERSELY | BIDIRECT}] + [ WHERE ] + [YIELD [DISTINCT] ] + [| GROUP BY {col_name | expr | position} YIELD ] + [| ORDER BY [{ASC | DESC}]] + [| LIMIT [,] ] + ``` + + | 示例 | 说明 | + | ------------------------------------------------------------ | ------------------------------------------------------- | + | `GO FROM "player102" OVER serve` | 返回player102所属队伍。 | + | `GO 2 STEPS FROM "player102" OVER follow` | 返回距离player102两跳的朋友。 | + | `GO FROM "player100", "player102" OVER serve WHERE properties(edge).start_year > 1995 YIELD DISTINCT properties($$).name AS team_name, properties(edge).start_year AS start_year, properties($^).name AS player_name` | 添加过滤条件。 | + | `GO FROM "player100" OVER follow, serve YIELD properties(edge).degree, properties(edge).start_year` | 遍历多个Edge type。属性没有值时,会显示`UNKNOWN_PROP`。 | + | `GO FROM "player100" OVER follow REVERSELY YIELD src(edge) AS destination` | 返回player100入方向的邻居点。 | + | `GO FROM "player100" OVER follow REVERSELY YIELD src(edge) AS id \| GO FROM $-.id OVER serve WHERE properties($^).age > 20 YIELD properties($^).name AS FriendOf, properties($$).name AS Team` | 查询player100的朋友和朋友所属队伍。 | + | `GO FROM "player102" OVER follow YIELD dst(edge) AS both` | 返回player102所有邻居点。 | + | `GO 2 STEPS FROM "player100" OVER follow YIELD src(edge) AS src, dst(edge) AS dst, properties($$).age AS age \| GROUP BY $-.dst YIELD $-.dst AS dst, collect_set($-.src) AS src, collect($-.age) AS age` | 根据年龄分组。 | + + + +* [FETCH](../3.ngql-guide/7.general-query-statements/4.fetch.md) + + ``` + FETCH PROP ON {[, tag_name ...] | *} + [, vid ...] + [YIELD [AS ]] + ``` + + | 示例 | 说明 | + | ------------------------------------------------------------ | ------------------------------------------------------------ | + | `FETCH PROP ON player "player100"` | 在`FETCH`语句中指定Tag获取对应点的属性值。 | + | `FETCH PROP ON player "player100" YIELD player.name AS name` | 使用`YIELD`子句指定返回的属性。 | + | `FETCH PROP ON player "player101", "player102", "player103"` | 指定多个点ID获取多个点的属性值,点之间用英文逗号(,)分隔。 | + | `FETCH PROP ON player, t1 "player100", "player103"` | 在`FETCH`语句中指定多个Tag获取属性值。Tag之间用英文逗号(,)分隔。 | + | `FETCH PROP ON * "player100", "player106", "team200"` | 在`FETCH`语句中使用`*`获取当前图空间所有标签里,点的属性值。 | + | `FETCH PROP ON serve "player102" -> "player106" YIELD dst(edge)` | 语法:`FETCH PROP ON -> [@] [, -> ...] [YIELD ]` | + | `FETCH PROP ON serve "player100" -> "team204"` | 获取连接player100和team204的边serve的所有属性值。 | + | `FETCH PROP ON serve "player100" -> "team204" YIELD serve.start_year` | 使用`YIELD`子句指定返回的属性。 | + | `FETCH PROP ON serve "player100" -> "team204", "player133" -> "team202"` | 指定多个边模式(` -> [@]`)获取多个边的属性值。模式之间用英文逗号(,)分隔。 | + | `FETCH PROP ON serve "player100" -> "team204"@1` | 要获取rank不为0的边,请在FETCH语句中设置rank。 | + | `GO FROM "player101" OVER follow YIELD follow._src AS s, follow._dst AS d \| FETCH PROP ON follow $-.s -> $-.d YIELD follow.degree` | 返回从点player101开始的follow边的degree值。 | + | `$var = GO FROM "player101" OVER follow YIELD follow._src AS s, follow._dst AS d; FETCH PROP ON follow $var.s -> $var.d YIELD follow.degree` | 自定义变量构建查询。 | + + + +* [UNWIND](../3.ngql-guide/7.general-query-statements/7.unwind.md) + + ``` + UNWIND AS + ``` + + | 示例 | 说明 | + | ------------------------------------------------------------ | ------------------------------------------------------------ | + | `UNWIND [1,2,3] AS n RETURN n` | 拆分列表。 | + | `WITH [1,1,2,2,3,3] AS n UNWIND n AS r WITH DISTINCT r AS r ORDER BY r RETURN collect(r)` | 1. 拆分列表`[1,1,2,2,3,3]`。 2. 删除重复行。 3. 排序行。 4. 将行转换为列表。 | + | `MATCH p=(v:player{name:"Tim Duncan"})--(v2) WITH nodes(p) AS n UNWIND n AS r WITH DISTINCT r AS r RETURN collect(r)` | 1. 将匹配路径上的顶点输出到列表中。 2. 拆分列表。 3. 删除重复行。 4. 将行转换为列表。 | + + + +* SHOW + + | 语句 | 语法 | 示例 | 说明 | + | ------------------------------------------------------------ | ------------------------------------------------- | ------------------------------------ | -------------------------------------------------------- | + | [SHOW CHARSET](../3.ngql-guide/7.general-query-statements/6.show/1.show-charset.md) | `SHOW CHARSET` | `SHOW CHARSET` | 显示当前的字符集。 | + | [SHOW COLLATION](../3.ngql-guide/7.general-query-statements/6.show/2.show-collation.md) | `SHOW COLLATION` | `SHOW COLLATION` | 显示当前的排序规则。 | + | [SHOW CREATE SPACE](../3.ngql-guide/7.general-query-statements/6.show/4.show-create-space.md) | `SHOW CREATE SPACE ` | `SHOW CREATE SPACE basketballplayer` | 显示指定图空间的创建语句。 | + | [SHOW CREATE TAG/EDGE](../3.ngql-guide/7.general-query-statements/6.show/5.show-create-tags-edges.md) | `SHOW CREATE {TAG \| EDGE }` | `SHOW CREATE TAG player` | 显示指定Tag/Edge type的基本信息。 | + | [SHOW HOSTS](../3.ngql-guide/7.general-query-statements/6.show/6.show-hosts.md) | `SHOW HOSTS [GRAPH \| STORAGE \| META]` | `SHOW HOSTS`
`SHOW HOSTS GRAPH` | 显示Graph、Storage、Meta服务主机信息、版本信息。 | + | [SHOW INDEX STATUS](../3.ngql-guide/7.general-query-statements/6.show/7.show-index-status.md) | `SHOW {TAG \| EDGE} INDEX STATUS` | `SHOW TAG INDEX STATUS` | 重建原生索引的作业状态,以便确定重建索引是否成功。 | + | [SHOW INDEXES](../3.ngql-guide/7.general-query-statements/6.show/8.show-indexes.md) | `SHOW {TAG \| EDGE} INDEXES` | `SHOW TAG INDEXES` | 列出当前图空间内的所有Tag和Edge type(包括属性)的索引。 | + | [SHOW PARTS](../3.ngql-guide/7.general-query-statements/6.show/9.show-parts.md) | `SHOW PARTS []` | `SHOW PARTS` | 显示图空间中指定分片或所有分片的信息。 | + | [SHOW ROLES](../3.ngql-guide/7.general-query-statements/6.show/10.show-roles.md) | `SHOW ROLES IN ` | `SHOW ROLES in basketballplayer` | 显示分配给用户的角色信息。 | + | [SHOW SNAPSHOTS](../3.ngql-guide/7.general-query-statements/6.show/11.show-snapshots.md) | `SHOW SNAPSHOTS` | `SHOW SNAPSHOTS` | 显示所有快照信息。 | + | [SHOW SPACES](../3.ngql-guide/7.general-query-statements/6.show/12.show-spaces.md) | `SHOW SPACES` | `SHOW SPACES` | 显示现存的图空间。 | + | [SHOW STATS](../3.ngql-guide/7.general-query-statements/6.show/14.show-stats.md) | `SHOW STATS` | `SHOW STATS` | 显示最近`STATS`作业收集的图空间统计信息。 | + | [SHOW TAGS/EDGES](../3.ngql-guide/7.general-query-statements/6.show/15.show-tags-edges.md) | `SHOW TAGS \| EDGES` | `SHOW TAGS`、`SHOW EDGES` | 显示当前图空间内的所有Tag/Edge type。 | + | [SHOW USERS](../3.ngql-guide/7.general-query-statements/6.show/16.show-users.md) | `SHOW USERS` | `SHOW USERS` | 显示用户信息。 | + | [SHOW SESSIONS](../3.ngql-guide/7.general-query-statements/6.show/17.show-sessions.md) | `SHOW SESSIONS ` | ` SHOW SESSIONS` | 显示所有会话信息。 | + | [SHOW SESSIONS](../3.ngql-guide/7.general-query-statements/6.show/17.show-sessions.md) | `SHOW SESSION ` | `SHOW SESSION 1623304491050858` | 指定会话ID进行查看。 | + | [SHOW QUERIES](../3.ngql-guide/7.general-query-statements/6.show/18.show-queries.md) | `SHOW [ALL] QUERIES` | `SHOW QUERIES` | 查看当前Session中正在执行的查询请求信息。 | + | [SHOW META LEADER](../3.ngql-guide/7.general-query-statements/6.show/19.show-meta-leader.md) | `SHOW META LEADER` | `SHOW META LEADER` | 显示当前Meta集群的leader信息。 | + + + +## 子句和选项 + +| 子句 | 语法 | 示例 | 说明 | +| ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | +| [GROUP BY](../3.ngql-guide/8.clauses-and-options/group-by.md) | ` GROUP BY YIELD , ` | `GO FROM "player100" OVER follow BIDIRECT YIELD $$.player.name as Name \| GROUP BY $-.Name YIELD $-.Name as Player, count(*) AS Name_Count` | 查找所有连接到player100的点,并根据他们的姓名进行分组,返回姓名的出现次数。 | +| [LIMIT](../3.ngql-guide/8.clauses-and-options/limit.md) | `YIELD [\| LIMIT [,] ]` | `O FROM "player100" OVER follow REVERSELY YIELD $$.player.name AS Friend, $$.player.age AS Age \| ORDER BY $-.Age, $-.Friend \| LIMIT 1, 3` | 从排序结果中返回第2行开始的3行数据。 | +| [SKIP](../3.ngql-guide/8.clauses-and-options/limit.md) | `RETURN [SKIP ] [LIMIT ]` | `MATCH (v:player{name:"Tim Duncan"}) --> (v2) RETURN v2.name AS Name, v2.age AS Age ORDER BY Age DESC SKIP 1` | 用户可以单独使用`SKIP `设置偏移量,后面不需要添加`LIMIT `。 | +| [ORDER BY](../3.ngql-guide/8.clauses-and-options/order-by.md) | ` ORDER BY [ASC \| DESC] [, [ASC \| DESC] ...]` | `FETCH PROP ON player "player100", "player101", "player102", "player103" YIELD player.age AS age, player.name AS name \| ORDER BY $-.age ASC, $-.name DESC` | `ORDER BY`子句指定输出结果的排序规则。 | +| [RETURN](../3.ngql-guide/8.clauses-and-options/return.md) | `RETURN {\|\|.\|.\|...}` | `MATCH (v:player) RETURN v.name, v.age LIMIT 3` | 返回点的属性为`name`和`age`的前三行值。 | +| [TTL](../3.ngql-guide/8.clauses-and-options/ttl-options.md) | ``CREATE TAG ( , , ...) ttl_duration= , ttl_col = `` | `CREATE TAG t2(a int, b int, c string) ttl_duration= 100, ttl_col = "a"` | 创建Tag并设置TTL选项。 | +| [WHERE](../3.ngql-guide/8.clauses-and-options/where.md) | `WHERE {. {>\|==\|<\|...} ...}` | `MATCH (v:player) WHERE v.name == "Tim Duncan" XOR (v.age < 30 AND v.name == "Yao Ming") OR NOT (v.name == "Yao Ming" OR v.name == "Tim Duncan") RETURN v.name, v.age` | `WHERE`子句可以根据条件过滤输出结果,通常用于`GO`和`LOOKUP`语句,`MATCH`和`WITH`语句。 | +| [YIELD](../3.ngql-guide/8.clauses-and-options/yield.md) | `YIELD [DISTINCT] [AS ] [, [AS ] ...] [WHERE ];` | `GO FROM "player100" OVER follow YIELD dst(edge) AS ID \| FETCH PROP ON player $-.ID YIELD player.age AS Age \| YIELD AVG($-.Age) as Avg_age, count(*)as Num_friends` | 查找player100关注的player,并计算他们的平均年龄。 | +| [WITH](../3.ngql-guide/8.clauses-and-options/with.md) | `MATCH $expressions WITH {nodes()\|labels()\|...}` | `MATCH p=(v:player{name:"Tim Duncan"})--() WITH nodes(p) AS n UNWIND n AS n1 RETURN DISTINCT n1` | `WITH`子句可以获取并处理查询前半部分的结果,并将处理结果作为输入传递给查询的后半部分。 | + + + +## 图空间语句 + +| 语句 | 语法 | 示例 | 说明 | +| ------------------------------------------------------------ | ------------------------------------------------------------ | ----------------------------------------------------- | ------------------------------------------------------------ | +| [CREATE SPACE](../3.ngql-guide/9.space-statements/1.create-space.md) | `CREATE SPACE [IF NOT EXISTS] ( [partition_num = ,] [replica_factor = ,] vid_type = {FIXED_STRING()\| INT[64]} ) [COMMENT = '']` | `CREATE SPACE my_space_1 (vid_type=FIXED_STRING(30))` | 创建一个新的图空间。 | +| [CREATE SPACE](../3.ngql-guide/9.space-statements/1.create-space.md) | `CREATE SPACE AS ` | `CREATE SPACE my_space_4 as my_space_3` | 克隆现有图空间的Schema | +| [USE](../3.ngql-guide/9.space-statements/2.use-space.md) | `USE ` | `USE space1` | 指定一个图空间,或切换到另一个图空间,将其作为后续查询的工作空间。 | +| [SHOW SPACES](../3.ngql-guide/9.space-statements/3.show-spaces.md) | `SHOW SPACES` | `SHOW SPACES` | 列出Nebula Graph示例中的所有图空间。 | +| [DESCRIBE SPACE](../3.ngql-guide/9.space-statements/4.describe-space.md) | `DESC[RIBE] SPACE ` | `DESCRIBE SPACE basketballplayer` | 显示指定图空间的信息。 | +| [DROP SPACE](../3.ngql-guide/9.space-statements/5.drop-space.md) | `DROP SPACE [IF EXISTS] ` | `DROP SPACE basketballplayer` | 删除指定图空间的所有内容。 | + + + +## TAG语句 + +| 语句 | 语法 | 示例 | 说明 | +| ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | +| [CREATE TAG](../3.ngql-guide/10.tag-statements/1.create-tag.md) | `CREATE TAG [IF NOT EXISTS] ( [NULL \| NOT NULL] [DEFAULT ] [COMMENT ''] [{, [NULL \| NOT NULL] [DEFAULT ] [COMMENT '']} ...] ) [TTL_DURATION = ] [TTL_COL = ] [COMMENT = ''] ` | `CREATE TAG woman(name string, age int, married bool, salary double, create_time timestamp) TTL_DURATION = 100, TTL_COL = "create_time"` | 通过指定名称创建一个Tag。 | +| [DROP TAG](../3.ngql-guide/10.tag-statements/2.drop-tag.md) | `DROP TAG [IF EXISTS] ` | `CREATE TAG test(p1 string, p2 int)` | 删除当前工作空间内所有点上的指定Tag。 | +| [ALTER TAG](../3.ngql-guide/10.tag-statements/3.alter-tag.md) | `ALTER TAG [, alter_definition] ...] [ttl_definition [, ttl_definition] ... ] [COMMENT = '']` | `ALTER TAG t1 ADD (p3 int, p4 string)` | 修改Tag的结构。例如增删属性、修改数据类型,也可以为属性设置、修改[TTL](../3.ngql-guide/8.clauses-and-options/ttl-options.md(Time-To-Live)。 | +| [SHOW TAGS](../3.ngql-guide/10.tag-statements/4.show-tags.md) | `SHOW TAGS` | `SHOW TAGS` | 显示当前图空间内的所有Tag名称。 | +| [DESCRIBE TAG](../3.ngql-guide/10.tag-statements/5.describe-tag.md) | `DESC[RIBE] TAG ` | `DESCRIBE TAG player` | 指定Tag的详细信息,例如字段名称、数据类型等。 | +| [DELETE TAG](../3.ngql-guide/10.tag-statements/6.delete-tag.md) | `DELETE TAG FROM ` | `DELETE TAG test1 FROM "test"` | 删除指定点上的指定Tag。 | + + + +## Edge type语句 + +| 语句 | 语法 | 示例 | 说明 | +| ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | --------------------------------------------------- | +| [CREATE EDGE](../3.ngql-guide/11.edge-type-statements/1.create-edge.md) | `CREATE EDGE [IF NOT EXISTS] ( [NULL \| NOT NULL] [DEFAULT ] [COMMENT ''] [{, [NULL \| NOT NULL] [DEFAULT ] [COMMENT '']} ...] ) [TTL_DURATION = ] [TTL_COL = ] [COMMENT = ''] ` | `CREATE EDGE e1(p1 string, p2 int, p3 timestamp) TTL_DURATION = 100, TTL_COL = "p2"` | 指定名称创建一个Edge type。 | +| [DROP EDGE](../3.ngql-guide/11.edge-type-statements/2.drop-edge.md) | `DROP EDGE [IF EXISTS] ` | `DROP EDGE e1` | 删除当前工作空间内的指定Edge type。 | +| [ALTER EDGE](../3.ngql-guide/11.edge-type-statements/3.alter-edge.md) | `ALTER EDGE [, alter_definition] ...] [ttl_definition [, ttl_definition] ... ] [COMMENT = '']` | `ALTER EDGE e1 ADD (p3 int, p4 string)` | 修改Edge type的结构。 | +| [SHOW EDGES](../3.ngql-guide/11.edge-type-statements/4.show-edges.md) | `SHOW EDGES` | `SHOW EDGES` | 显示当前图空间内的所有Edge type名称。 | +| [DESCRIBE EDGE](../3.ngql-guide/11.edge-type-statements/5.describe-edge.md) | `DESC[RIBE] EDGE ` | `DESCRIBE EDGE follow` | 指定Edge type的详细信息,例如字段名称、数据类型等。 | + + + +## 点语句 + +| 语句 | 语法 | 示例 | 说明 | +| ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | +| [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实例的指定图空间中插入一个或多个点。 | +| [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`,如果点存在,会修改点的属性值;如果点不存在,会插入新的点。 | + + + +## 边语句 + +| 语句 | 语法 | 示例 | 说明 | +| ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | +| [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实例的指定图空间中插入一条或多条边。 | +| [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`,如果边存在,会更新边的属性;如果边不存在,会插入新的边。 | + + + +## 索引 + +* 原生索引 + + > 索引配合`LOOKUP`和`MATCH`语句使用。 + + | 语句 | 语法 | 示例 | 说明 | + | ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------- | ------------------------------------------------------------ | + | [CREATE INDEX](../3.ngql-guide/14.native-index-statements/1.create-native-index.md) | `CREATE {TAG \| EDGE} INDEX [IF NOT EXISTS] ON { \| } ([]) [COMMENT = '']` | `CREATE TAG INDEX player_index on player()` | 对Tag、EdgeType或其属性创建原生索引。 | + | [SHOW CREATE INDEX](../3.ngql-guide/14.native-index-statements/2.1.show-create-index.md) | `SHOW CREATE {TAG \| EDGE} INDEX ` | `show create tag index index_2` | 创建Tag或者Edge type时使用的nGQL语句,其中包含索引的详细信息,例如其关联的属性。 | + | [SHOW INDEXES](../3.ngql-guide/14.native-index-statements/2.show-native-indexes.md) | `SHOW {TAG \| EDGE} INDEXES` | `SHOW TAG INDEXES` | 列出当前图空间内的所有Tag和Edge type(包括属性)的索引。 | + | [DESCRIBE INDEX](../3.ngql-guide/14.native-index-statements/3.describe-native-index.md) | `DESCRIBE {TAG \| EDGE} INDEX ` | `DESCRIBE TAG INDEX player_index_0` | 查看指定索引的信息,包括索引的属性名称(Field)和数据类型(Type)。 | + | [REBUILD INDEX](../3.ngql-guide/14.native-index-statements/4.rebuild-native-index.md) | `REBUILD {TAG \| EDGE} INDEX []` | `REBUILD TAG INDEX single_person_index` | 重建索引。索引功能不会自动对其创建之前已存在的存量数据生效。 | + | [SHOW INDEX STATUS](../3.ngql-guide/14.native-index-statements/5.show-native-index-status.md) | `SHOW {TAG \| EDGE} INDEX STATUS` | `SHOW TAG INDEX STATUS` | 查看索引名称和对应的状态。 | + | [DROP INDEX](../3.ngql-guide/14.native-index-statements/6.drop-native-index.md) | `DROP {TAG \| EDGE} INDEX [IF EXISTS] ` | `DROP TAG INDEX player_index_0` | 删除当前图空间中已存在的索引。 | + + + +* [全文索引](../4.deployment-and-installation/6.deploy-text-based-index/2.deploy-es.md) + + | 语法 | 示例 | 说明 | + | ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | + | `SIGN IN TEXT SERVICE [( [,, ]), (), ...]` | `SIGN IN TEXT SERVICE (127.0.0.1:9200)` | Nebula Graph的全文索引是基于[Elasticsearch](https://en.wikipedia.org/wiki/Elasticsearch)实现,部署Elasticsearch集群之后,可以使用`SIGN IN`语句登录Elasticsearch客户端。 | + | `SHOW TEXT SEARCH CLIENTS` | `SHOW TEXT SEARCH CLIENTS` | 列出文本搜索客户端。 | + | `SIGN OUT TEXT SERVICE` | `SIGN OUT TEXT SERVICE` | 退出所有文本搜索客户端。 | + | `CREATE FULLTEXT {TAG \| EDGE} INDEX ON { \| } ([])` | `CREATE FULLTEXT TAG INDEX nebula_index_1 ON player(name)` | 创建全文索引。 | + | `SHOW FULLTEXT INDEXES` | `SHOW FULLTEXT INDEXES` | 显示全文索引。 | + | `REBUILD FULLTEXT INDEX` | `REBUILD FULLTEXT INDEX` | 重建全文索引。 | + | `DROP FULLTEXT INDEX ` | `DROP FULLTEXT INDEX nebula_index_1` | 删除全文索引。 | + | `LOOKUP ON { \| } WHERE [YIELD ]` | `LOOKUP ON player WHERE FUZZY(player.name, "Tim Dunncan", AUTO, OR) YIELD player.name` | 使用查询选项。 | + + + +## 子图和路径 + +| 类型 | 语法 | 示例 | 说明 | +| ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | +| [子图](../3.ngql-guide/16.subgraph-and-path/1.get-subgraph.md) | `GET SUBGRAPH [WITH PROP] [ STEPS] FROM {, ...} [{IN \| OUT \| BOTH} , ...] [YIELD [VERTICES AS ] [,EDGES AS ]] ` | `GET SUBGRAPH 1 STEPS FROM "player100" YIELD VERTICES AS nodes, EDGES AS relationships` | 指定Edge type的起始点可以到达的点和边的信息,返回子图信息。 | +| [路径](../3.ngql-guide/16.subgraph-and-path/2.find-path.md) | `FIND { SHORTEST \| ALL \| NOLOOP } PATH [WITH PROP] FROM TO
OVER [REVERSELY \| BIDIRECT] [] [UPTO STEPS] [\| ORDER BY $-.path] [\| LIMIT ]` | `FIND SHORTEST PATH FROM "player102" TO "team204" OVER *` | 查找指定起始点和目的点之间的路径。返回的路径格式类似于`()-[:@]->(` | `EXPLAIN format="row" SHOW TAGS`
`EXPLAIN format="dot" SHOW TAGS` | 输出nGQL语句的执行计划,但不会执行nGQL语句。 | +| [PROFILE](../3.ngql-guide/17.query-tuning-statements/1.explain-and-profile.md) | `PROFILE [format="row" \| "dot"] ` | `PROFILE format="row" SHOW TAGS`
`EXPLAIN format="dot" SHOW TAGS` | 执行nGQL语句,然后输出执行计划和执行概要。 | + + + +## 运维 + +* [BALANCE](../3.ngql-guide/18.operation-and-maintenance-statements/2.balance-syntax.md) + + | 语法 | 说明 | + | :-------------------------------- | :----------------------------------------------------------- | + | `BALANCE DATA` | 启动任务均衡分布Nebula Graph集群里的所有分片。该命令会返回任务ID(`balance_id`)。 | + | `BALANCE DATA ` | 显示`BALANCE DATA`任务的状态。 | + | `BALANCE DATA STOP` | 停止`BALANCE DATA`任务。 | + | `BALANCE DATA REMOVE ` | 在Nebula Graph集群中扫描并解绑指定的Storage主机。 | + | `BALANCE LEADER` | 在Nebula Graph集群中均衡分布leader。 | + +* [作业管理](../3.ngql-guide/18.operation-and-maintenance-statements/4.job-statements.md) + + | 语法 | 说明 | + | -------------------- | ------------------------------------------------------------ | + | `SUBMIT JOB COMPACT` | 触发RocksDB的长耗时`compact`操作。 | + | `SUBMIT JOB FLUSH` | 将内存中的RocksDB memfile写入硬盘。 | + | `SUBMIT JOB STATS` | 启动一个作业,该作业对当前图空间进行统计。作业完成后,用户可以使用`SHOW STATS`语句列出统计结果。 | + | `SHOW JOB ` | 显示当前图空间内指定作业和相关任务的信息。Meta服务将`SUBMIT JOB`请求解析为多个任务,然后分配给进程nebula-storaged。 | + | `SHOW JOBS` | 列出当前图空间内所有未过期的作业。 | + | `STOP JOB` | 停止当前图空间内未完成的作业。 | + | `RECOVER JOB` | 重新执行当前图空间内失败的作业,并返回已恢复的作业数量。 | + +* [终止查询](../3.ngql-guide/18.operation-and-maintenance-statements/6.kill-query.md) + + | 语法 | 示例 | 说明 | + | --------------------------------------------------- | ----------------------------------------------- | -------------------------------------------- | + | `KILL QUERY (session=, plan=)` | `KILL QUERY(SESSION=1625553545984255,PLAN=163)` | 在一个会话中执行命令终止另一个会话中的查询。 | + + diff --git a/mkdocs.yml b/mkdocs.yml index 7f506892ea..4ecc5933a7 100755 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -129,6 +129,7 @@ nav: - 步骤2:启动Nebula Graph: 2.quick-start/5.start-stop-service.md - 步骤3:连接Nebula Graph: 2.quick-start/3.connect-to-nebula-graph.md - 步骤4:使用常用命令: 2.quick-start/4.nebula-graph-crud.md + - nGQL命令汇总: 2.quick-start/6.cheatcheet-for-ngql-command.md - nGQL指南: - nGQL概述: