本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
OpenPher Amazon Neptune 的标准合规性
OpenPher 的 Amazon Neptune 版本通常支持Cypher 查询语言参考版本 9
在 Neptune 中 Support OpenPher 条款
除非另有说明,否则 Neptune 支持以下条款:
MATCH
— 支持,除此之外
和shortestPath()
目前不支持。allShortestPaths()
OPTIONAL MATCH
— 是不Neptune 目前支持。MANDATORY MATCH
-
RETURN
— 支持,除非与非静态值一起使用SKIP
要么LIMIT
. 例如,以下代码当前不起作用:MATCH (n) RETURN n LIMIT toInteger(rand()9) // Does NOT work!
-
WITH
— 支持,除非与非静态值一起使用SKIP
要么LIMIT
. 例如,以下代码当前不起作用:MATCH (n) WITH n SKIP toInteger(rand()9) WITH count() AS count RETURN count > 0 AS nonEmpty // Does NOT work!
UNWIND
WHERE
ORDER BY
SKIP
LIMIT
CREATE
DELETE
SET
REMOVE
MERGE
— 是不Neptune 目前支持。CALL[YIELD...]
UNION, UNION ALL
— 支持只读查询,但是变异查询不当前支持。
Support Neptune 的 OpenPher 运营商
除非另有说明,否则 Neptune 支持以下运算符:
一般运营商
DISTINCT
这些区域有:
.
用于访问嵌套文字映射属性的运算符。
数学运算
这些区域有:
+
加法运算符。这些区域有:
-
减法运算符。这些区域有:
*
乘法运算符。这些区域有:
/
除操作员。这些区域有:
是不Neptune 目前支持。%
模数除法运算符这些区域有:
是不Neptune 目前支持。^
指数运算符
比较运算符
这些区域有:
=
加法运算符。这些区域有:
<>
不平等运算符。这些区域有:
<
支持小于运算符,除非其中一个参数是路径、列表或 Map。这些区域有:
>
除非其中一个参数是路径、列表或 Map,否则支持大于运算符。这些区域有:
<=
支持小于或等于运算符,除非其中一个参数是路径、列表或 Map。这些区域有:
>=
支持大于或等于运算符,除非其中一个参数是路径、列表或 Map。IS NULL
IS NOT NULL
STARTS WITH
如果要搜索的数据是字符串,则支持。ENDS WITH
如果要搜索的数据是字符串,则支持。CONTAINS
如果要搜索的数据是字符串,则支持。
布尔运算符
AND
OR
XOR
NOT
字符串运算符
这些区域有:
+
连接运算符。
列出运算符
这些区域有:
+
连接运算符。IN
(检查列表中是否存在某个项目)
在 Neptune 中 Support OpenPher 表达式
除非另有说明,否则 Neptune 支持以下表达:
CASE
-
这些区域有:
[]
表达式为不Neptune 目前支持访问节点、关系或映射中的动态计算属性键。例如,以下内容不起作用:MATCH (n) WITH [5, n, {key: 'value'}] AS list RETURN list[1].name
在 Neptune 中 Support OpenPher 函数
除非另有说明,否则 Neptune 支持以下功能:
谓词函数
exists()
标量函数
coalesce()
endNode()
head()
id()
last()
length()
properties()
size()
— 此重载方法目前仅适用于模式表达式、列表和字符串startNode()
— 是不Neptune 目前支持。timestamp()
toBoolean()
toFloat()
toInteger()
type()
聚合函数
avg()
collect()
count()
max()
min()
— 是不Neptune 目前支持。percentileCont()
— 是不Neptune 目前支持。percentileDisc()
— 是不Neptune 目前支持。stDev()
— 是不Neptune 目前支持。StDevP()
sum()
列出 函数
keys()
labels()
nodes()
range()
relationships()
reverse()
tail()
数学函数 ndash; 数字
abs()
ceil()
floor()
rand()
round()
sign()
数学函数 ndash; 对数
e()
exp()
log()
log10()
sqrt()
数学函数 ndash; 三角函数
— 是不Neptune 目前支持。acos()
— 是不Neptune 目前支持。asin()
— 是不Neptune 目前支持。atan()
— 是不Neptune 目前支持。atan2()
— 是不Neptune 目前支持。cos()
— 是不Neptune 目前支持。cot()
— 是不Neptune 目前支持。degrees()
— 是不Neptune 目前支持。pi()
— 是不Neptune 目前支持。radians()
— 是不Neptune 目前支持。sin()
— 是不Neptune 目前支持。tan()
字符串函数
left()
lTrim()
replace()
reverse()
right()
rTrim()
split()
substring()
toLower()
toString()
toUpper()
trim()
用户定义的函数
用户定义的函数
是不Neptune 目前支持。
海王星特定的 OpenPher 实施细节
以下各节介绍了 OpenPher 的 Neptune 实现可能与或超越了OpenPher 规范
Neptune 中的可变长度路径 (VLP) 评估
可变长度路径 (VLP
) 评估会发现图表中节点之间的路径。在查询中,路径长度可以不受限制。为了防止周期,OpenPher 规范
对于 VLP,Neptune 实现偏离 opencePher 规范,因为它只支持属性相等性过滤器的常量值。请执行以下查询:
MATCH (x)-[:route*1..2 {dist:33, code:x.name}]->(y) return x,y
由于x.name
属性相等筛选器值不是常量,此查询会生成UnsupportedOperationException
随着消息:Property predicate over variable-length relationships with non-constant
expression is not supported in this release.
Neptune OpenPher 实施中的时间支持
Neptune 目前在 OpenPher 中对时间功能提供了有限的支持。它支持DateTime
时态类型的数据类型。
这些区域有:datetime()
函数可以用来获取当前的 UTC 日期和时间,如下所示:
RETURN datetime() as res
日期和时间值可以从存储在 Neptune 的数据中转换,如下所示:
MATCH (n) RETURN datetime(n.createdDate)
日期和时间值可以从"
约会T
时间"
格式在哪里约会和时间两者都用以下支持的表格之一表示:
支持的日期格式
yyyy-MM-dd
yyyyMMdd
yyyy-MM
yyyy-DDD
yyyyDDD
yyyy
支持的时间格式
HH:mm:ssZ
HHmmssZ
HH:mm:ssZ
HH:mmZ
HHmmZ
HHZ
HHmmss
HH:mm:ss
HH:mm
HHmm
HH
例如:
RETURN datetime('2022-01-01T00:01') // or another example: RETURN datetime('2022T0001')
请注意,Neptune OpenPher 中的所有日期/时间值都作为 UTC 值存储和检索。
Neptune opency Pher 使用statement
clock,这意味着在整个查询期间使用同一时间。同一交易中的不同查询可能会在时间上使用不同的时间。
Neptune 不支持在调用时使用函数datetime()
. 例如,以下功能不工作:
CREATE (:n {date:datetime(tostring(2021))}) // ---> NOT ALLOWED!
Neptune 目前不支持其他功能和操作DateTime
对象,例如加法和减法。
Neptune OpenPher 语言语义的差异
Neptune 将节点和关系 ID 表示为字符串而不是整数。ID 等于通过数据加载器提供的 ID。如果该列有命名空间,则命名空间加上 ID。因此,id
函数返回字符串而不是整数。
这些区域有:INTEGER
数据类型限制为 64 位。当使用TOINTEGER
函数,负值被截断为LLONG_MIN
将正值截断为LLONG_MAX
.
例如:
RETURN TOINTEGER(2^100) > 9223372036854775807 RETURN TOINTEGER(-1 * 2^100) > -9223372036854775808
Neptune OpenPher 和 Cypher 之间的其他区别
Neptune OpenPher 删除了 Unicode 中定义的空白
trim()
、ltrim()
和rtrim()
函数。在 Neptune opency Pher 中,
tostring(
双重的)
对于较大的双精度值,不会自动切换到 E 表示法。尽管 OpenysPher CREATE 不创建多值属性,但它们可以存在于使用 Gremlin 创建的数据中。如果 Neptune OpenPher 遇到多值属性,则任意选择其中一个值,从而产生不确定性的结果。