本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
Amazon Neptune 的原生 Gremlin 步驟支援
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( )
– 除非步驟與 by()
、from()
或to()
調變器搭配使用,否則cyclicPath()
該步驟通常可以轉換為原生 Neptune 引擎操作。例如,在以下查詢中,不會轉換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())
-
id( )
– 除非在屬性上使用 id()
步驟,否則會轉換此步驟,如下所示:g.V().has('code','ANC').properties('code').id()
-
mergeE()
– 如果參數 (合併條件、 onCreate
和onMatch
) 為常數 (null
、常數 或 )Map
,則可以將mergeE()
步驟轉換為原生 Neptuneselect()
引擎操作Map
。 可以轉換疊加邊緣中的所有範例。 -
mergeV()
– 如果參數 (合併條件、 onCreate
和 ) 為常數 (null
、常數 或 )Map
,則可以將 mergeV(onMatch
) 步驟轉換為原生 Neptuneselect()
引擎操作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 運算子。
如果使用
+
、-
、mult
、div
、min
和max
以外的數字 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( )
– unfold()
步驟只有在用於 Word 配方頁面上建議的 Upsert 模式時,以及與下列 cap()
內容搭配使用時,才能轉換為原生 Neptune 引擎操作: TinkerPopg.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')
使用
eq
、neq
、within
和without
以外的比較運算子時。利用使用者提供的彙總時。
-
永不轉換為原生 Neptune 引擎操作的 Gremlin 步驟
Neptune 中支援下列 Gemlin 步驟,但這些步驟永遠不會轉換為原生 Neptune 引擎操作。相反地,它們是由 Gemlin 伺服器執行。
Neptune 完全不支援的 Gremlin 步驟
Neptune 中完全不支援下列 Gremlin 步驟。在大多數情況下,這是因為它們需要一個 GraphComputer
,但 Neptune 目前不支援它。
實際上部分支援該io()
步驟,因為它可以從 read()
URL 用於 ,但不能用於 write()
。