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()、、またはto()モジュレータで使用されていない限り、通常from()、ネイティブ 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())
  • id( )   –   id() ステップは、プロパティで使用されない限り、次のように変換されます。

    g.V().has('code','ANC').properties('code').id()
  • mergeE () – パラメータ (マージ条件、 onCreateおよび onMatch) が定数 (null、定数 、または select()のいずれか) である場合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() ステップは実際には部分的にサポートされていますが、 read()から URL には使用できませんwrite()