6.1 readGraphByName APIを使用したSQLプロパティ・グラフのロード
SQLプロパティ・グラフをグラフ・サーバー(PGX)にロードするには、PgxSession
オブジェクトでreadGraphByName
APIをコールします。
SQLプロパティ・グラフをグラフ・サーバー(PGX)にロードする場合、完全なグラフ・スキーマが決定され、グラフ構成にマップされます。グラフはパーティション化されたグラフとしてロードされ、各頂点またはエッジ表が同じ名前のそれぞれの頂点またはエッジ・プロバイダにマップされます。ラベルおよびプロパティも定義のとおりロードされます。
ただし、SQLグラフをグラフ・サーバー(PGX)にロードするためにサポートされているラベルは、頂点またはエッジ表ごとに1つのみです。
たとえば、次のSQLプロパティ・グラフについて検討します。
CREATE PROPERTY GRAPH student_network
VERTEX TABLES (
persons KEY (person_id)
LABEL person
PROPERTIES (person_id, name, birthdate AS dob)
)
EDGE TABLES (
friendships AS friends
KEY (friendship_id)
SOURCE KEY (person_a) REFERENCES persons(person_id)
DESTINATION KEY (person_b) REFERENCES persons(person_id)
PROPERTIES (friendship_id, meeting_date)
);
次のように、このSQLグラフをメモリーにロードできます。
opg4j> var graph = session.readGraphByName ("STUDENT_NETWORK",GraphSource.PG_SQL)
graph ==> PgxGraph[name=STUDENTS_NETWORK,N=4,E=4,created=1681007796946]
PgxGraph graph = session.readGraphByName("STUDENT_NETWORK", GraphSource.PG_SQL);
>>> graph = session.read_graph_by_name("STUDENT_NETWORK", "pg_sql")
>>> graph
PgxGraph(name: STUDENTS_NETWORK, v: 4, e: 4, directed: True, memory(Mb): 0)
- 別のスキーマからのSQLプロパティ・グラフのロード
readGraphByName
APIを使用してSQLプロパティ・グラフをロードするときにスキーマ名を指定できます。 - グラフ最適化オプションを使用したSQLプロパティ・グラフのロード
グラフ最適化オプションを使用してSQLプロパティ・グラフをロードする場合は、読取りまたは更新のパフォーマンスを最適化できます。 - OnMissingVertexオプションを使用したSQLプロパティ・グラフのロード
エッジのソース頂点または宛先頂点のいずれか、あるいはその両方が欠落している場合は、OnMissingVertexOption
を使用して、頂点が欠落しているエッジを処理するための動作を指定できます。 - CLOBデータ型の列にプロパティがマップされているSQLプロパティ・グラフのロード
CLOBデータ型の列があるデータベース表からグラフ・サーバー(PGX)にSQLプロパティ・グラフをロードできます。
6.1.1 別のスキーマからのSQLプロパティ・グラフのロード
readGraphByName
APIを使用してSQLプロパティ・グラフをロードするときにスキーマ名を指定できます。
readGraphByName
APIのコール時にのみグラフ名を指定する場合、グラフは現在のユーザーが所有しているとみなされます。ただし、別のユーザーが所有するグラフをロードする場合は、スキーマ名も指定する必要があります。また、SQLグラフとその基礎となるすべてのデータ表に対してSELECT
権限があることを確認します。
次の例では、GRAPHUSER
スキーマからSQLプロパティ・グラフをロードします。
opg4j> var graph = session.readGraphByName("GRAPHUSER", "STUDENT_NETWORK", GraphSource.PG_SQL)
graph ==> PgxGraph[name=STUDENT_NETWORK,N=4,E=4,created=1680769031393]
PgxGraph graph = session.readGraphByName("GRAPHUSER", "STUDENT_NETWORK", GraphSource.PG_SQL);
>>> graph = session.read_graph_by_name("STUDENT_NETWORK", "pg_sql", "GRAPHUSER")
>>> graph
PgxGraph(name: STUDENT_NETWORK_2, v: 4, e: 4, directed: True, memory(Mb): 0)
6.1.2 グラフ最適化オプションを使用したSQLプロパティ・グラフのロード
グラフ最適化オプションを使用してSQLプロパティ・グラフをロードする場合は、読取りまたは更新のパフォーマンスを最適化できます。
次の例は、READ
操作用に最適化されたSQLプロパティ・グラフのロードを示しています:
opg4j> var graph = session.readGraphByName("STUDENT_NETWORK", GraphSource.PG_SQL,
...> ReadGraphOption.optimizeFor(GraphOptimizedFor.READ))
graph ==> PgxGraph[name=STUDENT_NETWORK,N=4,E=4,created=1681008951415]
PgxGraph graph = session.readGraphByName("STUDENT_NETWORK", GraphSource.PG_SQL,
ReadGraphOption.optimizeFor(GraphOptimizedFor.READ);
>>> session.read_graph_by_name('STUDENT_NETWORK', 'pg_sql', options=['optimized_for_read'])
PgxGraph(name: STUDENT_NETWORK, v: 4, e: 4, directed: True, memory(Mb): 0)
次の例は、UPDATE
操作用に最適化されたSQLプロパティ・グラフのロードを示しています。また、READ
オプションとUPDATE
オプションは同時に使用できないことに注意してください。
opg4j> var graph = session.readGraphByName("STUDENT_NETWORK", GraphSource.PG_SQL,
...> ReadGraphOption.optimizeFor(GraphOptimizedFor.UPDATES))
graph ==> PgxGraph[name=STUDENT_NETWORK_2,N=4,E=4,created=1681009073501]
PgxGraph graph = session.readGraphByName("STUDENT_NETWORK", GraphSource.PG_SQL,
ReadGraphOption.optimizeFor(GraphOptimizedFor.UPDATES));
>>> session.read_graph_by_name('STUDENT_NETWORK', 'pg_sql', options=['optimized_for_updates'])
PgxGraph(name: STUDENT_NETWORK, v: 4, e: 4, directed: True, memory(Mb): 0)
次の例は、SYNCHRONIZABLE
最適化オプションを使用したSQLプロパティ・グラフのロードを示しています。このオプションは、READ
およびUPDATE
オプションと組み合せて使用できます。
opg4j> var graph = session.readGraphByName("STUDENT_NETWORK", GraphSource.PG_SQL,
...> ReadGraphOption.SYNCHRONIZABLE)
graph ==> PgxGraph[name=STUDENT_NETWORK,N=4,E=4,created=1696341305374]
PgxGraph graph = session.readGraphByName("STUDENT_NETWORK", GraphSource.PG_SQL,
ReadGraphOption.SYNCHRONIZABLE);
>>> session.read_graph_by_name('STUDENT_NETWORK', 'pg_sql', options=['synchronizable'])
PgxGraph(name: STUDENT_NETWORK_2, v: 4, e: 4, directed: True, memory(Mb): 0)
関連項目:
詳細は、「グラフ最適化オプションの使用」を参照してください。6.1.3 OnMissingVertex
オプションを使用したSQLプロパティ・グラフのロード
エッジのソース頂点または宛先頂点のいずれか、あるいはその両方が欠落している場合は、OnMissingVertexOption
を使用して、頂点が欠落しているエッジを処理するための動作を指定できます。
OnMissingVertex.ERROR
(デフォルト): ソースまたは宛先の頂点が欠落しているエッジに対してエラーをスローする必要があることを指定します。OnMissingVertex.IGNORE_EDGE
: 欠落したソースまたは宛先の頂点のエッジを無視する必要があることを指定します。OnMissingVertex.IGNORE_EDGE_LOG
: 欠落したソースまたは宛先の頂点のエッジを無視し、無視されたすべてのエッジをログに記録する必要があることを指定します。OnMissingVertex.IGNORE_EDGE_LOG_ONCE
: 欠落したソースまたは宛先の頂点のエッジを無視し、無視された最初のエッジのみをログに記録する必要があることを指定します。
次の例では、頂点が欠落しているエッジを無視し、無視された最初のエッジのみをログに記録することによって、SQLプロパティ・グラフをロードします。
opg4j> session.readGraphByName("STUDENT_NETWORK", GraphSource.PG_SQL,
...> ReadGraphOption.onMissingVertex(OnMissingVertex.IGNORE_EDGE_LOG_ONCE))
$2 ==> PgxGraph[name=STUDENT_NETWORK_2,N=4,E=4,created=1697264084059]
PgxGraph graph = session.readGraphByName("STUDENT_NETWORK", GraphSource.PG_SQL,
ReadGraphOption.onMissingVertex(OnMissingVertex.IGNORE_EDGE_LOG_ONCE));
>>> session.read_graph_by_name('STUDENT_NETWORK', 'pg_sql',
options=['on_missing_vertex_ignore_edge_log_once'])
PgxGraph(name: STUDENT_NETWORK, v: 4, e: 4, directed: True, memory(Mb): 0)
6.1.4 CLOBデータ型の列にプロパティがマップされているSQLプロパティ・グラフのロード
CLOBデータ型の列があるデータベース表からグラフ・サーバー(PGX)にSQLプロパティ・グラフをロードできます。
CLOBデータ型の列は、グラフ・サーバー(PGX)においてString
プロパティとして処理されます。
たとえば、データベース内の次のサンプル・データについて考えてみましょう:
CREATE TABLE depts (
dept_id NUMBER,
dept_name VARCHAR2 (10),
emp_details CLOB,
CONSTRAINT employees_pk PRIMARY KEY (dept_id)
);
INSERT INTO depts
VALUES (1, 'HR', '
<employees>
<employee empNo="1234" eName="SMITH" hireDate="17-DEC-1990"></employee>
<employee empNo="5678" ename="ALLEN" hireDate="02-JAN-1981"></employee>
</employees>
');
INSERT INTO depts
VALUES (2, 'IT', '
<employees>
<employee empNo="5628" ename="JONES" hireDate="13-MAR-1986"></employee>>
<employee empNo="5628" ename="TOM" hireDate="13-MAR-1986"></employee>>
</employees>
');
CREATE PROPERTY GRAPH
DDL文を使用してSQLプロパティ・グラフを作成します。
CREATE PROPERTY GRAPH dept
VERTEX TABLES (
DEPTS KEY (dept_id)
LABEL dept
PROPERTIES (dept_id, dept_name, emp_details)
)
次のように、グラフをグラフ・サーバー(PGX)にロードします:
opg4j> var g = session.readGraphByName("DEPT", GraphSource.PG_SQL)
g ==> PgxGraph[name=DEPT,N=2,E=0,created=1727242485228]
opg4j> g.queryPgql("SELECT n.* FROM MATCH (n:dept)").print()
+--------------------------------------------------------------------------------------------------
| DEPT_ID | DEPT_NAME | EMP_DETAILS
| 2.0 | IT | <employees>
<employee empNo="5628" ename="JONES" hireDate="13-MAR-1986"></employee>>
<employee empNo="5628" ename="TOM" hireDate="13-MAR-1986"></employee>>
</employees> |
| 1.0 | HR | <employees>
<employee empNo="1234" eName="SMITH" hireDate="17-DEC-1990"></employee>
<employee empNo="5678" ename="ALLEN" hireDate="02-JAN-1981"></employee>
</employees>
|
+--------------------------------------------------------------------------------------------------
PgxGraph g = session.readGraphByName("DEPT", GraphSource.PG_SQL);
PgqlResultSet rs = g.queryPgql("SELECT n.* FROM MATCH (n:dept)");
rs.print();
>>> g = session.read_graph_by_name("DEPT", "pg_sql")
>>> g.query_pgql("SELECT n.* FROM MATCH (n:dept)").print()
+--------------------------------------------------------------------------------------------------
| DEPT_ID | DEPT_NAME | EMP_DETAILS
| 2.0 | IT | <employees>
<employee empNo="5628" ename="JONES" hireDate="13-MAR-1986"></employee>>
<employee empNo="5628" ename="TOM" hireDate="13-MAR-1986"></employee>>
</employees> |
| 1.0 | HR | <employees>
<employee empNo="1234" eName="SMITH" hireDate="17-DEC-1990"></employee>
<employee empNo="5678" ename="ALLEN" hireDate="02-JAN-1981"></employee>
</employees>
|
+--------------------------------------------------------------------------------------------------