6.2 PGQL問合せを使用したサブグラフのロード
PgSqlSubgraphReader
APIを使用して、SQLプロパティ・グラフからインメモリー・サブグラフを作成できます。
1つ以上のPGQL問合せにロードするサブグラフを指定できます。これらの各PGQL問合せがデータベースで実行され、一致したすべての頂点およびエッジがサブグラフの一部としてロードされます。したがって、頂点とエッジは、少なくとも1つの問合せに一致する場合にのみロードされます。
また、サブグラフは、現在のデータベース・ユーザー・スキーマに存在するSQLプロパティ・グラフからのみ作成できます。
次の例では、複数のPGQL問合せを使用してSQLプロパティ・グラフからサブグラフを作成します。
opg4j> var graph = session.readSubgraph().
...> fromPgSql("STUDENT_NETWORK").
...> queryPgql("MATCH (v1 IS Person)-[e IS friends]->(v2 IS Person) WHERE id(v1) = 'PERSONS(1)'").
...> queryPgql("MATCH (v:Person) WHERE id(v) = 'PERSONS(2)'").
...> load()
graph ==> PgxGraph[name=STUDENT_NETWORK_4,N=3,E=1,created=1681009569883]
PgxGraph graph = session.readSubgraph()
.fromPgSql("STUDENT_NETWORK")
.queryPgql("MATCH (v1 IS Person)-[e IS friends]->(v2 IS Person) WHERE id(v1) = 'PERSONS(1)'")
.queryPgql("MATCH (v:Person) WHERE id(v) = 'PERSONS(2)'")
.load();
>>> graph = session.read_subgraph_from_pg_sql("STUDENT_NETWORK",
... ["MATCH (v1 IS Person)-[e IS friends]->(v2 IS Person) WHERE id(v1) = 'PERSONS(1)'",
... "MATCH (v:Person) WHERE id(v) = 'PERSONS(2)'"])
>>> graph
PgxGraph(name: STUDENT_NETWORK, v: 3, e: 1, directed: True, memory(Mb): 0)
カスタム名によるサブグラフのロード
デフォルトでは、新しいサブグラフはSQLプロパティ・グラフと同じ名前で作成されます。あるいは、カスタム名でサブグラフをロードする場合は、次のようにサブグラフ名を構成できます。
opg4j> var graph = session.readSubgraph().
...> fromPgSql("STUDENT_NETWORK").
...> queryPgql("MATCH (v1 IS Person)-[e IS friends]->(v2 IS Person) WHERE id(v1) = 'PERSONS(1)'").
...> queryPgql("MATCH (v:Person) WHERE id(v) = 'PERSONS(2)'").
...> load("student_subgraph")
graph ==> PgxGraph[name=student_subgraph,N=3,E=1,created=1681010160515]
PgxGraph graph = session.readSubgraph()
.fromPgSql("STUDENT_NETWORK")
.queryPgql("MATCH (v1 IS Person)-[e IS friends]->(v2 IS Person) WHERE id(v1) = 'PERSONS(1)'")
.queryPgql("MATCH (v:Person) WHERE id(v) = 'PERSONS(2)'")
.load("student_subgraph");
>>> graph = session.read_subgraph_from_pg_sql("STUDENT_NETWORK",
... ["MATCH (v1 IS Person)-[e IS friends]->(v2 IS Person) WHERE id(v1) = 'PERSONS(1)'",
... "MATCH (v:Person) WHERE id(v) = 'PERSONS(2)'"],
... graph_name="student_subgraph")
>>> graph
PgxGraph(name: student_subgraph, v: 3, e: 1, directed: True, memory(Mb): 0)