16.3.1 Oracle Databaseからグラフ・サーバー(PGX)へのグラフの読込み
グラフ・サーバー(PGX)にログインすると、データベースからグラフ・サーバーにグラフを読み込むことができます。
データベース・ユーザーが存在し、データベースのグラフ・データに対する読取りアクセス権を持っている必要があります。
グラフのロードでは、次のオプションがサポートされています。
readGraphByName
APIの使用 - 詳細は、readGraphByName APIを使用したSQLプロパティ・グラフのロードを参照してください。PgSqlSubgraphReader
APIを使用したサブグラフの作成およびロード - 詳細は、PGQL問合せを使用したサブグラフのロードを参照してください。- PGQL
CREATE PROPERTY GRAPH
文の使用 - 詳細は、PGQLを使用したSQLプロパティ・グラフの作成を参照してください。
readGraphByName
APIの使用 - 詳細は、readGraphByName APIを使用したPGQLプロパティ・グラフのロードを参照してください。- PGQL
CREATE PROPERTY GRAPH
文の使用 - 詳細は、「PGQLを使用したプロパティ・グラフの作成」を参照してください。 PgViewSubgraphReader#fromPgPgql
APIを使用したサブグラフの作成およびロード - 詳細は、「PGQLプロパティ・グラフからのサブグラフのロード」を参照してください。- JSON形式のPGXグラフ構成ファイルの使用 - 詳細は、「JSON構成ファイルを使用したグラフのロード」を参照してください。
GraphConfigBuilder
クラスを使用したJavaメソッドによるプログラムでのOracle RDBMSグラフ構成の作成 - 詳細は、グラフ構成オブジェクトの定義によるグラフのロードを参照してください。
また、次の項を参照してください:
- グラフの遅延ロードの有効化
Graph Server and Clientリリース24.3以降では、データベース・グラフの遅延ロードを有効にできます。 - 同じSCNでのエンティティ・プロバイダの読取り
複数の頂点表またはエッジ表、あるいはその両方で構成されるグラフがある場合は、同じシステム変更番号(SCN)の頂点とエッジをすべて読み取ることができます。 - グラフ・ロードの進捗レポートおよび見積り
大規模なグラフをグラフ・サーバー(PGX)にロードすると、長時間実行される操作になることがあります。ただし、非同期アクションを使用してグラフをロードすると、グラフ・ロード操作の進行状況をモニターできます。 - グラフ構成のオプション
グラフ構成のオプションについて学習します。 - データ・ロードのセキュリティのベスト・プラクティス
データベースからグラフをロードするには認証が必要であるため、この種類のデータ・ソースへのアクセスを構成する際は、特定のセキュリティ・ガイドラインに従うことが重要です。 - データ形式のサポート・マトリクス
グラフ・サーバー(PGX)でサポートされている様々なデータ形式について学習します。 - ロード済グラフの不変性
グラフがグラフ・サーバー(PGX)にロードされると、グラフとそのプロパティは自動的に不変としてマークされます。
親トピック: グラフ・サーバー(PGX)でのグラフ管理
16.3.1.1 グラフの遅延ロードの有効化
Graph Server and Clientリリース24.3以降では、データベース・グラフの遅延ロードを有効にできます。
遅延ロードを有効にすると、PGQL問合せでグラフに初めてアクセスしたときに、グラフが自動的にグラフ・サーバー(PGX)にロードされます。これは、グラフが事前にグラフ・サーバー(PGX)にロードされていなくても、PgxSession
インスタンスからPGQL問合せを実行できることを意味します。ただし、次に示すように、ON
句を使用してグラフ名を指定してください:
opg4j> session.queryPgql("SELECT x.* FROM MATCH (x) ON <graph_name>")
session.queryPgql("SELECT x.* FROM MATCH (x) ON <graph_name>");
session.query_pgql("SELECT x.* FROM MATCH (x) ON <graph_name>")
また、グラフをグラフ・サーバー(PGX)メモリーに遅延ロードする場合は、次の詳細にも注意してください:
- 遅延ロード機能を使用するには、
pgx.conf
ファイルのallow_lazy_loading_for_database_graphs
構成フィールドを追加して(まだ追加されていない場合)、有効にする必要があります。{ "allow_lazy_loading_for_database_graphs": true }
- グラフがデータベースに存在する場合、グラフは名前でロードされます。名前によるグラフのロードは、
pgx.conf
ファイルのpgx_realm
オプションに指定されているデータベース資格証明に依存します。 - ロードは、グラフがグラフ・サーバー(PGX)のメモリーにまだロードされていない場合にのみ行われます。
- 遅延ロードは、PGQLとSQLの両方のプロパティ・グラフでサポートされています。グラフ・サーバー(PGX)は、最初にSQLプロパティ・グラフとしてグラフをロードしようとします。これが存在しない場合、グラフはPGQLプロパティ・グラフとしてロードされます。
- グラフおよび基礎となるデータ・ソース表に対する
READ
権限が必要です。 - 遅延ロードされたグラフはセッションの依存性として追加され、定期的な権限チェックがグラフに対して実行されます。
- 次のAPIは、最初の使用時にグラフの遅延ロードをサポートしています:
PgxSession.queryPgql
PgxSession.executePgql
PgxSession.preparePgql
PgxSession.explainPgql
次の例では、グラフの遅延ロードをトリガーする様々な問合せを示します。この例では、allow_lazy_loading_for_database_graphs
が有効で、MY_GRAPH
がデータベースに存在し、グラフ・サーバー(PGX)メモリーにまだロードされていないことを前提としています。
opg4j> session.queryPgql("SELECT x.name FROM MATCH (x) ON MY_GRAPH")
opg4j> session.preparePgql("SELECT x.name FROM MATCH (x) ON MY_GRAPH WHERE x.age = ?")
opg4j> session.executePgql("SELECT x.name FROM MATCH (x) ON MY_GRAPH")
opg4j> session.explainPgql("SELECT x.name, x.* FROM MATCH (x) ON MY_GRAPH")
session.queryPgql("SELECT x.name FROM MATCH (x) ON MY_GRAPH");
session.preparePgql("SELECT x.name FROM MATCH (x) ON MY_GRAPH WHERE x.age = ?");
session.executePgql("SELECT x.name FROM MATCH (x) ON MY_GRAPH");
session.explainPgql("SELECT x.name, x.* FROM MATCH (x) ON MY_GRAPH");
session.query_pgql("SELECT x.name FROM MATCH (x) ON MY_GRAPH")
session.prepare_pgql("SELECT x.name FROM MATCH (x) ON MY_GRAPH WHERE x.age = ?")
session.execute_pgql("SELECT x.name FROM MATCH (x) ON MY_GRAPH")
session.explain_pgql("SELECT x.name, x.* FROM MATCH (x) ON MY_GRAPH")
16.3.1.2 同じSCNでのエンティティ・プロバイダの読取り
複数の頂点表またはエッジ表、あるいはその両方で構成されるグラフがある場合は、同じシステム変更番号(SCN)の頂点とエッジをすべて読み取ることができます。
これは、一部のエッジが欠落した頂点を参照している可能性があるため、頂点が読み取られたSCNよりも後のSCNでエッジ・プロバイダが読み取られるなどの問題を克服するのに役立ちます。
Oracle Databaseでフラッシュバックが有効になっていない場合でも、データベースからグラフを読み取ることができることに注意してください。複数のデータベースの場合、SCNを使用して、同じデータベースに属するエンティティ・プロバイダのみの一貫性を維持できます。
グラフ構成でas_of
フラグを使用して、エンティティ・プロバイダを読み取るSCNを指定できます。as_of
フラグの有効な値は次のとおりです。
表16-1 グラフ構成での"as_of"キーの有効値
値 | 説明 |
---|---|
正のlong 値
|
これは解析可能なSCN値です。 |
"<current-scn>" |
現在のSCNは、グラフ・ロードの開始時に決定されます。 |
"<no-scn>" |
これは、グラフのロード時にSCNを無効化するためのものです。 |
null |
これにより、"<current-scn>" の動作がデフォルトになります。
|
グラフ構成ファイルの頂点プロバイダまたはエッジ・プロバイダに対して"as_of"
を省略すると、"as_of": null
と同じ動作になります。
例16-1 同じデータベース内の頂点プロバイダおよびエッジ・プロバイダに"as_of"
を使用したグラフ構成
次の設定例では、3つの頂点プロバイダと1つのエッジ・プロバイダが同じデータベースを指しています。
{
"name": "employee_graph",
"vertex_providers": [
{
"name": "Department",
"as_of": "<current-scn>",
"format": "rdbms",
"database_table_name": "DEPARTMENTS",
"key_column": "DEPARTMENT_ID",
"props": [
{
"name": "DEPARTMENT_NAME",
"type": "string"
}
]
},
{
"name": "Location",
"as_of": "28924323",
"format": "rdbms",
"database_table_name": "LOCATIONS",
"key_column": "LOCATION_ID",
"props": [
{
"name": "CITY",
"type": "string"
}
]
},
{
"name": "Region",
"as_of": "<no-scn>",
"format": "rdbms",
"database_table_name": "REGIONS",
"key_column": "REGION_ID",
"props": [
{
"name": "REGION_NAME",
"type": "string"
}
]
}
],
"edge_providers": [
{
"name": "LocatedAt",
"format": "rdbms",
"database_table_name": "DEPARTMENTS",
"key_column": "DEPARTMENT_ID",
"source_column": "DEPARTMENT_ID",
"destination_column": "LOCATION_ID",
"source_vertex_provider": "Department",
"destination_vertex_provider": "Location"
}
]
}
前述の構成ファイルを使用してemployee_graph
を読み取る場合、グラフはDepartment
およびLocatedAt
エンティティ・プロバイダの同じSCNで読み取られます。これを次の表に示します。
表16-2 "as_of"を使用したシナリオの例
エンティティ・プロバイダ | "as_of" |
SCN値 |
---|---|---|
Department |
"<current-scn>" |
SCNが自動的に決定される |
Location |
"28924323" |
"28924323" をSCNとして使用
|
Region |
"<no-scn>" |
SCNの使用なし |
LocatedAt |
"as_of" フラグが省略
|
SCNが自動的に決定される |
データベースの現在のSCN値は、次のいずれかのオプションを使用して決定されます。
V$DATABASE
ビューの問合せ:SELECT CURRENT_SCN FROM V$DATABASE;
DBMS_FLASHBACK
パッケージの使用:SELECT DBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBER FROM DUAL;
前述の操作のいずれかを実行するために必要な権限がない場合は、次を使用できます。
SELECT TIMESTAMP_TO_SCN(SYSDATE) FROM DUAL;
ただし、このオプションは前述の2つのオプションよりも正確ではありません。
次のようにJSON構成ファイルを使用して、グラフをグラフ・サーバーに読み取ることができます。
opg4j> var g = session.readGraphWithProperties("employee_graph.json")
PgxGraph g = session.readGraphWithProperties("employee_graph.json");
g = session.read_graph_with_properties("employee_graph.json")
16.3.1.3 グラフ・ロードの進捗レポートおよび見積り
大規模なグラフをグラフ・サーバー(PGX)にロードすると、長時間実行される操作になることがあります。ただし、非同期アクションを使用してグラフをロードすると、グラフ・ロード操作の進行状況をモニターできます。
次の表に、次の形式でサポートされる非同期グラフ・ロードAPIを示します。
表16-3 非同期グラフ・ロードAPI
データ形式 | API |
---|---|
PGQLプロパティ・グラフ | session.readGraphByNameAsync() |
CSV | session.readGraphFileAsync() |
これらのサポートされているAPIは、PgxFuture
オブジェクトを戻します。
その後、PgxFuture.getProgress()
メソッドを使用して次の統計を収集できます。
- グラフ・ロード操作の進行状況に関するレポート
- メモリーにロードする必要がある残りの頂点およびエッジの見積り
たとえば、次のコードは、PGQLプロパティ・グラフを非同期にロードし、その後FutureProgress
オブジェクトを取得してロードの進行状況をレポートおよび見積るステップを示しています。ただし、グラフ・ロードの見積り(ロードされたエンティティおよびプロバイダの数、エンティティおよびプロバイダの合計数など)は、グラフのロード操作が進行中になるまでしか取得できません。また、グラフ・サーバー(PGX)にロードされるエンティティの10000エントリごとにグラフ・ロードの進行状況がシステムによって内部的に計算します。
opg4j> var graphLoadingFuture = session.readGraphByNameAsync("BANK_GRAPH", GraphSource.PG_PGQL)
readGraphFuture ==> oracle.pgx.api.PgxFuture@6106dfb6[Not completed]
opg4j> while (!graphLoadingFuture.isDone()) {
...> var progress = graphLoadingFuture.getProgress();
...> var graphLoadingProgress = progress.asGraphLoadingProgress();
...> if (graphLoadingProgress.isPresent()) {
...> var numLoadedVertices = graphLoadingProgress.get().getNumLoadedVertices();
...> }
...> Thread.sleep(1000);
...> }
opg4j> var graph = graphLoadingFuture.get();
graph ==> PgxGraph[name=BANK_GRAPH_3,N=999,E=4993,created=1664289985985]
PgxFuture<PgxGraph> graphLoadingFuture = session.readGraphByNameAsync("BANK_GRAPH", GraphSource.PG_PGQL);
while (!graphLoadingFuture.isDone()) {
FutureProgress progress = graphLoadingFuture.getProgress();
Optional < GraphLoadingProgress > graphLoadingProgress = progress.asGraphLoadingProgress();
if (graphLoadingProgress.isPresent()) {
long numLoadedVertices = graphLoadingProgress.get().getNumLoadedVertices();
}
Thread.sleep(1000);
}
PgxGraph graph = graphLoadingFuture.get();
FutureProgress
オブジェクトは、一連の非同期操作で使用しないことをお薦めします。
16.3.1.4 グラフ構成のオプション
グラフ構成のオプションについて学習します。
次の表に、すべてのグラフ構成に共通するJSONフィールドを示します。
表16-4 グラフ構成JSONフィールド
フィールド | 型 | 説明 | デフォルト |
---|---|---|---|
name | string | グラフの名前。 | 必須 |
array_compaction_threshold | number | [グラフが更新用に最適化されている場合にのみ関連]デルタログを新規配列に圧縮するタイミングを決定するために使用されるしきい値。エンジンmin_array_compaction_threshold値 より小さい場合は、かわりにmin_array_compaction_threshold が使用されます
|
0.2 |
attributes | object | グラフ・データの読取りおよび書込みに必要な追加属性。 | null |
data_source_id | string |
RDBMSインスタンスへの接続に使用するデータ・ソースID。 | null |
edge_id_strategy | enum[no_ids, keys_as_ids, unstable_generated_ids] | このグラフのエッジに使用するID戦略を示します。指定しない(またはnull に設定されている)場合、戦略は、ロード中に、またはデフォルト値を使用して決定されます。
|
null |
edge_id_type | enum[long] | エッジIDのタイプ。これをlong に設定するには、エッジ・プロバイダのIDがグラフ間で一意である必要があります。これらのIDはグローバルIDとして使用されます。これをnull に設定(または省略)すると、異なるエッジ・プロバイダ間でIDの繰返しが許可され、PGXにより、エッジに対してグローバルに一意のIDが自動的に生成されます。
|
null |
edge_providers | オブジェクトの配列 | このグラフのエッジ・プロバイダのリスト。 | [] |
error_handling | object | エラー処理構成。 | null |
external_stores | オブジェクトの配列 | 外部文字列プロパティが存在する外部ストアの指定。 | [] |
jdbc_url | string | RDBMSインスタンスを指すJDBC URL | null |
keystore_alias | string | データベースへの接続時に使用するキーストアの別名。 | null |
loading | object | 使用するロード固有の構成。 | null |
local_date_format | 文字列の配列 | local_date プロパティのロードおよび格納時に使用するlocal_date 形式の配列。形式の文字列の詳細は、DateTimeFormatterを参照してください
|
[] |
max_prefetched_rows | integer | resultsetデータベースの各ラウンドトリップ中にプリフェッチされた行の最大数。 | 10000 |
num_connections | integer | RDBMS表との間でデータの読取りおよび書込みを行う接続の数。 | <no-of-cpus> |
optimized_for | enum[read, updates] | グラフで、読取り集中型のシナリオや高速更新のために最適化されたデータ構造を使用するかどうかを示します。 | read |
password | string | データベースに接続する際に使用するパスワード。 | null |
point2d | string | 空白で区切られた浮動小数点値としての経度と緯度。 | 0.0 0.0 |
prepared_queries |
オブジェクトの配列 |
引数が指定された準備済問合せの追加リスト。'queries'と同じように機能します。1つ以上の問合せに一致するデータもロードされます。 | [] |
queries |
文字列の配列 |
データベースからロードするデータの決定に使用される問合せのリスト。1つ以上の問合せに一致するデータがロードされます。問合せを設定しないと、グラフ全体がロードされます。 | [] |
redaction_rules | オブジェクトの配列 | リダクション・ルールの配列。 | [] |
rules_mapping | オブジェクトの配列 | ユーザーおよびロールへのリダクション・ルールのマッピング。 | [] |
schema | string | RDBMSオブジェクトの読取りまたは書込みに使用するスキーマ | null |
source_name |
string |
データベース・グラフの名前(グラフがデータベースからロードされる場合)。 | null |
source_type |
enum[pg_pgql, pg_sql] |
データベース・グラフのソース・タイプ。 | null |
time_format | 文字列の配列 | 時間プロパティのロードおよび格納時に使用するtime 形式。形式の文字列に関するドキュメントは、DateTimeFormatterを参照してください。
|
[] |
time_with_timezone_format | 文字列の配列 | 時間(タイムゾーン付き)プロパティをロードおよび格納する際に使用する時間(タイムゾーン付き) の形式。形式の文字列の詳細は、DateTimeFormatterを参照してください。
|
[] |
timestamp_format | 文字列の配列 | タイムスタンプ・プロパティのロードおよび格納時に使用するタイムスタンプ 形式。形式の文字列の詳細は、DateTimeFormatterを参照してください。
|
[] |
timestamp_with_timezone_format | 文字列の配列 | タイムスタンプ(タイムゾーン付き) プロパティをロードおよび格納する際に使用するタイムスタンプ(タイムゾーン付き) の形式。形式の文字列の詳細は、DateTimeFormatterを参照してください。
|
[] |
username | string | RDBMSインスタンスに接続する際に使用するユーザー名。 | null |
vector_component_delimiter | character | ベクトル・プロパティの様々なコンポーネント用の区切り文字。 | ; |
vertex_id_strategy | enum[no_ids, keys_as_ids, unstable_generated_ids] | このグラフの頂点に使用するID戦略を示します。指定しない(またはnull に設定されている)場合、戦略は自動的に検出されます。
|
null |
vertex_id_type | enum[int, integer, long, string] | vertex IDのタイプ。同種のグラフで指定されていない(またはnull に設定されている)場合、デフォルトで特定の値(データの元によって異なる)に設定されます。
|
null |
vertex_providers | オブジェクトの配列 | このグラフの頂点プロバイダのリスト。 | [] |
ノート:
グラフ構成で指定されたデータベース接続フィールドは、基礎となるデータ・プロバイダ構成でこれらのフィールドを指定しない場合のデフォルトとして使用されます。プロバイダ構成JSONファイルのオプション
プロバイダ構成を使用して、各プロバイダのデータに関するメタ情報を指定できます。プロバイダ構成には、プロバイダ・データに関する次の情報が含まれます。
- データの場所: ファイル、複数ファイルまたはデータベース・プロバイダ
- プロパティに関する情報: プロパティの名前とタイプ
表16-5 プロバイダ構成JSONファイルのオプション
フィールド | 型 | 説明 | デフォルト |
---|---|---|---|
format | enum[pgb, csv, rdbms] | プロバイダ形式。 | 必須 |
name | string | エンティティ・プロバイダ名。 | 必須 |
attributes | object | グラフ・データの読取りおよび書込みに必要な追加属性。 | null |
destination_vertex_provider | string | このエッジ・プロバイダに使用される入力頂点プロバイダの名前。 | null |
error_handling | object | エラー処理構成。 | null |
has_keys | boolean | 指定されたエンティティ・データにキーがあるかどうかを示します。 | true |
key_type | enum[int, integer, long, string] | キーのタイプ。 | long |
keystore_alias | string | データベースへの接続時に使用するキーストアの別名。 | null |
label | string | このプロバイダからロードされたエンティティのラベル。 | null |
loading | object | ロード固有の構成。 | null |
local_date_format | 文字列の配列 | local_dateプロパティのロードおよび格納時に使用するlocal_date形式の配列。形式の文字列に関するドキュメントは、DateTimeFormatterを参照してください。 | [] |
password | string | データベースに接続する際に使用するパスワード。 | null |
point2d | string | 空白で区切られた浮動小数点値としての経度と緯度。 | 0.0 0.0 |
props | オブジェクトの配列 | このエンティティ・プロバイダに関連付けられたプロパティの指定。 | [] |
source_vertex_provider | string | このエッジ・プロバイダに使用される出力頂点プロバイダの名前。 | null |
time_format | 文字列の配列 | 時間プロパティのロードおよび格納時に使用する時間形式。形式の文字列に関するドキュメントは、DateTimeFormatterを参照してください。 | [] |
time_with_timezone_format | 文字列の配列 | 時間(タイムゾーン付き)プロパティをロードおよび格納する際に使用する時間(タイムゾーン付き)の形式。形式の文字列に関するドキュメントは、DateTimeFormatterを参照してください。 | [] |
timestamp_format | 文字列の配列 | タイムスタンプ・プロパティのロードおよび格納時に使用するタイムスタンプ形式。形式の文字列に関するドキュメントは、DateTimeFormatterを参照してください。 | [] |
timestamp_with_timezone_format | 文字列の配列 | タイムスタンプ(タイムゾーン付き)プロパティをロードおよび格納する際に使用するタイムスタンプ(タイムゾーン付き)の形式。形式の文字列に関するドキュメントは、DateTimeFormatterを参照してください。 | [] |
vector_component_delimiter | character | ベクトル・プロパティの様々なコンポーネント用の区切り文字。 | ; |
プロバイダ・ラベル
プロバイダ構成のlabel
フィールドを使用すると、プロバイダからロードされたエンティティのラベルを設定できます。label
が指定されていない場合、プロバイダからのすべてのエンティティに、プロバイダの名前のラベルが付けられます。2つの異なるプロバイダに同じラベルを設定できるのは、プロパティが厳密に同じ(名前とタイプが同じ)場合だけです。
プロパティ構成
プロバイダ
構成のprops
エントリは、次のJSONフィールドを含むオブジェクトです。
表16-6 プロパティ構成
フィールド | 型 | 説明 | デフォルト |
---|---|---|---|
name | string | プロパティの名前を指定します。 | 必須 |
type | enum[boolean, integer, vertex, edge, float, long, double, string, date, local_date, time, timestamp, time_with_timezone, timestamp_with_timezone, point2d] | プロパティのタイプ。
ノート: dateは非推奨です。かわりに、local_date/time/timestamp/time_with_timezone/timestamp_with_timezoneのいずれかを使用します。 |
必須 |
aggregate | enum[identity, group_key, min, max, avg, sum, concat, count] | [現在サポートされていません]どの集計関数を使用しても、常に頂点キーによって集計が行われます。 | null |
column | value | プロパティ・データを保持する列の名前または索引(0から開始)。指定しない場合、ローダーはプロパティ名を列名として使用しようとします(CSV形式のみ)。 | null |
default | value | データ・ソースで指定されていない場合、このプロパティに割り当てられるデフォルト値。date型の場合: 文字列はyyyy-MM-dd HH:mm:ss でフォーマットされます。デフォルトが存在しない場合(null )、存在しないプロパティにはデフォルトのJava型(プリミティブ)または空の文字列(string)または01.01.1970 00:00 (date)が含まれます。
|
null |
dimension | integer | プロパティのディメンション。 | 0 |
drop_after_loading | boolean | [現在サポートされていません]集計にのみ使用されるヘルパー・プロパティを示します。これはロード後に削除されます | false |
field | value | プロパティ・データを保持するJSONフィールドの名前。ネストはドット区切りで示されます。ドットを含むフィールド名を使用できますが、この場合、バックスラッシュを使用してドットをエスケープし、あいまいさを解決する必要があります。厳密に指定されているオブジェクトのみがロードされ、存在しない場合はデフォルト値が使用されます。 | null |
format | 文字列の配列 | プロパティの形式の配列。 | [] |
group_key | string | [現在サポートされていません]プロパティ/キーがグループ化式の一部である場合にのみ使用できます。 | null |
max_distinct_strings_per_pool | integer | [string_pooling_strategyがindexedの場合のみ関連]プーリングを停止するまでのプロパティごとの個別の文字列数。制限に達すると、例外がスローされます。nullに設定すると、グローバルPGX構成からのデフォルト値が使用されます。 | null |
stores | オブジェクトの配列 | このプロパティが存在する場所を示すストレージ識別子のリスト。 | [] |
string_pooling_strategy | enum[indexed, on_heap, none] | 使用する文字列プール戦略を示します。null に設定すると、グローバルPGX構成からのデフォルト値が使用されます。
|
null |
ロード構成
loading
エントリは、次のフィールドを含むJSONオブジェクトです。
表16-7 ロード構成
フィールド | 型 | 説明 | デフォルト |
---|---|---|---|
create_key_mapping | boolean | true の場合、ロード中に、エンティティ・キーと内部IDの間のマッピングが準備されます。
|
true |
filter | string | [現在サポートされていません]フィルタ式 | null |
grouping_by | 文字列の配列 | [現在サポートされていません]アグリゲータに使用されるエッジ・プロパティの配列。頂点の場合、IDのみを使用できます(デフォルト) | [] |
load_labels | boolean | 使用可能な場合にエンティティ・ラベルをロードするかどうか。 | false |
strict_mode | boolean | true に設定すると、ローダーで入力ファイルに関する問題(無効な形式、繰返しキー、欠落フィールド、不一致、その他潜在的なエラーなど)が発生した場合は常に例外がスローされ、ERROR レベルでログに記録されます。false に設定すると、ローダーでロード・フェーズ中のメモリー使用量が削減されますが、入力ファイルが不規則である場合は予期しない動作が発生する可能性があります。
|
true |
エラー処理構成
error_handling
エントリは、次のフィールドを含むJSONオブジェクトです。
表16-8 エラー処理構成
フィールド | 型 | 説明 | デフォルト |
---|---|---|---|
on_missed_prop_key | enum[silent, log_warn, log_warn_once, error] | 欠落しているプロパティ・キーに対するエラー処理。 | log_warn_once |
on_missing_vertex | enum[ignore_edge, ignore_edge_log, ignore_edge_log_once, create_vertex, create_vertex_log, create_vertex_log_once, error] | 頂点データ・ソース内のエッジの欠落した出力頂点または入力頂点に対するエラー処理。 | error |
on_parsing_issue | enum[silent, log_warn, log_warn_once, error] | 不正なデータ解析に対するエラー処理。silent、log_warn またはlog_warn_once に設定すると、ロードの続行が試行されます。解析に関する問題にはリカバリできないものもあり、ロードが終了される場合もあります。
|
error |
on_prop_conversion | enum[silent, log_warn, log_warn_once, error] | プロパティ・タイプが指定されたものとは異なる場合のエラー処理。ただし、強制できます。 | log_warn_once |
on_type_mismatch | enum[silent, log_warn, log_warn_once, error] | プロパティ・タイプが指定されたものとは異なる場合のエラー処理。ただし、強制できません。 | error |
on_vector_length_mismatch | enum[silent, log_warn, log_warn_once, error] | 適切なディメンションのないベクトル・プロパティに対するエラー処理。 | error |
ノート:
on_missing_vertex
エラー処理構成でサポートされる設定は、ignore_edge
のみです。
16.3.1.5 データ・ロードのセキュリティのベスト・プラクティス
データベースからグラフをロードするには認証が必要であるため、この種類のデータ・ソースへのアクセスを構成する際は、特定のセキュリティ・ガイドラインに従うことが重要です。
次のガイドラインをお薦めします:
- データへのアクセスに使用するユーザーまたはロールは、必要なグラフ・データにのみアクセスできる読取り専用アカウントにします。
- たとえば、データベースの場合は、更新できないビューを使用して、グラフ・データを読取り専用としてマークします。
16.3.1.6 データ形式のサポート・マトリクス
グラフ・サーバー(PGX)でサポートされている様々なデータ形式について学習します。
ノート:
この表は形式のPGX実装に関する制限を示し、必ずしも形式自体の制限を示すものではありません。表16-9 データ形式のサポート・マトリクス
形式 | 頂点ID | エッジID | 頂点ラベル | エッジ・ラベル | ベクトル・プロパティ |
---|---|---|---|---|---|
PGB |
int, long, string |
long |
複数 | 単一 | サポートされる(ベクトルのタイプはinteger 、long 、float またはdouble )
|
CSV |
int, long, string |
long |
複数 | 単一 | サポートされる(ベクトルのタイプはinteger 、long 、float またはdouble )
|
ADJ_LIST |
int, long, string |
サポート対象外 | サポート対象外 | サポート対象外 | サポートされる(ベクトルのタイプはinteger 、long 、float またはdouble )
|
EDGE_LIST |
int, long, string |
サポート対象外 | 複数 | 単一 | サポートされる(ベクトルのタイプはinteger 、long 、float またはdouble )
|
GRAPHML |
int, long, string |
サポート対象外 | サポート対象外 | サポート対象外 | サポート対象外 |
16.3.1.7 ロード済グラフの不変性
グラフがグラフ・サーバー(PGX)にロードされると、グラフとそのプロパティは自動的に不変としてマークされます。
ロード済グラフの不変性は、次の設計選択によるものです。
- 通常のグラフ分析はグラフ・インスタンスのスナップショットで行われるため、グラフ・インスタンスの変更は必要ありません。
- 不変性により、PGXは、高速分析用に最適化された内部グラフ表現を使用できます。
- リモート・モードでは、グラフ・インスタンスが複数のクライアント間で共有される可能性があります。
ただし、グラフ・サーバー(PGX)には、分析の目的でグラフ・インスタンスをカスタマイズおよび変更するためのメソッドも用意されています。詳細は、グラフ変更とサブグラフを参照してください。