使用 Gremlin 存取 Amazon Neptune 中的圖形 - Amazon Neptune

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

使用 Gremlin 存取 Amazon Neptune 中的圖形

您可以使用 Grinlin 控制台在 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')

    頂點會獲指派一個 string ID,包含 GUID。所有頂點 ID 都是 Neptune 中的字串。

  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 使用成組基數做為預設動作。

    此命令會新增 age 屬性以及值 29,但不會取代任何現有的值。

    如果 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 TinkerPop 現代圖。 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()

    以下是數個 drop 範例。

    注意

    .next() 步驟不適用於 .drop()。請改用 .iterate()

  18. 完成後,輸入以下內容以退出 Gremlin 主控台。

    :exit
注意

使用分號 (;) 或換行符號字元 (\n) 來分隔每個陳述式。

最終周遊之前的每個周遊節尾必須為 iterate(),才能執行。但只有最後的周遊資料會傳回。