使用 openCypher 访问 Neptune 图形 - Amazon Neptune
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

使用 openCypher 访问 Neptune 图形

Neptune 支持使用 openCypher 构建图形应用程序,openCypher 是目前使用图形数据库的开发人员最常用的查询语言之一。开发人员、业务分析师和数据科学家都喜欢 openCypher 的受 SQL 启发的语法,因为它提供了一种熟悉的结构来为图形应用程序编写查询。

openCypher 是一种用于属性图的声明式查询语言,最初由 Neo4j 开发,然后于 2015 年开源,并在 Apache 2 开源许可证下为 openCypher 项目做出了贡献。其语法在 Cypher 查询语言参考版本 9 中介绍。

有关 openCypher 规范在 Neptune 支持方面的限制和差异,请参阅Amazon Neptune 中的 openCypher 标准合规性

注意

Cypher 查询语言的当前 Neo4j 实现在某些方面与 openCypher 规范有所不同。如果您要将当前的 Neo4j Cypher 代码迁移到 Neptune,请参阅Neptune 与 Neo4j 的兼容性重写 Cypher 查询以在 Neptune 上的 openCypher 中运行以获取帮助。

从引擎版本 1.1.1.0 开始,openCypher 可在 Neptune 中用于生产用途。

Gremlin 与 openCypher:相似之处和不同之处

Gremlin 和 openCypher 都是属性图查询语言,它们在很多方面互补。

Gremlin 旨在吸引程序员并无缝融入代码。因此,从设计上讲,Gremlin 势在必行,而对于具有 SQL 或 SPARQL 经验的人来说,可能会更熟悉 openCypher 的声明式语法。对于在 Jupyter 笔记本中使用 Python 的数据科学家来说,Gremlin 似乎更自然,而对于具有一些 SQL 背景的企业用户来说,openCypher 可能看起来更直观。

好消息是,在 Neptune 中,您不必在 Gremlin 和 openCypher 之间进行选择。无论使用这两种语言中的哪一种来输入数据,任何一种语言的查询都可以在同一个图形上运行。您可能会发现在某些情况下使用 Gremlin 更方便,而在其它情况下使用 openCypher 更方便,这取决于您正在做的事情。

Gremlin 使用命令式语法,这允许您通过一系列步骤控制如何在图形中移动,每个步骤都接收数据流,对其执行某种操作(使用筛选条件、映射等),然后将结果输出到下一个步骤。Gremlin 查询通常采用 g.V() 形式,后跟其它步骤。

在 openCypher 中,您使用一种受 SQL 启发的声明式语法,此语法使用主旨语法(比如 ()-[]->())指定要在图形中查找的节点和关系的模式。openCypher 查询通常以 MATCH 子句开头,后跟其它子句,如 WHEREWITHRETURN

开始使用 openCypher

无论如何加载,您都可以使用 openCypher 在 Neptune 中查询属性图数据,但不能使用 openCypher 来查询以 RDF 形式加载的数据。

Neptune 批量加载程序接受采用 Gremlin 的 CSV 格式openCypher 的 CSV 格式的属性图数据。当然,您也可以使用 Gremlin 和/或 openCypher 查询将属性数据添加到图形中。

openCypher 处理的数据采用一系列无序的键/值映射的形式。完善、操作和增强这些映射的主要方法是使用子句对键/值对执行模式匹配、插入、更新和删除等任务。

openCypher 中有几个子句用于在图形中查找数据模式,其中 MATCH 最常用。MATCH 允许您指定要在图形中查找的节点、关系和筛选条件的模式。例如:

  • 获取所有节点

    MATCH (n) RETURN n
  • 查找连接的节点

    MATCH (n)-[r]->(d) RETURN n, r, d
  • 查找路径

    MATCH p=(n)-[r]->(d) RETURN p
  • 获取所有带有标签的节点

    MATCH (n:airport) RETURN n

请注意,上面的第一个查询返回图形中的每单个节点,接下来的两个查询返回每个具有关系的节点,但通常不建议这样做!几乎在所有情况下,您都希望缩小返回的数据的范围,这可以通过指定节点或关系标签和属性来实现,如第四个示例所示。

您可以在 Neptune github 示例存储库中找到 openCypher 语法的便捷备忘单。