5.4.7 新しいデータの既存のプロパティ・グラフへのマージ
グラフ・データのOracle Databaseの空のプロパティ・グラフへのロードに加えて、新しいグラフ・データを既存の(空のまたは空でない)グラフにマージできます。データのロードと同様に、データのマージも、入力頂点およびエッジを複数のチャンクに分割し、それらをデータベースの既存のグラフにパラレルにマージします。
マージを実行中のフローは、新しいグラフ・データと既存のグラフ・データの間に重複があるかどうかによって異なります。ここでの重複とは、グラフ要素の同じキーが、新しいグラフ・データと既存のグラフ・データとで異なる値を持つ可能性があるという意味です。たとえば、ID 1の頂点のキーweight
は、新しいグラフ・データでは値0.8を、既存のグラフ・データでは値0.5を持つ可能性があります。この場合、新しい値または既存の値をキーに使用する必要があるかを指定する必要があります。
次のオプションがグラフ・データのマージに使用できます。JDBベース、外部表ベース、SQL loaderベースのマージ。
-
JDBCベースのグラフ・データのマージ
-
外部表ベースのデータのマージ
-
SQL*Loaderベースのデータのマージ
JDBCベースのグラフ・データのマージ
JDBCベースのデータのマージでは、Java Database Connectivity (JDBC) APIを使用して、新しいグラフ・データをOracle Databaseにロードしてから、新しいグラフ・データを既存のグラフにマージします。
次の例は、DOP(並列度)が48、バッチ・サイズが1000で、データのマージ・オプションを指定した、JDBCベースのデータ・マージを使用し、Oracle定義のフラット・ファイル形式の頂点およびエッジ・ファイルszOPVFileおよびszOPEFileからの新しいグラフ・データを、opgという名前の既存のグラフにマージします。
String szOPVFile = "../../data/connectionsNew.opv";
String szOPEFile = "../../data/connectionsNew.ope";
OraclePropertyGraphDataLoader opgdl = OraclePropertyGraphDataLoader.getInstance();
opgdl.mergeData(opg, szOPVFile, szOPEFile,
48 /*DOP*/,
1000 /*Batch Size*/,
true /*Rebuild index*/,
"pdml=t, pddl=t, no_dup=t, use_new_val_for_dup_key=t" /*Merge options*/);
データのマージ操作のパフォーマンスを最適化するために、JDBCベースのデータのマージを呼び出すときに、フラグやヒントのセットをマージ・オプション・パラメータに指定できます。これらのヒントとしては次のものがあります。
-
DOP: データのマージ時に使用する並列度。このパラメータは、データをプロパティ・グラフVT$およびGE$表にマージするときに使用するローダー・スレッドの数と同様に、ファイルの分割時に生成するチャンクの数を決定します。
-
バッチ・サイズ:バッチ・モードでOracleのJDBC文で使用するバッチ・サイズを指定する整数。
-
索引の再作成: trueに設定されている場合、データ・ローダーは、データがロードされるプロパティ・グラフで定義されたすべての索引および制約を無効にします。すべてのデータがプロパティ・グラフにマージされた後、すべての元の索引および制約は再作成され、有効化されます。
-
マージ・オプション: データのマージ操作を最適化するための1つのオプション(またはカンマで区切った複数のオプション)。これらのオプションとしては次のものがあります。
-
PDML=T: データ・ローダーで使用されるデータベース・セッションでのDML操作のパラレル実行を有効にします。このヒントは、長時間実行するバッチ・ジョブのパフォーマンスを向上するのに使用されます。
-
PDDL=T: データ・ローダーで使用されるデータベース・セッションでのDDL操作のパラレル実行を有効にします。このヒントは、長時間実行するバッチ・ジョブのパフォーマンスを向上するのに使用されます。
-
NO_DUP=T: 新しい入力グラフ・データに無効な重複がないことを前提にしています。有効なプロパティ・グラフでは、各頂点(またはエッジ)は指定したプロパティ・キーに対し最大で1つの値を持つことができます。無効なプロパティ・グラフでは、各頂点(またはエッジ)は特定のキーに対し2つ以上の値を持つことがあります。例として、頂点vには2つのキー/値ペア、name/"John"およびname/"Johnny"があり、同じキーを共有しています。
-
OVERLAP=F: 新しいグラフ・データと既存のグラフ・データの間に重複がないことを前提とします。つまり、新しいグラフ・データと既存のグラフ・データに複数の異なる値を持つキーはありません。
-
USE_NEW_VAL_FOR_DUP_KEY=T: 新しいグラフ・データと既存のグラフ・データの間に重複がある場合、新しいグラフ・データの値を使用します。そうでなければ、既存のグラフ・データの値を使用します。
-
外部表ベースのデータのマージ
外部表ベースのデータのマージでは、外部表を使用して、新しいグラフ・データをOracle Databaseにロードしてから、新しいグラフ・データを既存のグラフにマージします。
外部表ベースのデータのマージには、外部表により読み出されるファイルが格納されるディレクトリ・オブジェクトが必要です。このディレクトリは、次のSQL*Plus文を使用して作成できます。
create or replace directory tmp_dir as '/tmppath/';
grant read, write on directory tmp_dir to public;
次の例は、DOP(並列度)が48で、マージ・オプションを指定した、外部表ベースのデータ・マージを使用し、Oracleフラット・ファイル形式の頂点およびエッジ・ファイルszOPVFileおよびszOPEFileからの新しいグラフ・データを、既存のグラフopgにマージします。
String szOPVFile = "../../data/connectionsNew.opv";
String szOPEFile = "../../data/connectionsNew.ope";
String szExtDir = "tmp_dir";
OraclePropertyGraphDataLoader opgdl = OraclePropertyGraphDataLoader.getInstance();
opgdl.mergeDataWithExtTab(opg, szOPVFile, szOPEFile,
48 /*DOP*/,
true /*Use Named Pipe for splitting*/,
szExtDir /*database directory object*/,
true /*Rebuild index*/,
"pdml=t, pddl=t, no_dup=t, use_new_val_for_dup_key=t" /*Merge options*/);
SQL*Loaderベースのデータのマージ
SQLローダー・ベースのデータのマージでは、Oracle SQL*Loaderを使用して、新しいグラフ・データをOracle Databaseにロードしてから、新しいグラフ・データを既存のグラフにマージします。
次の例は、DOP(並列度)が48で、マージ・オプションを指定した、SQLローダー・ベースのデータ・マージを使用し、Oracleフラット・ファイル形式の頂点およびエッジ・ファイルszOPVFileおよびszOPEFileからの新しいグラフ・データを、既存のグラフopgにマージします。APIを使用するには、SQL*Loaderへのパスを指定する必要があります。
String szUser = "username";
String szPassword = "password";
String szDbId = "db18c"; /*service name of the database*/
String szOPVFile = "../../data/connectionsNew.opv"; 0
String szOPEFile = "../../data/connectionsNew.ope";
String szSQLLoaderPath = "<YOUR_ORACLE_HOME>/bin/sqlldr";
OraclePropertyGraphDataLoader opgdl = OraclePropertyGraphDataLoader.getInstance();
opgdl.mergeDataWithSqlLdr(opg, szUser, szPassword, szDbId, szOPVFile, szOPEFile,
48 /*DOP*/,
true /*Use Named Pipe for splitting*/,
szSQLLoaderPath /* SQL*Loader path: the path to bin/sqlldr */,
true /*Rebuild index*/,
"pdml=t, pddl=t, no_dup=t, use_new_val_for_dup_key=t" /*Merge options*/);
親トピック: プロパティ・グラフ・データに対するJava APIの使用