图应用开发
语法介绍
语法编写规范
语法示例
CREATE GRAPH [ IF NOT EXISTS ] <name>
[ PARTITION_NUM = <integer> ]
[ COMMENT = <string> ]
[ CHARSET = {UTF8 | UTF8MB4 | GBK | GB2312 | GB18030} ];
详细说明
大写单词
: 关键字。例如:CREATE
,GRAPH
。< >
:语法片段或子句。例如:<name>
,<integer>
。[ ]
:方括号内的内容是可选的。例如:[IF NOT EXISTS]
表示该片段可以省略。[ ]...
:方括号后跟省略号表示该片段可以出现零次或多次。|
:选择符,表示需要从提供的选项中选择一个。例如:{UTF8 | UTF8MB4 | GBK | GB2312 | GB18030}
表示需要从这几种字符集中选择一个。
语法介绍
数据类型
ArcGraph 图数据库中支持的属性数据类型如下。
英文 | 中文 | 说明 |
---|---|---|
Byte | 字节类型 | 用于表示二进制数据或存储小的整数值,包括 BYTE。 |
Integer | 整数 | 用于存储整数数据,包括 INT32、INT64 和 BIGINT。 |
Float | 单精度浮点数 | 用于存储小数数据,包括 FLOAT。它遵循 IEEE-754 浮点数标准,提供约 7 位十进制有效数字的精度。 |
Double | 双精度浮点数 | 用于存储非常大或非常小的浮点数值的数据类型,包括 DOUBLE。它遵循 IEEE-754 浮点数标准,提供约 16 位十进制有效数字的精度。 |
Boolean | 布尔值 | 用于存储布尔值(True/False),包括 BOOL 或 BOOLEAN。 |
Timestamp | 时间戳 | 用于存储日期和时间数据,包括 TIMESTAMP。 |
Date | 日期 | 用于存储日期数据,包括 DATE。 |
Time | 时间 | 用于存储时间数据,包括 TIME。 |
DateTime | 日期时间 | 用于存储日期和时间数据,包括 DATETIME。 |
JSON | - | 用于存储结构化的复杂数据,包括 JSON。 说明: 当对该数据类型的属性创建索引时,应使用 ->> 操作符明确指定 JSON 路径,例如 idx_person(name->>'$.last_name') 。 |
String | 字符串 | 用于存储文本数据,包括 String。 |
UUID | 通用唯一标识符 | 是一个 128 位长的标识符,通常用于在分布式系统中唯一标识实体,包括 UUID。 说明: 不支持对该数据类型的属性创建索引。 |
Array | 数组数据类型 | 数组数据类型是一种用于存储和操作一组有序元素的数据结构。在图数据库中,数组数据类型可以作为点或边的属性,以存储相同类型的多个值或其他需要按顺序存储的数据。语法定义如下:
不支持对该数据类型的属性创建索引。 |
BigDecimal | 高精度小数类型 | 用于存储和处理高精度的小数数值,遵循 BIGDECIMAL(prec,scale) 规范。其中,prec 表示总位数精度,取值范围是[10, 50];scale 表示小数部分的刻度,取值范围是[0, 30]。默认精度设置为 BIGDECIMAL(35, 18) 。说明: - 允许用户自定义精度范围,当数值超出指定的范围时系统会截断多余部分并以 0 填充,对于超出范围的第一位,系统将根据四舍五入原则进行处理,确保数值在指定精度内以精确格式展示。 - 该类型支持从 String 到 BigDecimal 的隐式类型转换,便于在插入语句中直接使用字符串表示小数,如 INSERT (:sample1 {id: 1, val: '124567890.098765438978967987'}); 。-不支持对该数据类型的属性创建索引。 -仅 ArcGraph >= v2.1.1 版本支持此类型。 |
ST_GEOMETRY | 地理空间类型 | 用于存储地理空间数据的数据类型。 说明: - 仅 ArcGraph >= v2.1.2 版本支持此类型。 - ST_GEOMETRY 数据类型上仅支持创建空间数据索引( SPATIAL INDEX )。 |
ArcGraph 图数据库中支持的非属性数据类型如下。
英文 | 中文 | 说明 |
---|---|---|
List | 列表数据类型 | 用于存储一组有序的元素,元素可以是任意数据类型。在 ArcGraph 图数据库中,列表数据类型由“[]”符号和多个元素组成,各个元素间使用英文逗号(,)分隔。请注意,列表数据类型不可以作为点或边的属性。 |
模式
ArcGraph 图数据库对 Cypher 查询语言中的模式(Patterns)提供了广泛的支持,以下将介绍 ArcGraph 图数据库中常用的几种模式。
分类 | 说明 |
---|---|
Nodes | 表示图数据库中的点,在 ArcGraph 图数据库中用 Vertex(点)表示。 |
Related nodes | 表示多个点以及它们之间的关系。如 (a)-[]->(b) 。 |
Specifiying properties | 表示在点或边上使用属性以进行精确匹配或查询。 |
Relationships | 表示图数据库中各点间的关联关系,在 ArcGraph 图数据库中用 Edge(边)表示。 |
Variable-length patterns | 表示允许使用可变长度的模式来匹配具有特定长度的路径。 |
Path variable | 表示允许将匹配到的整个路径作为一个整体进行操作或返回。 |
-
描述点(Vertex)
表达方式 说明 ()
匿名的点 (John)
指定变量名的点 (:person)
指定点类型的点 (John:person)
指定变量名和点类型的点 (John:person {name: "John"})
有变量名、点类型和属性值的点 (John:person {name: "John", age: 30})
有变量名、点类型和联合属性值的点 -
描述边(Edge)
使用
一
对短横线(即“--”
)表示一个无方向边,有方向的边则在其中一端加上一个箭头(即“<--”
或“-->”
)。方括号表达式“[…]”
可用于添加详情,表达式中可以包含变量、属性、类型等信息。边的常见表达方式如下:表达方式 说明 --
无向边 -->
正向边 <--
反向边 -[r]->
指定变量名的正向边 -[:like]->
指定边类型的正向边 -[r:like]->
带有变量名和边类型的正向边 -[r:like {name: "喜欢"}]->
带有变量名、边类型、属性值的边
在 ArcGraph 图数据库中,使用类 Cypher 代码将两个简单的模式(Pattern)连接在一起,示例如下:
(:person) -[:like]-> (:person)
子句
ArcGraph 图数据库支持 Cypher 查询语言中的多种子句(Clauses),这些子句为数据查询提供了强大的功能。以下将介绍 ArcGraph 图数据库中常用的几种子句,关于子句的详细 介绍请参见 子句 章节。
子句 | 说明 |
---|---|
MATCH | 用于根据指定的模式(pattern)查询图。详情请参见 基本查询 章节。 |
OPTIONAL MATCH | 与 MATCH 子句类似,但不同之处在于,当查询结果为空时,该子句会对缺失部分返回 null 值。 |
RETURN | 用于指定查询结果的返回格式。详情请参见 RETURN 章节。 |
WITH | 用于在查询过程中将中间结果传递给后续的查询子句,即通过 WITH 子句,将一个查询的输出直接作为下一个查询的输入。详情请参见 WITH 章节。 |
UNWIND | 用于将列表元素展开为独立的记录序列。详情请参见 UNWIND 章节。 |
WHERE | 用于指定过滤条件,可以与 MATCH 、OPTIONAL MATCH 或 WITH 子句组合使用。详情请参见 WHERE 章节。 |
ORDER BY | 用于对(中间)结果进行排序,可以与 RETURN 或 WITH 子句组合使用。详情请参见 ORDER BY 章节。 |
SKIP | 用于跳过查询结果中的前 n 个记录。详情请参见 SKIP 章节。 |
LIMIT | 用于限制查询结果返回的个数。详情请参见 LIMIT 章节。 |
CREATE | 用于在图数据库中创建点、边等。 |
DELETE | 用于删除指定的点、边等。 |
SET | 用于修改已存在的点、边的属性值或类型。 |
CALL[...YIELD] | 用于调用图数据库内置过程。 |
UNION | 用于合并多个查询的结果。详情请参见 UNION 章节。 |
表达式
ArcGraph 图数据库支持 Cypher 查询语言中的多种表达式(Expressions),以下将介绍 ArcGraph 图数据库中常用的几种表达式,关于表达式的详细介绍请参见 表达式 章节。
表达式 | 说明 |
---|---|
常量 | 常量表示固定的数值或文本。例如,数字 42 、字符 串 "hello" 、布尔值 true 或 false 等。 |
变量 | 变量是一种用于指代图数据库中点、边及其属性值的标识符。例如,n:person 中,n 是一个变量,它指代了一个 person 类型。 |
属性 | 属性是对象的一部分,用于描述对象的特性,例如,一个 Person 对象可能有一个 name 属性。 |
函数调用 | 函数调用是执行特定函数并向其传递必要参数以执行特定任务的过程。例如,sum(2, 3) 是一个函数调用,其中 sum 是一个函数,2 和 3 是参数。 |
聚合函数 | 聚合函数是用于对一组值做聚合运算的函数。例如,SUM() 、AVG() 、MAX() 、MIN() 和 COUNT() 。 |
计算表达式 | 计算表达式由数据和运算符组成,用于执行计算并返回结果,例如,2 + 3 * 4 是一个计算表达式。 |
谓词表达式 | 谓词表达式返回一个布尔值(true 或 false ),通常用于条件判断。例如,x > 10 是一个谓词表达式。 |
操作符
ArcGraph 图数据库支持 Cypher 查询语言中的多种操作符,以满足用户对于数据查询、计算、比较和逻辑判断的需求。以下将介绍 ArcGraph 图数据库中常用的几种操作符。
操作符 | 描述 |
---|---|
通用操作符 | 用于执行基本的查询操作,如 DISTINCT (用于返回唯一不同的值)、. (用于属性访问)。 |
数学运算操作符 | 用于在 Cypher 查询中执行基本的数学运算,如 + (加法)、- (减法)、* (乘法)、/ (除法)和 % (取模)。 |
比较运算操作符 | 用于在 Cypher 查询中比较两个值,如 = (等于)、<> (不等于)、!= (不等于)、< (小于)、> (大于)、<= (小于等于)和 >= (大于等于)。 |
字符串比较操作符 | 用于处理字符串类型的比较操作,如 STARTS WITH (用于检查字符串是否以指定子串开始)、ENDS WITH (用于检查字符串是否以指定子串结束)或 CONTAINS (用于检查字符串是否包含指定子串)。 |
布尔运算操作符 | 用于在 Cypher 查询中执行逻辑运算,如 AND (逻辑与)、OR (逻辑或)和 NOT (逻辑非)。 |
字符串操作符 | 主要用于处理字符串类型的值,如 + (用于字符串连接操作)和 IN (用于检查一个值是否存在于一个字符串列表中)。 |
内置函数
ArcGraph 图数据库支持丰富的内置函数,这些函数为用户提供了强大的数据处理能力。以下将介绍 ArcGraph 图数据库中常用的几种内置函数,关于内置函数的详细介绍请参见 内置函数 章节。
函数类型 | 说明 |
---|---|
字符串函数 | 对字符串进行操作的函数,如 concat() 、concat_ws() 等。详情请参见 字符串函数 章节。 |
数学函数 | 包括常见的数学运算,如 abs() 、cos() 等。详情请参见 数学函数 章节。 |
日期时间函数 | 提供关于时间和日期处理的函数,如 timestamp() 、date() 等,详情请参见 日期时间函数 章节。 |
工具函数 | 提供一些通用函数,如 randomUUID() 等,详情请参见 工具函数 章节。 |
聚合函数 | 用于对一组值进行计算,并返回单个值作为结果的函数,如 avg() 、sum() 等,详情请参见 聚合函数 章节。 |
Graph 函数 | 用于图数据处理的函数,如 id() 、pk() 等,详情请参见 Graph 函数 章节。 |
转换函数 | 用户数据类型之间相互转换的函数,如 toBoolean() 、toFloat() 等,详情请参见 转换函数 章节。 |
对数函数 | 用于对数计算的函数,如 log() 、log10() 等,详情请参见 对数函数 章节。 |
Partial 函数 | 用于数据脱敏的函数,详情请参见 Partial 函数 章节。 |
路径函数 | 用于查询和分析路径的函数,如 startNode() 、endNode() 等,详情请参见 路径函数 章节。 |
列表与数组函数 | 用于对列表和数组进行操作的函数,如 size() 、head() 等,详情请参见 列表/数组函数 章节。 |
条件表达式函数 | 主要用于根据条件判断返回不同的结果,详情请参见 条件表达式函数 章节。 |
字符集和排序规则
字符集和排序规则是数据库中字符数据处理的两个重要概念。了解字符集和排序规则对于正确处理数据库中的字符数据至关重要。
- 字符集是计算机系统中用于编码字符的集合,不同的字符集可能包含不同的字符和符号,并且使用不同的编码规则。在图数据库中字符集用于存储和表示文本数据的一组字符编码规则。ArcGraph 系统默认编码方式为 UTF8mb4。
- 排序规则是字符集中用于比较每个字符的一套规则,它决定了字符在数据库查询中的比较和排序行为。每种字符集可对应一到多个排序规则,每种排序规则对应一种字符集。在涉及字符串比较或排序的操作时,系统会调用对应指定的排序规则算法来确保正确的处理结果。
支持类型
ArcGraph 支持的字符集及排序规则如下:
字符集
类型 | 说明 |
---|---|
UTF-8 | UTF-8(Unicode Transformation Format-8 bits)是 UNICODE 的变长编码方式,用于表示 Unicode 字符集中的字符。UTF-8 以 8 位字节为单元对 Unicode 字符集进行编码,不使用大尾序和小尾序形式,每个使用 UTF-8 存储的字符,除了第一 个字节外,其余字节的前两个比特都是以"10"开始,使文字处理器能快速找出每个字符的开始位置。为了与 ASCII 码兼容,UTF-8 使用可变长度字节来存储 Unicode,用 1~4 个字节表示一个 Unicode 字符编码,可以表示 Unicode 的所有字符。 |
GBK/GB18030 | GB18030(全称为:国家标准GB18030-2005《信息技术中文编码字符集》)是中华人民共和国当前最新的内码字集,兼容 GB2312 和 GBK,支持 Unicode 的全部汉字,收录 70244 个汉字。采用多字节编码,支持少数民族文字和日韩汉字,最多可定义 161 万个字符。其字节结构包括单字节、双字节和四字节。 |
排序规则
排序规则 | 排序结果 | 对应字符集 |
---|---|---|
gb18030_bin | gb18030 二进制编码排序 | gb18030 |
gb18030_chinese_ci | 按拼音排序 | gb18030 |
gbk_bin | gbk 二进制编码排序 | gbk |
gbk_chinese_ci | 按拼音排序 | gbk |
utf8_bin | utf8 二进制编码排序 | utf8 |
utf8_pinyin | utf8编码拼音排序 | utf8 |