6.9.2.1 プロパティ・グラフ・ビューでサポートされているPGQL機能

プロパティ・グラフ・ビューでは、次のPGQL機能がサポートされています。

  • 再帰的問合せは、次の可変長パス検索の目標でサポートされています。
    • 到達可能性
    • ANY
    • ANY SHORTEST
    • TOP k SHORTEST
  • 再帰的問合せは、次の水平集計でサポートされています。
    • LISTAGG
      SELECT LISTAGG(src.first_name || ' ' || src.last_name, ',')
      FROM MATCH TOP 2 SHORTEST ( (n:Person) ((src)-[e:knows]->)* (m:Person) )
      WHERE n.id = 1234
    • SUM
      SELECT SUM(e.weight + 3)
      FROM MATCH TOP 2 SHORTEST ( (n:Person) -[e:knows]->* (m:Person) )
      WHERE n.id = 1234
    • COUNT
      SELECT COUNT(e)
      FROM MATCH TOP 2 SHORTEST ( (n:Person) -[e:knows]->* (m:Person) )
      WHERE n.id = 1234
    • AVG
      SELECT AVG(dst.age)
      FROM MATCH TOP 2 SHORTEST ( (n:Person) (-[e:knows]->(dst))* (m:Person) )
      WHERE n.id = 1234
    • MIN (プロパティ値またはCAST式の場合のみ)
      SELECT MIN(CAST(dst.age + 5 AS INTEGER))
      FROM MATCH TOP 2 SHORTEST ( (n:Person) (-[e:knows]->(dst))* (m:Person) )
      WHERE n.id = 1234
    • MAX (プロパティ値またはCAST式の場合のみ)
      SELECT MAX(dst.birthday)
      FROM MATCH TOP 2 SHORTEST ( (n:Person) (-[e:knows]->(dst))* (m:Person) )
      WHERE n.id = 1234
  • Oracle Databaseの組込み関数とユーザー定義関数(UDF)が両方ともサポートされています。

    次に例を示します。

    • 表に、{"name":"John", "age": 43}などの値が含まれているJSON列があると仮定します。
      SELECT JSON_VALUE(p.attributes, '$.name') AS name
      FROM MATCH (p:Person)
      WHERE JSON_VALUE(p.attributes, '$.age') > 35
    • Oracle Text索引が表内のテキスト列に存在すると仮定します。
      SELECT n.text
      FROM MATCH (n)
      WHERE CONTAINS(n.text, 'cat', 1) > 0
    • UDFのupdated_idがグラフ・サーバー(PGX)に登録されていると仮定します。
      SELECT my.updated_id(n.ID) FROM MATCH(n) LIMIT 10
サポートされていないPGQL機能をいくつか次に示します。
  • PGQL UPDATE問合せは、プロパティ・グラフ・ビューでサポートされません。
  • PGQLの次のSELECT機能はサポートされていません。
    • 再帰的問合せでサポートされる数量詞は、*のみです。

      別の数量詞を使用しようとすると、次のようなエラーになります。

      opg4j> String s = "SELECT id(a) FROM MATCH ANY SHORTEST ((a) -[e]->+ (b))";
      s ==> "SELECT id(a) FROM MATCH ANY SHORTEST ((a) -[e]->+ (b))"
       
      opg4j> PgqlStatement stmt = pgqlConn.createStatement();
      stmt ==> oracle.pg.rdbms.pgql.PgqlExecution@27b9d5b7
       
      opg4j> stmt.execute(s);
      |  Exception java.lang.UnsupportedOperationException: Only zero (0) or more path quantifier is supported
    • パス式でのバインド変数の使用。

      バインド変数を使用しようとすると、次のようなエラーになります。

      opg4j> String s = "SELECT id(a) FROM MATCH ANY SHORTEST (a) -[e]->* (b) WHERE id(a) = ?";
      s ==> "SELECT id(a) FROM MATCH ANY SHORTEST (a) -[e]->* (b) WHERE id(a) = ?"
       
      opg4j> PgqlPreparedStatement ps = pgqlConn.prepareStatement(s);
      ps ==> oracle.pg.rdbms.pgql.PgqlExecution@7806db3f
       
      opg4j> ps.setString(1, "PERSON(3)");
       
      opg4j> ps.executeQuery();
      |  Exception java.lang.UnsupportedOperationException: Use of bind variables for path queries is not supported
    • 副問合せの使用。
    • in_degree関数とout_degree関数

ノート: