選取您的 Cookie 偏好設定

我們使用提供自身網站和服務所需的基本 Cookie 和類似工具。我們使用效能 Cookie 收集匿名統計資料,以便了解客戶如何使用我們的網站並進行改進。基本 Cookie 無法停用,但可以按一下「自訂」或「拒絕」以拒絕效能 Cookie。

如果您同意,AWS 與經核准的第三方也會使用 Cookie 提供實用的網站功能、記住您的偏好設定,並顯示相關內容,包括相關廣告。若要接受或拒絕所有非必要 Cookie,請按一下「接受」或「拒絕」。若要進行更詳細的選擇,請按一下「自訂」。

Amazon Neptune 的原生 Gremlin 步驟支援

焦點模式
Amazon Neptune 的原生 Gremlin 步驟支援 - Amazon Neptune

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

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

Amazon Neptune 引擎目前對所有 Gremlin 步驟沒有完整的原生支援。如 調校 Gremlin 查詢 中所述。目前的支援分為四個類別:

一律可以轉換為原生 Neptune 引擎操作的 Gremlin 步驟

許多 Gemlin 步驟只要符合下列條件就可以轉換為原生 Neptune 引擎操作:

  • 它們不會在查詢前面加上無法轉換的步驟。

  • 它們的父步驟 (如果有的話) 都可以進行轉換。

  • 它們所有的子周遊 (如果有的話) 都可以進行轉換。

下列 Gemlin 步驟只要符合這些條件,一律轉換為原生 Neptune 引擎操作:

在某些情況下可以轉換為原生 Neptune 引擎操作的 Gremlin 步驟

