5.5 SQLグラフ問合せでのONE ROW PER句の使用

SQLグラフ問合せでONE ROW PERオプション句を使用すると、問合せによって返される行数を決定できます。

ONE ROW PER句は、MATCH句の後(または存在する場合、WHERE句の後)、およびSQLグラフ問合せのCOLUMNS句の前に配置できます。

ONE ROW PER句では、問合せによって返される行数を決定する次のオプションがサポートされています:

  • ONE ROW PER MATCH (デフォルト): グラフ・パターンとの一致が1行ずつ返されるようにすることを指定します。詳細は、例5-16を参照してください。
  • ONE ROW PER VERTEX: これにより、パスに沿った頂点ごとに1行が作成されます。1つのイテレータ頂点変数を宣言し、パス内の頂点を反復して、イテレータ変数を異なる反復の異なる頂点にバインドします。パスごとに、パス内の頂点と同じ数の行が作成されます。

    たとえば、3つの頂点((v1) → (v2) → (v3))を持つ次のパスを考えてみます。この場合、ONE ROW PER VERTEX (v)は、v1v2およびv3のそれぞれに1つずつ、3つの行を作成します。

    ゼロ・ホップ・パスの場合、ONE ROW PER VERTEX (v)は1つの行を作成します。ここで、vは唯一の頂点(パスのソースと宛先)にバインドします。

    詳細は、例5-17を参照してください。

  • ONE ROW PER STEP: イテレータ頂点変数、イテレータ・エッジ変数およびもう1つのイテレータ頂点変数を宣言します。これは、最初の頂点変数がこのホップのソースにバインドされ、エッジ変数がホップのエッジ、2番目の頂点変数がホップの宛先であるホップごとに1つの行を作成します。これにより、様々なパスのステップが反復処理されます。1つのステップは、頂点-エッジ-頂点という3つの要素からなります。パスが空でなく、1つ以上のエッジと2つの頂点が含まれている場合は、エッジと同じ数のステップがあり、各反復によってそれらのイテレータ変数が次のエッジ、およびそのパス内のソースと宛先にバインドされます。

    たとえば、v1 -[e1]→ v2 -[e2]→ v3というパスを考えてみます。この場合、ONE ROW PER STEP (v1,e,v2)は次の2つの行を返します:

    v1, e1, v2
    v2, e2, v3 

    ただし、パスが空であり、1つの頂点のみで構成されている場合、そのパスには1つのステップがあり、最初のイテレータ頂点変数がその頂点にバインドされますが、イテレータ・エッジ変数と2つ目のイテレータ頂点変数はどのグラフ要素にもバインドされません。

    詳細は、例5-18を参照してください。

ONE ROW PER VERTEXまたはONE ROW PER STEPがSQLグラフ問合せで指定されている場合、MATCH句には単一のパス・パターンのみが含まれている必要があります。また、そのパス・パターンでは、頂点パターン(オプション)の後に、定量化されたエッジ・パターンか定量化されたパス・パターンのどちらかが続き、その後に頂点パターン(オプション)が続いている必要があります。たとえば、-[e]->{1,5}(v1) ((v2)->(v3)->(v4)){2,3}(v5)は、有効なパス・パターンです。

次に、イテレータ変数のいくつかの制限について説明します:

  • すべてのイテレータ変数は一意である必要があります。これは、これらの変数がMATCH句で使用されるグラフ要素変数と異なる必要があることを意味します。ONE ROW PER STEPの場合、3つのイテレータ変数はすべて異なる必要があります。
  • イテレータ変数は、SQLグラフ問合せのグラフ・パターンまたはグラフ・パターンのWHERE句で参照できません。これらは、問合せのCOLUMNS句でのみ使用できます。

ノート:

グラフ・ビジュアライゼーション・アプリケーションのSQLグラフ問合せまたはグラフ・ビジュアライゼーション用のAPEXプラグインでONE ROW PER句を使用する場合は、基礎となるSQLプロパティ・グラフ定義に頂点またはエッジ表の別名(AS句)が含まれていないことを確認してください。