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() ステップが変換される唯一のケースは、レシピページで推奨されている Upsert パターンに従っている場合です。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 レシピページで推奨されている 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()
  • 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() このステップをネイティブ Neptune エンジン操作に変換できるのは、TinkerPopレシピページで推奨されている Upsert パターンで使用され、以下のように一緒に使用されている場合のみです。cap()

    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() には使用できません。