10.4.1 PGQLベースのサブグラフのロード
PgViewSubgraphReader#fromPgView
APIを使用し、一連のPGQL問合せを使用してPGQLプロパティ・グラフからインメモリー・サブグラフを作成できます。
これらのPGQL問合せは、サブグラフにロードされる頂点およびエッジを定義します。複数のPGQL問合せを使用することもでき、結果の出力グラフはサブグラフを結合したものであり、それぞれが各PGQL問合せによって別々にロードされます。
ノート:
- 非コンポジットの頂点およびエッジ・キーのみがサポートされています。
- 数値エッジ・キーのみがサポートされています。
- PGQLプロパティ・グラフからのサブグラフのロードでは、
GROUP BY
句またはORDER BY
句を指定したPGQL問合せはサポートされていません。
次の例では、複数のPGQL問合せを使用してPGQLプロパティ・グラフからサブグラフを作成します。
opg4j> var graph = session.readSubgraph().
...> fromPgView("FRIENDS").
...> queryPgql("MATCH (v1:Person)-[e:FRIENDOF]->(v2:Person) WHERE id(v1) = 'PERSONS(1)'").
...> queryPgql("MATCH (v:Person) WHERE id(v) = 'PERSONS(2)'").
...> load()
graph ==> PgxGraph[name=FRIENDS,N=3,E=1,created=1646726883194]
PgxGraph graph = session.readSubgraph()
.fromPgView("FRIENDS")
.queryPgql("MATCH (v1:Person)-[e:FRIENDOF]->(v2:Person) WHERE id(v1) = 'PERSONS(1)'")
.queryPgql("MATCH (v:Person) WHERE id(v) = 'PERSONS(2)'")
.load();
>>> graph = session.read_subgraph_from_pg_view("FRIENDS", ["MATCH (v1:Person)-[e:FRIENDOF]->(v2:Person) WHERE id(v1) = 'PERSONS(1)'",
... "MATCH (v:Person) WHERE id(v) = 'PERSONS(2)'"])
>>> graph
PgxGraph(name: FRIENDS, v: 3, e: 1, directed: True, memory(Mb): 0)
グラフ・ビジュアライゼーション・ツールを使用した前述のPGQL問合せの出力を次に示します。
カスタム名によるサブグラフのロード
デフォルトでは、新しいサブグラフはPGQLプロパティ・グラフと同じ名前で作成されます。あるいは、カスタム名でサブグラフをロードする場合は、次のようにサブグラフ名を構成できます。
opg4j> var graph = session.readSubgraph().
...> fromPgView("FRIENDS").
...> queryPgql("MATCH (v1:Person)-[e:FRIENDOF]->(v2:Person) WHERE id(v1) = 'PERSONS(1)'").
...> queryPgql("MATCH (v:Person) WHERE id(v) = 'PERSONS(2)'").
...> load("friends_network")
graph ==> PgxGraph[name=friends_network,N=3,E=1,created=1664458398090]
PgxGraph graph = session.readSubgraph()
.fromPgView("FRIENDS")
.queryPgql("MATCH (v1:Person)-[e:FRIENDOF]->(v2:Person) WHERE id(v1) = 'PERSONS(1)'")
.queryPgql("MATCH (v:Person) WHERE id(v) = 'PERSONS(2)'")
.load("friends_network");
>>> graph = session.read_subgraph_from_pg_view("FRIENDS",
... ["MATCH (v1:Person)-[e:FRIENDOF]->(v2:Person) WHERE id(v1) = 'PERSONS(1)'",
... "MATCH (v:Person) WHERE id(v) = 'PERSONS(2)'"],
... graph_name="friends_network")
>>> graph
PgxGraph(name: friends_network, v: 3, e: 1, directed: True, memory(Mb): 0)
スキーマ名の明示的な指定によるサブグラフのロード
別のスキーマからPGQLプロパティ・グラフを読み取ることでサブグラフをロードする場合は、さらにPgViewSubgraphReader#fromPgView
APIの引数としてスキーマ名を指定できます。また、PGQLプロパティ・グラフの基礎となるすべてのメタデータおよびデータ表に対するREAD
権限を持っていることも確認する必要があります。
たとえば:
opg4j> var graph = session.readSubgraph()
...> .fromPgView("GRAPHUSER", "FRIENDS")
...> .queryPgql("MATCH (v:Person) WHERE id(v) = 'PERSONS(2)'")
...> .load()
graph ==> PgxGraph[name=FRIENDS,N=1,E=0,created=1672743755511]
PgxGraph graph = session.readSubgraph()
.fromPgView("GRAPHUSER", "FRIENDS")
.queryPgql("MATCH (v:Person) WHERE id(v) = 'PERSONS(2)'")
.load();
>>> graph = session.read_subgraph_from_pg_view("FRIENDS",
... ["MATCH (v:Person) WHERE id(v) = 'PERSONS(2)'"],
... schema="GRAPHUSER")
親トピック: PGQLプロパティ・グラフからのサブグラフのロード