5.9.2 エッジ・ファイル
エッジ・ファイルの各行は、プロパティ・グラフの1つのエッジを記述する1つのレコードです。1つのレコードはエッジの1つのキー値プロパティを記述できるので、複数のプロパティを含むエッジを記述する場合は複数のレコードが使用されます。
レコードには、カンマで区切られた9つのフィールドが含まれています。各レコードには、値があるかどうかに関係なく、すべてのフィールドを区切るために8つのカンマが含まれている必要があります。
edge_ID, source_vertex_ID, destination_vertex_ID, edge_label, key_name, value_type, value, value, value
次の表では、エッジ・ファイルのレコードを構成するフィールドについて説明します。
表5-1 エッジ・ファイルのレコードの形式
フィールド番号 | 名前 | 説明 |
---|---|---|
1 |
edge_ID |
エッジを一意に識別する整数。 |
2 |
source_vertex_ID |
エッジの出力始点のvertex_ID。 |
3 |
destination_vertex_ID |
エッジの入力終点のvertex_ID。 |
4 |
edge_label |
2つの頂点間の関係を記述する、エッジのエンコードされたラベル。 |
5 |
key_name |
キー値ペアのキーのエンコードされた名前。 エッジにプロパティが指定されていない場合は、空白( 100,1,2,likes,%20,,,, |
6 |
value_type |
キー値ペアの値のデータ型を表す整数。
|
7 |
value |
数値でもタイムスタンプ(日付)でもない場合のkey_nameのエンコードされたnullでない値 |
8 |
value |
数値の場合のkey_nameのエンコードされたnullではない値 |
9 |
value |
タイムスタンプ(日付)の場合のkey_nameのエンコードされたnullではない値 日付の形式を識別するには、Java SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSXXX"); encode(sdf.format((java.util.Date) value)); |
エッジの必須グループ化: 1つのエッジには複数のプロパティを指定でき、エッジ・ファイルには、エッジIDとそのエッジの1つのプロパティの組み合わせごとに1つのレコード(フラット・ファイル内の単一テキスト行によって表現される)が含まれます。エッジ・ファイルでは、各エッジのすべてのレコードがまとめてグループ化されている(つまり、他のエッジのレコードが間に入っていない)必要があります。これは任意の方法で行えますが、便利な方法は、エッジ・ファイルのレコードをエッジID別に昇順(または降順)にソートすることです。(ただし、エッジ・ファイルのすべてのレコードをエッジID別にソートする必要があるわけではありません。これはグループ化要件を満たすための単なる1つの方法です)。
Oracleフラット・ファイル形式でエッジ・ファイルを構築する場合、エッジ・プロパティ名と値フィールドが適切にエンコードされていることを確認することが重要です(特に特殊文字のエンコーディングを参照)。エンコーディングを簡素化するには、OraclePropertyGraphUtils.escape
Java APIを使用できます。
OraclePropertyGraphUtils.outputEdgeRecord(os, eid, svid, dvid, label, key, value)
ユーティリティ・メソッドを使用して、エッジ・レコードをOracleフラット・ファイル形式で直接直列化できます。このメソッドでは、特殊文字のエンコーディングについて心配する必要はありません。このメソッドは、eid
によって識別される特定のエッジのキー/値プロパティを記述する新しいテキスト行を特定の出力ストリーム内に書き込みます。
例5-24 OraclePropertyGraphUtils.outputEdgeRecordの使用
この例では、OraclePropertyGraphUtils.outputEdgeRecord
を使用して、ラベルfriendOf
を使用して頂点1と2の間にエッジ100の新しい行を2本書き込んでいます。
OutputStream os = new FileOutputStream("./example.ope");
int sinceYear = 2009;
long eid = 100;
long svid = 1;
long dvid = 2;
OraclePropertyGraphUtils.outputEdgeRecord(os, eid, svid, dvid, "friendOf", "since (year)", sinceYear);
OraclePropertyGraphUtils.outputEdgeRecord(os, eid, svid, dvid, "friendOf", "weight", 1);
os.flush();
os.close();
生成される出力ファイルの1行目では、プロパティ「since (year)」が値2009を使用して記述され、2行目および次の行でエッジの重みが1に設定されています。
% cat example.ope 100,1,2,friendOf,since%20(year),2,,2009, 100,1,2,friendOf,weight,2,,1,
親トピック: Oracleフラット・ファイル形式の定義