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
- 再帰的問合せでは、次の数量詞がサポートされています。
表6-7 PGQL SELECT問合せでサポートされる数量詞
構文 説明 *
0 (ゼロ)以上 +
1以上 ?
0 (ゼロ)または1 {n}
nに等しい {n,}
n以上 {n,m}
nとmの間(両端を含む) {,m}
0からmの間(両端を含む) - 精度とスケールによるデータ型キャストがサポートされています。
SELECT CAST(v.id AS VARCHAR2(10)) || '→' || CAST(w.id AS VARCHAR2(10)) AS friendOf FROM MATCH (v) -[:friendOf]->(w)
SELECT CAST(e.mval AS NUMBER(5,2)) AS mval FROM MATCH () -[e:knows]->() WHERE e.mval = '342.5'
- 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
- 表に、
SELECT v.*
句では、頂点またはエッジのすべてのプロパティの選択がサポートされています。v
は、プロパティが選択されている変数です。次の例では、グラフのすべてのエッジ・プロパティを取得します。SELECT label(e), e.* FROM MATCH (n)-[e]->(m) ON bank_graph_view LIMIT 3
実行時に、前述の問合せが、次のように変数
e
にバインドされているすべてのプロパティを取得します。+--------------------------------------------------------------+ | label(e) | AMOUNT | DESCRIPTION | FROM_ACCT_ID | TO_ACCT_ID | +--------------------------------------------------------------+ | TRANSFERS | 1000 | transfer | 178 | 921 | | TRANSFERS | 1000 | transfer | 178 | 462 | | TRANSFERS | 1000 | transfer | 179 | 688 | +--------------------------------------------------------------+
複数の変数を使用してすべてのプロパティを選択した場合に、列名が重複しないように
PREFIX
を指定できます。次に例を示します。SELECT n.* PREFIX 'n_', e.* PREFIX 'e_', m.* PREFIX 'm_' FROM MATCH (n:Accounts) -[e:transfers]-> (m:Accounts) ON bank_graph_view LIMIT 3
問合せ出力は次のようになります。
+--------------------------------------------------------------------------------------------+ | n_ID | n_NAME | e_AMOUNT | e_DESCRIPTION | e_FROM_ACCT_ID | e_TO_ACCT_ID | m_ID | m_NAME | +--------------------------------------------------------------------------------------------+ | 178 | Account | 1000 | transfer | 178 | 921 | 921 | Account | | 178 | Account | 1000 | transfer | 178 | 462 | 462 | Account | | 179 | Account | 1000 | transfer | 179 | 688 | 688 | Account | +--------------------------------------------------------------------------------------------+
ラベル式を使用すると、指定した頂点またはエッジ・ラベルに属するプロパティのみを選択できます。
SELECT LABEL(n), n.* FROM MATCH (n:Accounts) ON bank_graph_view LIMIT 3
前述の問合せ出力は次のようになります。
+-----------------------+ | LABEL(n) | ID | NAME | +-----------------------+ | ACCOUNTS | 1 | User1 | | ACCOUNTS | 2 | User2 | | ACCOUNTS | 3 | User3 | +-----------------------+
サポートされていないPGQL機能をいくつか次に示します。
- PGQL
UPDATE
問合せは、プロパティ・グラフ・ビューでサポートされません。 - PGQLの次の
SELECT
機能はサポートされていません。- パス式でのバインド変数の使用。
バインド変数を使用しようとすると、次のようなエラーになります。
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問合せの実行