OpenPher Amazon Neptune 的标准合规性 - Amazon Neptune
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

OpenPher Amazon Neptune 的标准合规性

OpenPher 的 Amazon Neptune 版本通常支持Cypher 查询语言参考版本 9,包括在版本中定义的子句、运算符、表达式和函数。下面列出了 Neptune 对 OpenPher 的支持的局限性和差异。

在 Neptune 中 Support OpenPher 条款

除非另有说明,否则 Neptune 支持以下条款:

  • MATCH— 支持,除此之外shortestPath()allShortestPaths()目前不支持。

  • OPTIONAL MATCH

  • MANDATORY MATCH— 是Neptune 目前支持。

  • 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

  • CALL[YIELD...]— 是Neptune 目前支持。

  • 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()

  • timestamp()— 是Neptune 目前支持。

  • toBoolean()

  • toFloat()

  • toInteger()

  • type()

聚合函数

  • avg()

  • collect()

  • count()

  • max()

  • min()

  • percentileCont()— 是Neptune 目前支持。

  • percentileDisc()— 是Neptune 目前支持。

  • stDev()— 是Neptune 目前支持。

  • StDevP()— 是Neptune 目前支持。

  • sum()

列出 函数

  • keys()

  • labels()

  • nodes()

  • range()

  • relationships()

  • reverse()

  • tail()

数学函数 ndash; 数字

  • abs()

  • ceil()

  • floor()

  • rand()

  • round()

  • sign()

数学函数 ndash; 对数

  • e()

  • exp()

  • log()

  • log10()

  • sqrt()

数学函数 ndash; 三角函数

  • acos()— 是Neptune 目前支持。

  • asin()— 是Neptune 目前支持。

  • atan()— 是Neptune 目前支持。

  • atan2()— 是Neptune 目前支持。

  • cos()— 是Neptune 目前支持。

  • cot()— 是Neptune 目前支持。

  • degrees()— 是Neptune 目前支持。

  • pi()— 是Neptune 目前支持。

  • radians()— 是Neptune 目前支持。

  • sin()— 是Neptune 目前支持。

  • tan()— 是Neptune 目前支持。

字符串函数

  • 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 使用statementclock,这意味着在整个查询期间使用同一时间。同一交易中的不同查询可能会在时间上使用不同的时间。

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 遇到多值属性,则任意选择其中一个值,从而产生不确定性的结果。