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
- LISTAGG
- 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
関数
- 再帰的問合せでサポートされる数量詞は、
ノート:
- RDBMS上のPGQL(PG_VIEWオプション)についてサポート対象およびサポート対象外のPGQL機能をすべて示すリストは、サポートされているPGQL機能と制限事項を参照してください。
- 再帰的問合せの問合せパフォーマンスを向上させるための推奨プラクティスの詳細は、PGQL問合せでのパフォーマンスの考慮事項を参照してください。
親トピック: プロパティ・グラフ・ビューに対するPGQL問合せの実行