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

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

使用 Gremlin 访问 Amazon Neptune 中的图形

你可以使用 Gremlin 控制台在 REPL(read-eval-print 循环)环境中尝试 TinkerPop 图形和查询。

以下教程为您演练使用 Gremlin 控制台将顶点、边缘、属性以及更多内容添加到 Neptune 图形的过程,重点讲述 Neptune 特定的 Gremlin 实施的不同之处。

注意

此示例假定您已完成以下内容:

使用 Gremlin 控制台
  1. 将目录更改为解压缩 Gremlin 控制台文件所在的文件夹。

    cd apache-tinkerpop-gremlin-console-3.6.5
  2. 输入以下命令以运行 Gremlin 控制台。

    bin/gremlin.sh

    您应看到以下输出:

    \,,,/ (o o) -----oOOo-(3)-oOOo----- plugin activated: tinkerpop.server plugin activated: tinkerpop.utilities plugin activated: tinkerpop.tinkergraph gremlin>

    您现在位于 gremlin> 提示符处。您在此提示符处输入剩余步骤。

  3. gremlin> 提示符处,输入以下命令以连接到 Neptune 数据库实例。

    :remote connect tinkerpop.server conf/neptune-remote.yaml
  4. gremlin> 提示符处,输入以下命令以切换到远程模式。这会将所有 Gremlin 查询发送到远程连接。

    :remote console
  5. 添加带有标签和属性的顶点。

    g.addV('person').property('name', 'justin')

    顶点分配有包含 GUID 的 string ID。Neptune 中的所有顶点 ID 均为字符串。

  6. 添加具有自定义 ID 的顶点。

    g.addV('person').property(id, '1').property('name', 'martin')

    id 属性未使用引号引起来。这是顶点 ID 的关键字。顶点 ID 具有一个字符串,其中包含数字 1

    普通属性名称必须包含在引号中。

  7. 更改属性或添加属性(如果属性不存在)。

    g.V('1').property(single, 'name', 'marko')

    此处介绍如何更改上一步中顶点的 name 属性。这会从 name 属性删除现有值。

    如果您未指定 single,则会改为将值附加到 name 属性(如果尚未附加)。

  8. 添加属性,但在属性已有值时附加属性。

    g.V('1').property('age', 29)

    Neptune 使用集基数作为默认操作。

    此命令添加值为 29age 属性,但不替换任何现有值。

    如果 age 属性已有值,此命令将 29 附加到属性。例如,如果 age 属性是 27,则新值将为 [ 27, 29 ]

  9. 添加多个顶点。

    g.addV('person').property(id, '2').property('name', 'vadas').property('age', 27).iterate() g.addV('software').property(id, '3').property('name', 'lop').property('lang', 'java').iterate() g.addV('person').property(id, '4').property('name', 'josh').property('age', 32).iterate() g.addV('software').property(id, '5').property('name', 'ripple').property('lang', 'java').iterate() g.addV('person').property(id, '6').property('name', 'peter').property('age', 35)

    您可以同时将多个语句添加到 Neptune。

    语句可以使用换行符 ('\n')、空格 (' ')、分号 ('; ') 或什么都不使用(例如,g.addV(‘person’).iterate()g.V() 是有效的)来分隔。

    注意

    Gremlin 控制台对每个换行符 ('\n') 发送单独的命令,因此在该例中,它们每一个都是一项单独的事务。此示例的每个命令位于单独一行中,以便阅读。删除换行符 ('\n') 可以将其通过 Gremlin 控制台作为单个命令发送。

    除了最后一条语句之外的所有语句必须以终止步骤结尾,例如 .next().iterate(),否则语句不会运行。Gremlin 控制台不需要这些终止步骤。在不需要对结果进行序列化时使用 .iterate

    一起发送的所有语句包括在单个事务处理中,并且一起成功或失败。

  10. 添加边缘。

    g.V('1').addE('knows').to(__.V('2')).property('weight', 0.5).iterate() g.addE('knows').from(__.V('1')).to(__.V('4')).property('weight', 1.0)

    这里介绍了两种不同的方法来添加边缘。

  11. 添加现代图形的其余部分。

    g.V('1').addE('created').to(__.V('3')).property('weight', 0.4).iterate() g.V('4').addE('created').to(__.V('5')).property('weight', 1.0).iterate() g.V('4').addE('knows').to(__.V('3')).property('weight', 0.4).iterate() g.V('6').addE('created').to(__.V('3')).property('weight', 0.2)
  12. 删除顶点。

    g.V().has('name', 'justin').drop()

    删除 name 属性等于 justin 的顶点。

    重要

    到此为止,你就有了完整的 Apache M TinkerPop odern 图表。 TinkerPop 文档的遍历部分中的示例使用了现代图。

  13. 运行遍历。

    g.V().hasLabel('person')

    返回所有 person 顶点。

  14. 使用值运行遍历 (valueMap())。

    g.V().has('name', 'marko').out('knows').valueMap()

    返回 marko“知道”的所有顶点的键值对。

  15. 指定多个标签。

    g.addV("Label1::Label2::Label3")

    Neptune 对于一个顶点支持多个标签。创建标签时,您可以指定多个标签,同时使用 :: 分隔它们。

    此示例添加具有三个不同标签的顶点。

    hasLabel 步骤与具有以下任一三个标签的此顶点相匹配:hasLabel("Label1")hasLabel("Label2")hasLabel("Label3")

    :: 分隔符仅用于此用途。

    您不能在 hasLabel 步骤中指定多个标签。例如,hasLabel("Label1::Label2") 与任何内容都不匹配。

  16. 指定时间/日期

    g.V().property(single, 'lastUpdate', datetime('2018-01-01T00:00:00'))

    Neptune 不支持 Java 日期。改用 datetime() 函数。datetime() 接受符合 ISO8061 的 datetime 字符串。

    支持以下格式:YYYY-MM-DD, YYYY-MM-DDTHH:mmYYYY-MM-DDTHH:mm:SSYYYY-MM-DDTHH:mm:SSZ

  17. 删除顶点、属性或边缘。

    g.V().hasLabel('person').properties('age').drop().iterate() g.V('1').drop().iterate() g.V().outE().hasLabel('created').drop()

    下面是几个删除示例。

    注意

    .next() 步骤不可与 .drop() 一起使用。请改用 .iterate()

  18. 完成后,输入以下命令以退出 Gremlin 控制台。

    :exit
注意

使用分号 (;) 或换行符 (\n) 分隔每个语句。

在最后遍历之前的每个遍历必须以要执行的 iterate() 结尾。仅返回最后遍历中的数据。