Amazon Neptune でのネイティブ Gremlin ステップサポート - Amazon Neptune

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

Amazon Neptune でのネイティブ Gremlin ステップサポート

Amazon Neptune エンジンでは、Gremlin クエリのチューニング で説明されているように、すべての Gremlin ステップに対する完全なネイティブサポートはありません。。現在のサポートは 4 つのカテゴリに分類されます。

常にネイティブ Neptune エンジンオペレーションに変換できる Gremlin ステップ

多くの Gremlin ステップは、次の条件を満たす限り、ネイティブ Neptune エンジンオペレーションに変換できます。

  • クエリでは、変換できないステップの前には表示されません。

  • 親ステップがあれば、その親ステップは変換できます。

  • もしあれば、すべての子トラバーサルは変換できます。

以下の Gremlin ステップは、次の条件を満たす限り、ネイティブ Neptune エンジンオペレーションに変換できます。

場合によってはネイティブ Neptune エンジンオペレーションに変換できる Gremlin ステップ

一部の Gremlin ステップは、状況によってはネイティブ Neptune エンジンオペレーションに変換できますが、他の状況では変換できません。

  • addE( )   –   トラバーサルをキーとして含む property() ステップが直後に続く場合を除き、addE() ステップは、通常ネイティブ Neptune エンジンオペレーションに変換できます。

  • addV( )   –   トラバーサルをキーとして含む property() ステップが直後に続く場合を除き、または複数のラベルが割り当てられる場合を除き、addV() ステップは、通常ネイティブ Neptune エンジンオペレーションに変換できます。

  • aggregate( )   –   子トラバーサルまたはサブトラバーサルで使用されている場合を除き、または格納される値が頂点、エッジ、ID、ラベル、またはプロパティ値以外のものでない限り、通常 aggregate() ステップは、ネイティブ Neptune エンジンオペレーションに変換できます。

    次の例では、子トラバーサルで使用されているため、aggregate() は変換されません。

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

    この例では、格納される値が min() であるため、aggregate () は変換されません。

    g.V().has('code','ANC').outE().aggregate('x').by(values('dist').min())
  • barrier( )   –   barrier()ステップは、その後のステップが変換されない限り、通常ネイティブ Neptune エンジンオペレーションに変換できます。

  • cap( )   –   cap() ステップが変換される唯一のケースは、unfold() ステップと組み合わせて頂点、エッジ、ID、またはプロパティ値の集約の展開バージョンを返す場合です。この例では、次に .unfold() が後続するので、cap() は変換されます。

    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 レシピページで推奨されるアップサートパターンに続く場合です。その他の coalesce() パターンは使用できません。変換は、すべての子トラバーサルが変換できる場合に限られ、それらはすべて出力と同じタイプ (頂点、エッジ、ID、値、キー、またはラベル) を生成し、新しい要素にトラバースし、repeat() ステップは含みません。

  • constant( )   –   constant () ステップは現在、次のように、定数値を割り当てるためのトラバーサルの sack().by() 一部内で使われる場合にのみ変換されます。

    g.V().has('code','ANC').sack(assign).by(constant(10)).out().limit(2)
  • cyclicPath( )   –   cyclicPath() ステップは、それが by()from()to() モジュレータのいずれかと使われている場合を除き、通常ネイティブ 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() ステップは、それが sideEffect( または optional() ステップのいずれかで使われている場合を除き、通常、ネイティブ Neptune エンジンオペレーションに変換できます。

  • fold( )   –   fold () ステップを変換できる状況は2つしかありません。つまり、TinkerPop レシピページで推奨されているアップサートパターンで使われる場合と、次のような group().by() コンテキストでそれが使われる場合です。

    g.V().has('code','ANC').out().group().by().by(values('code', 'city').fold())
  • has( ) – `has()` ステップは、通常、「T」が述語「P.eq」、「P.neq」、または「P.contains」を使用するクエリで提供されるネイティブ Neptune エンジンオペレーションに変換できます。`has(eq, T.id, 'id1234')` に相当する `hasId('id1234')` など、`P` のインスタンスがネイティブに変換されることを意味する `has()` のバリエーションを想定します。

  • id( )   –   id() ステップは、プロパティで使用されない限り、次のように変換されます。

    g.V().has('code','ANC').properties('code').id()
  • mergeE() – パラメータ (マージ条件、、onCreate) が定数 (、定数 null、または select()のいずれかonMatch) である場合MapmergeE()ステップをネイティブ Neptune エンジンオペレーションに変換できますMap アップサートエッジのすべての例を変換できます。

  • mergeV() – パラメータ (マージ条件、 onCreateおよび ) が定数 (、定数 null、または select()の ) である場合Map、mergeV(onMatch) ステップをネイティブ Neptune エンジンオペレーションに変換できます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()に従うby()ステートメントの数が、次のように、指定されたラベルの数と一致しないのでなければ、project()ステップは、通常ネイティブ Neptune エンジンオペレーションに変換できます。

    g.V().has('code','ANC').project('x', 'y').by(id)
  • range( )   –   range()ステップは、対象範囲の下端がゼロの場合にのみ変換されます (たとえば、range(0,3))。

  • repeat( )   –   次のように別のrepeat()ステップノード内にネストされている場合を除き、repeat()ステップは、通常ネイティブ Neptune エンジンオペレーションに変換できます。

    g.V().has('code','ANC').repeat(out().repeat(out()).times(2)).times(2)
  • sack( )   –   sack()ステップは、次の場合を除き、通常ネイティブ Neptune エンジンオペレーションに変換できます。

    • 数値以外のサック演算子が使用されている場合。

    • +-multdivmin および max 以外の数値サック演算子が使用されている場合。

    • 次のように、サック値に基づいてフィルタリングするために where() ステップの中で 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() ステップは、TinkerPop レシピページで推奨されるアップサートパターンで使われる場合と、次のように 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')
    • eqneqwithin、および without 以外の比較演算子が用いられる場合。

    • ユーザー指定の集計が使用される場合。

ネイティブ Neptune エンジンオペレーションに変換されない Gremlin ステップ

次の Gremlin ステップは Neptune でサポートされていますが、ネイティブ Neptune エンジンオペレーションに変換されることはありません。代わりに、Gremlin サーバーによって実行されます。

Neptune ではまったくサポートされていない Gremlin ステップ

次の Gremlin ステップは、Neptune ではまったくサポートされていません。ほとんどの場合、これは GraphComputer が必要なためで、これは Neptune が現在サポートしていません。

io() ステップは実際には部分的にサポートされていて、URL からの read() には使用できますが、write() には使用できません。