10.1 readGraphByName APIを使用したPGQLプロパティ・グラフのロード

PGQLプロパティ・グラフを名前でグラフ・サーバー(PGX)にロードできます。

PgxSession#readGraphByName APIを使用して、PGQLプロパティ・グラフをロードできます。

readGraphByName(String schemaName, String graphName, GraphSource source, ReadGraphOption options)

次の表に、メソッドで使用される引数を示します:

表10-1 readGraphByNameメソッドのパラメータ

パラメータ 説明 オプション
schemaName スキーマの所有者 はい
graphName PGQLプロパティ・グラフの名前 不可
source グラフのソース形式: 不可
options グラフ最適化オプションを表します はい

readGraphByName()メソッドは、PGQLプロパティ・グラフのメタデータ表を読み取り、グラフをロードするためのグラフ構成を内部的に生成します。このAPIを使用するには、PGX_SESSION_NEW_GRAPH権限が必要です。

たとえば、次のようにPGQLプロパティ・グラフをロードできます。

opg4j> var graph = session.readGraphByName("BANKDATA", GraphSource.PG_VIEW)
$12 ==> PgxGraph[name=bankdata,N=1000,E=5001,created=1625730942294]
PgxGraph graph = session.readGraphByName("BANKDATA", GraphSource.PG_VIEW);
Graph: PgxGraph[name=bankdata,N=1000,E=5001,created=1625732149262]
>>> graph = session.read_graph_by_name('BANKDATA', 'pg_view')
>>> graph
PgxGraph(name: bankdata, v: 1000, e: 5001, directed: True, memory(Mb): 0)

関連項目:

グラフ・サーバー(PGX)でサポートされるタイプの詳細は、Oracle DatabaseタイプのPGXタイプへのマッピングを参照してください

10.1.1 readGraphByName APIのオプションの指定

readGraphByName APIを使用してPGQLプロパティ・グラフをロードする場合は、グラフ最適化オプションまたはOnMissingVertexOption、あるいはその両方を指定できます。

PGQLプロパティ・グラフを名前でロードする際、ReadGraphOptionインタフェースでは追加のoptionsパラメータがサポートされます。

次の各項では、ReadGraphOptionインタフェースでサポートされている様々なオプションについて説明します。

グラフ最適化オプションの使用

PGQLプロパティ・グラフを名前でロードする際の読取りまたは更新のパフォーマンスを最適化するには、次のいずれかのオプションを使用します。

  • ReadGraphOption.optimizeFor(GraphOptimizedFor.READ): ロードされるグラフをREAD用に最適化することを指定します。
  • ReadGraphOption.optimizeFor(GraphOptimizedFor.UPDATES): ロードされるグラフをUPDATE用に最適化することを指定します。
  • ReadGraphOption.synchronizable(): ロードされるグラフが同期できることを指定します。

次の点に注意してください。

  • synchronizable()オプションは、UPDATEおよびREADと組み合せて使用できます。ただし、UPDATEオプションとREADオプションは同時に使用できません。
  • SYNCHRONIZABLEオプションのPGQLプロパティ・グラフをロードする場合は、頂点キーとエッジ・キーが数値であり、コンポジットではないことを確認します。

次の例では、READオプションとSYNCHRONIZABLEオプションのPGQLプロパティ・グラフをロードします。

opg4j> var graph = session.readGraphByName("BANK_GRAPH", GraphSource.PG_VIEW,
...>                            ReadGraphOption.optimizeFor(GraphOptimizedFor.READ),
...>                            ReadGraphOption.synchronizable())
graph ==> PgxGraph[name=BANK_GRAPH_2,N=1000,E=5001,created=1648457198462]
PgxGraph graph = session.readGraphByName("BANK_GRAPH", GraphSource.PG_VIEW,
                                                  ReadGraphOption.optimizeFor(GraphOptimizedFor.READ),
                                                  ReadGraphOption.synchronizable());

OnMissingVertexオプションの使用

エッジのソース頂点または宛先頂点のいずれか、あるいはその両方が欠落している場合は、頂点が欠落しているエッジを処理するための動作を指定するOnMissingVertexOptionを使用できます。このオプションでは、次の値がサポートされています。

  • ReadGraphOption.onMissingVertex(OnMissingVertex.ERROR): これはデフォルト・オプションで、頂点が欠落しているエッジに対してエラーをスローする必要があることを指定します。
  • ReadGraphOption.onMissingVertex(OnMissingVertex.IGNORE_EDGE): 欠落した頂点のエッジを無視する必要があることを指定します。
  • ReadGraphOption.onMissingVertex(OnMissingVertex.IGNORE_EDGE_LOG): 欠落した頂点のエッジを無視し、無視されたすべてのエッジをログに記録する必要があることを指定します。
  • ReadGraphOption.onMissingVertex(OnMissingVertex.IGNORE_EDGE_LOG_ONCE): 欠落した頂点のエッジを無視し、最初の無視されたエッジのみをログに記録する必要があることを指定します。

次の例では、頂点が欠落しているエッジを無視し、最初の無視されたエッジのみをログに記録することによって、PGQLプロパティ・グラフをロードします。ログを表示するには、/etc/oracle/graph/logback.xmlのデフォルトのLogback構成ファイルと、/etc/oracle/graph/logback-server.xmlのグラフ・サーバー(PGX)ロガー構成ファイルを更新して、DEBUGログを記録する必要があります。そのようにすると、無視されたエッジを/var/opt/log/pgx-server.logファイルで確認できます。

opg4j> session.readGraphByName("REGIONS", GraphSource.PG_VIEW,
...>                             ReadGraphOption.onMissingVertex(OnMissingVertex.IGNORE_EDGE_LOG_ONCE))
$7 ==> PgxGraph[name=REGIONVIEW_3,N=27,E=18,created=1655903219910]
PgxGraph graph = session.readGraphByName("REGIONS", GraphSource.PG_VIEW, ReadGraphOption.onMissingVertex(OnMissingVertex.IGNORE_EDGE_LOG_ONCE));

10.1.2 readGraphByName APIへのスキーマ名の指定

readGraphByName APIを使用してPGQLプロパティ・グラフをロードするときにスキーマ名を指定できます。

この機能を使用すると、別のユーザー・スキーマからグラフ・サーバー(PGX)にPGQLプロパティ・グラフをロードできます。ただし、別のスキーマからPGQLプロパティ・グラフをロードする場合は、基礎となるすべてのメタデータおよびデータ表に対するREAD権限を持っていることを確認してください。

次の例では、GRAPHUSERスキーマからPGQLプロパティ・グラフをロードします。

opg4j> var graph = session.readGraphByName("GRAPHUSER", "FRIENDS", GraphSource.PG_VIEW)
graph ==> PgxGraph[name=FRIENDS,N=6,E=4,created=1672743474212]
PgxGraph graph = session.readGraphByName("GRAPHUSER", "FRIENDS", GraphSource.PG_VIEW);