本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用 openCypher 访问 Neptune 图形
Neptune 支持使用 openCypher 构建图形应用程序,openCypher 是目前使用图形数据库的开发人员最常用的查询语言之一。开发人员、业务分析师和数据科学家都喜欢 openCypher 的受 SQL 启发的语法,因为它提供了一种熟悉的结构来为图形应用程序编写查询。
openCypher 是一种用于属性图的声明式查询语言,最初由 Neo4j 开发,然后于 2015 年开源,并在 Apache 2 开源许可证下为 openCypher
有关 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
子句开头,后跟其它子句,如 WHERE
、WITH
和 RETURN
。
开始使用 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 示例存储库