在某些情況下,有些 Gemlin 步驟可以轉換為原生 Neptune 引擎操作,但在其他情況下則不能:

  • addE( )addE() 步驟通常可以轉換為原生 Neptune 引擎操作,除非它緊接著包含周遊做為索引鍵的 property() 步驟。

  • addV( )addV() 步驟通常可以轉換為原生 Neptune 引擎操作,除非它緊接著包含周遊做為索引鍵的 property() 步驟,或除非指派了多個標籤。

  • aggregate( )aggregate() 步驟通常可以轉換為原生 Neptune 引擎操作,除非該步驟用於子周遊或次周遊,或者除非要儲存的值是頂點、邊緣、ID、標籤或屬性值以外的值。

    在下面範例中,不會轉換 aggregate(),因為正在子周遊中使用它:

    g.V().has('code','ANC').as('a') .project('flights').by(select('a') .outE().aggregate('x'))

    在此範例中,不會轉換 aggregate(),因為儲存的是值的 min()

    g.V().has('code','ANC').outE().aggregate('x').by(values('dist').min())
  • barrier( )barrier() 步驟通常可以轉換為原生 Neptune 引擎操作,除非其後的步驟未轉換。

  • cap( ) – 轉換 cap() 步驟的唯一情況是在其與 unfold() 步驟結合,以傳回頂點、邊緣、ID 或屬性之彙總的展開版本時。在這個範例中,將轉換 cap(),因為它後面是 .unfold()

    g.V().has('airport','country','IE').aggregate('airport').limit(2) .cap('airport').unfold()

    不過,如果您移除 .unfold(),將不會轉換 cap()

    g.V().has('airport','country','IE').aggregate('airport').limit(2) .cap('airport')
  • coalesce( ) – 轉換 coalesce() 步驟的唯一情況是在它遵循 TinkerPop 配方頁面上建議的 Upsert 模式時。不允許其他合併 coalesce() 模式。轉換限於可以轉換所有子周遊的情況,它們都會產生與輸出相同的類型 (頂點、邊緣、ID、值、金鑰或標籤)、它們都會周遊到一個新元素,並且它們不包含 repeat() 步驟。

  • constant( ) – 目前,僅在周遊的 sack().by() 部分內使用 constant() 步驟,以指派常數值時,才會轉換此步驟,如下所示:

    g.V().has('code','ANC').sack(assign).by(constant(10)).out().limit(2)
  • cyclicPath( )cyclicPath() 步驟通常可以轉換為原生 Neptune 引擎操作,除非該步驟與 by()from()to() 調幅器搭配使用。例如,在以下查詢中,不會轉換 cyclicPath()

    g.V().has('code','ANC').as('a').out().out().cyclicPath().by('code') g.V().has('code','ANC').as('a').out().out().cyclicPath().from('a') g.V().has('code','ANC').as('a').out().out().cyclicPath().to('a')
  • drop( )drop() 步驟通常可以轉換為原生 Neptune 引擎操作,除非該步驟是在 sideEffect() 或 optional() 內部使用。

  • fold( ) – 只有兩種情況可以轉換 fold() 步驟,即當它用於 TinkerPop 配方頁面上建議的 Upsert 模式時,以及當它用於 group().by() 內容時,如下所示:

    g.V().has('code','ANC').out().group().by().by(values('code', 'city').fold())
  • has( ) – `has()` 步驟通常可以轉換為原生 Neptune 引擎操作,前提是具有 `T` 的查詢使用述詞 `P.eq`、`P.neq` 或 `P.contains`。預期的 `has()` 變化也意味著這些 `P` 執行個體也要轉換為原生執行個體,例如 `hasId('id1234')`,其相當於 `has(eq, T.id, 'id1234')`。

  • id( ) – 除非在屬性上使用 id() 步驟,否則會轉換此步驟,如下所示:

    g.V().has('code','ANC').properties('code').id()
  • mergeE() – 如果參數 (合併條件、 onCreateonMatch) 為常數 (null、常數 或 select() )Map,則可以將mergeE()步驟轉換為原生 Neptune 引擎操作Map 可以轉換加強邊緣中的所有範例。

  • mergeV() – 如果參數 (合併條件、 onCreate和 ) 為常數 (null、常數 或 )Map,則可將 mergeV(onMatch) 步驟轉換為原生 Neptune select() 引擎操作Map 可以轉換高載頂點中的所有範例。

  • order( )order() 步驟通常可以轉換為原生 Neptune 引擎操作,除非下列其中一個條件成立:

    • order() 步驟是在巢狀子周遊內,如下所示:

      g.V().has('code','ANC').where(V().out().order().by(id))
    • 例如,本機排序正在與 order(local) 搭配使用。

    • 正在排序依據的 by() 調幅中使用自訂比較器。使用 sack() 的範例如下:

      g.withSack(0). V().has('code','ANC'). repeat(outE().sack(sum).by('dist').inV()).times(2).limit(10). order().by(sack())
    • 在同一個元素上有多個排序。

  • project( )project() 步驟通常可以轉換為原生 Neptune 引擎操作,除非 project() 後面的 by() 陳述式數目與指定的標籤數目不符,如下所示:

    g.V().has('code','ANC').project('x', 'y').by(id)
  • range( ) – 僅在有問題範圍的下限為零 (例如,range(0,3)) 時,才會轉換 range() 步驟。

  • repeat( )repeat() 步驟通常可以轉換為原生 Neptune 引擎操作,除非它在另一個 repeat() 步驟內形成巢狀,如下所示:

    g.V().has('code','ANC').repeat(out().repeat(out()).times(2)).times(2)
  • sack( )sack() 步驟通常可以轉換為原生 Neptune 引擎操作,但在下列情況下除外:

    • 如果使用非數字 sack 運算子。

    • 如果使用 +-multdivminmax 以外的數字 sack 運算子。

    • 如果在 where() 步驟內使用 sack(),根據 sack 值進行篩選,如下所示:

      g.V().has('code','ANC').sack(assign).by(values('code')).where(sack().is('ANC'))
  • sum( )sum() 步驟通常可以轉換為原生 Neptune 引擎操作,但在用來計算全域求和時不能轉換,如下所示:

    g.V().has('code','ANC').outE('routes').values('dist').sum()
  • union( )union() 步驟可以轉換為原生 Neptune 引擎操作,只要它是查詢中的最後一個步驟,但終端步驟除外。

  • unfold( ) – 僅在 TinkerPop 配方頁面上建議的 Upsert 模式中使用 unfold() 步驟時,以及此步驟與 cap() 搭配使用時,才能將此步驟轉換為原生 Neptune 引擎操作,如下所示:

    g.V().has('airport','country','IE').aggregate('airport').limit(2) .cap('airport').unfold()
  • where( )where() 步驟通常可以轉換為原生 Neptune 引擎操作,但在下列情況下除外:

    • 使用 by() 調幅時,如下所示:

      g.V().hasLabel('airport').as('a') .where(gt('a')).by('runways')
    • 使用 eqneqwithinwithout 以外的比較運算子時。

    • 利用使用者提供的彙總時。

永不轉換為原生 Neptune 引擎操作的 Gremlin 步驟

Neptune 中支援下列 Gemlin 步驟,但這些步驟永遠不會轉換為原生 Neptune 引擎操作。相反地,它們是由 Gemlin 伺服器執行。

Neptune 完全不支援的 Gremlin 步驟

Neptune 中完全不支援下列 Gremlin 步驟。在大多數情況下,這是因為它們需要一個 GraphComputer,但 Neptune 目前不支援它。

io() 步驟實際上是部分受到支援,因為它可以用來從 URL 進行 read(),但不能進行 write()

隱私權網站條款Cookie 偏好設定
© 2025, Amazon Web Services, Inc.或其附屬公司。保留所有權利。