5.9.3 頂点ファイル

頂点ファイルの各行は、プロパティ・グラフの1つの頂点を記述する1つのレコードです。1つのレコードは1つの頂点のキー値プロパティを記述できるので、複数のプロパティを持つ頂点を記述する場合は複数のレコード/行が使用されます。

レコードには、カンマで区切られたフィールドが含まれています。各レコードには、値があるかどうかに関係なく、最初の6つのフィールドを区切るために5つのカンマが含まれている必要があります。オプションの7番目のフィールドを(カンマで6番目のフィールドから区切って)追加して、頂点のラベルを定義できます。

vertex_ID, key_name, value_type, value, value, value, vertex_label

次の表では、頂点ファイルのレコードを構成するフィールドについて説明します。

表5-2 頂点ファイルのレコードの形式

フィールド番号 名前 説明

1

vertex_ID

頂点を一意に識別する整数

2

key_name

キー値ペアのキーの名前

頂点にプロパティが指定されていない場合は、空白(%20)を入力します。この例ではプロパティが指定されていない頂点1について説明します。

1,%20,,,,

3

value_type

キー値ペアの値のデータ型を表す整数。

  • 1 String
  • 2 Integer
  • 3 Float
  • 4 Double
  • 5 Timestamp (date)
  • 6 Boolean
  • 7 Long integer
  • 8 Short integer
  • 9 Byte
  • 10 Char
  • 20 地理空間座標、線、ポリゴン、またはWell-Known Text (WKT)リテラルにできる空間データ
  • 101 シリアライズ可能Javaオブジェクト

4

value

数値でも日付でもない場合のkey_nameのエンコードされたnullでない値

5

value

数値の場合のkey_nameのエンコードされたnullではない値

6

value

タイムスタンプ(日付)の場合のkey_nameのエンコードされたnullではない値

日付の形式を識別するには、Java SimpleDateFormatクラスを使用します。この例は、2015-03-26T00:00:00.000-05:00という日付形式について説明しています。

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSXXX"); encode(sdf.format((java.util.Date) value));

7

vertex_label

頂点のオプションのエンコードされたラベルで、頂点のタイプまたはカテゴリを示すために使用できます。

頂点の必須グループ化: 1つの頂点には複数のプロパティを指定でき、頂点ファイルには、頂点IDとその頂点の1つのプロパティの組合せごとに1つのレコード(フラット・ファイル内の単一テキスト行によって表される)が含まれます。頂点ファイルでは、各頂点のすべてのレコードがまとめてグループ化されている(つまり、他の頂点のレコードが間に入っていない)必要があります。これは任意の方法で行えますが、便利な方法は、頂点ファイルのレコードを頂点ID別に昇順(または降順)にソートすることです(ただし、頂点ファイルのすべてのレコードを頂点ID別にソートする必要があるわけではありません。これはグループ化要件を満たすための単なる1つの方法です)。

Oracleフラット・ファイル形式でエッジ・ファイルを構築する場合、頂点プロパティ名と値フィールドが適切にエンコードされていることを確認することが重要です(特に特殊文字のエンコーディングを参照)。エンコーディングを簡素化するには、OraclePropertyGraphUtils.escape Java APIを使用できます。

OraclePropertyGraphUtils.outputVertexRecord(os, vid, key, value)ユーティリティ・メソッドを使用して、頂点レコードをOracleフラット・ファイル形式で直接直列化できます。このメソッドでは、特殊文字のエンコーディングについて心配する必要はありません。このメソッドは、vidによって識別される特定の頂点のキー/値プロパティを記述する新しいテキスト行を特定の出力ストリーム内に書き込みます。

例5-25 OraclePropertyGraphUtils.outputVertexRecordの使用

この例では、OraclePropertyGraphUtils.outputVertexRecordを使用して、頂点1に2つの新しい行を書き込んでいます。

OutputStream os = new FileOutputStream("./example.opv");
long vid = 1;
String label = "person";
OraclePropertyGraphUtils.outputVertexRecord(os, vid, label, "name", "Robert Smith");
OraclePropertyGraphUtils.outputVertexRecord(os, vid, label, "birth year", 1961);
os.flush();
os.close();

生成される出力ファイルの1行目では、値「Robert Smith」を使用してプロパティ名を記述し、2行目はその出生年の1961年を記述しています。

% cat example.opv
1,name,1,Robert%20OSmith,,,person
1,birth%20year,2,,1961,,person