# 查询语言
# 简介
eZooDB支持Cypher,支持query的语句查询和explain的执行计划输出。
Cypher是用于图数据库的最广泛采用、完全指定和开放的查询语言, 并属于声明性图形查询语言。它允许对图形进行富有表现力和高效的查询、更新和管理并提供了一种使用属性图的直观方式。
更多图查询语言相关的内容,可参阅opencypher (opens new window) 。
# 版本
Cypher查询语言参考(第 9 版)
# API
eZooDB对于使用者提供了统一的API接口,返回结果为结构体,如果需要使用特定的格式输出,可以选择自定义,或使用eZoo-Client。
# 方法
void QL(client_result &_return,
const std::string &db_name,
const std::string &query)
# 参数
| 参数列表 | 类型 | 描述 | 是否可空 | 默认值 | 示例 | 备注 |
|---|---|---|---|---|---|---|
| db_name | string | 数据库名称 | 否 | "" | "ezoo" | |
| query | string | cypher语句 | 否 | * | "" |
# 返回值
| 参数列表 | 类型 | 描述 | 是否可空 | 默认值 | 示例 | 备注 |
|---|---|---|---|---|---|---|
| _return | client_result | 查询结果返回 | 否 |
# 数据类型
eZooDB Cypher支持整数、浮点、字符串、布尔值等基本数据类型,如下所示:
| 分类 | 类型 | 支持情况 |
|---|---|---|
| Property types | Number / String / Boolean / Spatial / Temporal | 暂不支持 Spatial / Temporal |
| Structural types | Node / Relationship / Path | 支持 |
| Composite types | List / Map | map作为返回值时暂不支持 |
# 子句
| 关键字 | 支持情况 |
|---|---|
| MATCH | 支持 |
| OPTIONAL MATCH | 支持 |
| RETURN | 支持 |
| WITH | 支持 |
| UNWIND | 支持 |
| WHERE | 支持 |
| ORDER BY | 支持 |
| SKIP | 支持 |
| LIMIT | 支持 |
| CREATE | 暂不支持 |
| DELETE | 暂不支持 |
| SET | 暂不支持 |
| REMOVE | 暂不支持 |
| FOREACH | 暂不支持 |
| MERGE | 暂不支持 |
| CALL {subquery} | 暂不支持 |
| CALL procedure | 暂不支持 |
| UNION | 暂不支持 |
| USE | 暂不支持 |
| LOAD CSV | 暂不支持 |
# 内置函数
| 函数名称 | 分类 | 支持情况 |
|---|---|---|
| all() | Predicate | 支持 |
| any() | Predicate | 支持 |
| single() | Predicate | 支持 |
| none() | Predicate | 支持 |
| list_comprehension() | Predicate | 支持 |
| exists() | Predicate | 支持 |
| coalesce() | Scalar | 支持 |
| case() | Scalar | 支持 |
| endNode() | Scalar | 支持 |
| head() | Scalar | 支持 |
| id() | Scalar | 支持 |
| last() | Scalar | 暂不支持 |
| length() | Scalar | 暂不支持 |
| properties() | Scalar | 支持 |
| randomUUID() | Scalar | 暂不支持 |
| size() | Scalar | 支持 |
| Size of pattern comprehension | Scalar | 暂不支持 |
| Size of string | Scalar | 支持 |
| startNode() | Scalar | 支持 |
| timestamp() | Scalar | 暂不支持 |
| toBoolean() | Scalar | 暂不支持 |
| toBooleanOrNull() | Scalar | 暂不支持 |
| toFloat() | Scalar | 暂不支持 |
| toFloatOrNull() | Scalar | 暂不支持 |
| toInteger() | Scalar | 支持 |
| toIntegerOrNull() | Scalar | 暂不支持 |
| type() | Scalar | 支持 |
| avg() - Numeric values | Aggregating | 支持 |
| avg() - Durations | Aggregating | 暂不支持 |
| collect() | Aggregating | 支持 |
| count() | Aggregating | 支持 |
| max() | Aggregating | 支持 |
| min() | Aggregating | 支持 |
| percentileCont() | Aggregating | 支持 |
| percentileDisc() | Aggregating | 支持 |
| stDev() | Aggregating | 支持 |
| stDevP() | Aggregating | 支持 |
| sum() - Numeric values | Aggregating | 支持 |
| sum() - Durations | Aggregating | 暂不支持 |
| keys() | List | 暂不支持 |
| labels() | List | 支持 |
| nodes() | List | 支持 |
| range() | List | 支持 |
| reduce() | List | 支持 |
| relationships() | List | 支持 |
| reverse() | List | 支持 |
| tail() | List | 支持 |
| toBooleanList() | List | 暂不支持 |
| toFloatList() | List | 暂不支持 |
| toIntegerList() | List | 暂不支持 |
| toStringList() | List | 暂不支持 |
| abs() | Numeric | 支持 |
| ceil() | Numeric | 支持 |
| floor | Numeric | 支持 |
| rand() | Numeric | 支持 |
| round() | Numeric | 支持 |
| round()- precision | Numeric | 暂不支持 |
| round() - precision and rounding mode | Numeric | 暂不支持 |
| sign() | Numeric | 支持 |
| e() | Logarithmic | 暂不支持 |
| exp() | Logarithmic | 暂不支持 |
| log() | Logarithmic | 暂不支持 |
| log10() | Logarithmic | 暂不支持 |
| sqrt() | Logarithmic | 支持 |
| acos() | Trigonometric | 暂不支持 |
| asin() | Trigonometric | 暂不支持 |
| atan() | Trigonometric | 暂不支持 |
| atan2() | Trigonometric | 暂不支持 |
| cos() | Trigonometric | 暂不支持 |
| cot() | Trigonometric | 暂不支持 |
| degrees() | Trigonometric | 暂不支持 |
| haversin() | Trigonometric | 暂不支持 |
| pi() | Trigonometric | 暂不支持 |
| radians() | Trigonometric | 暂不支持 |
| sin() | Trigonometric | 暂不支持 |
| tan() | Trigonometric | 暂不支持 |
| left() | String | 支持 |
| lTrim() | String | 支持 |
| replace() | String | 支持 |
| reverse() | String | 支持 |
| right() | String | 支持 |
| rTrim() | String | 支持 |
| split() | String | 暂不支持 |
| substring() | String | 支持 |
| toLower() | String | 支持 |
| toString() | String | 支持 |
| toStringOrNull() | String | 暂不支持 |
| toUpper() | String | 支持 |
| trim() | String | 支持 |
| date() | Temporal | 暂不支持 |
| datetime() | Temporal | 暂不支持 |
| localdatetime() | Temporal | 暂不支持 |
| localtime() | Temporal | 暂不支持 |
| time() | Temporal | 暂不支持 |
| point() | Spatial | 暂不支持 |
| point.distance() | Spatial | 暂不支持 |
| point.withinBBox() | Spatial | 暂不支持 |
| linenumber() | LOAD CSV | 暂不支持 |
| file() | LOAD CSV | 暂不支持 |
# 查询调优
eZooDB旨在以最快的速度查询出正确的结果,每一个cypher查询都会通过优化生成最优执行计划,以减少不必要的查询。
在eZooDB中cypher语句的重复查询是被允许的,内部做了cypher语句的缓存工作,以cypher语句为key,执行计划为value,以减少重复解析和构建新的执行计划的过程。
# 分析查询
当您想通过查看查询的执行计划来分析查询时,可以使用以下方法:
# EXPLAIN:
如果您想查看执行计划,但不想运行语句,请在Cypher语句之前使用EXPLAIN。该语句将始终返回一个空结果,并且不会对数据库进行更改。
例如:
graph_500> EXPLAIN MATCH (A)-[C]->(B) RETURN A