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)