レコード、割当ておよびデータ型

Data.Recordは、Endecaデータ・ドメインにデータをロードするための基本的なデータ型です。

レコードおよび割当て

バルク・ロードAPIを使用してEndecaデータ・ドメインにデータをロードするクライアント・プログラムでは、ソース・データ・レコードをネイティブ・フォーマットからRecordオブジェクトに変換する必要があります。概念的に、Recordはキー/値ペアの名前付きセットです。キー/値ペアはData.Assignmentです。キーはStringで、値には次の表に示したサポートされるデータ型のいずれかを指定できます。

Recordの名前もAssignmentなので、この中のどの型でも指定できます。そのためSpecと呼ばれています。Specはデータ・レコードの主キーとして機能し、Recordごとに1つ必要です。

Specは、Data.Record.BuilderクラスのsetSpec()メソッドを使用してRecordに設定されます(次に示すサンプル・プログラムのスニペットを参照)。
Record.Builder recBuilder = Record.newBuilder(); 

   Assignment.Builder assgtBuilder = Assignment.newBuilder();
   assgtBuilder.setName("Name");
   assgtBuilder.setStringValue(name);
   assgtBuilder.setDataType(Assignment.DataType.STRING);
   Assignment nameAssgt = assgtBuilder.build();
   recBuilder.setSpec(nameAssgt);
Spec以外のキー/値割当ては、次のように、同じData.Record.BuilderクラスのaddAssignments()メソッドを使用して設定されます。
assgtBuilder.setName("Price");
assgtBuilder.setDoubleValue(price);
assgtBuilder.setDataType(Assignment.DataType.DOUBLE);
Assignment priceAssgt = assgtBuilder.build();
recBuilder.addAssignments(priceAssgt);

Builder

DataオブジェクトとRecordオブジェクトは、関連付けられたBuilder型を使用して作成されます。
  • Data.Record.Builderは、specとAssignmentオブジェクト用のset()メソッドおよびclear()メソッドを備えています。
  • Data.Assignment.Builderは、そのキーおよびサポートされるすべてのデータ型用の同じメソッドを備えています。
Builderクラスのsetter関数はすべて、呼び出し元のオブジェクトを返すので、相互につなぎ合せることができます。これにより、必要な場合は、次のように全文を1行で作成できます。
Data.Assignment.newBuilder().setName("SKU").setString("AB1234").setDataType(Data.Assignment.DataType.STRING).build();

データ型

Data.Assignment.DataTypeの列挙値には、Dgraphプロセスでサポートされる各データ型のエントリが格納されます。これらは、次のように、 Assignment.Builderクラスのsetterメソッドに対応しています。
列挙データ型 Assignment.Builderのsetter Dgraphデータ型
BOOLEAN setBoolValue() mdex:boolean
DOUBLE setDoubleValue() mdex:double
DATETIME setStringValue() mdex:dateTime
DURATION setStringValue() mdex:duration
GEOCODE setStringValue() mdex:geocode
INT setInt32Value() mdex:int
INT64 setInt64Value() mdex:long
STRING setStringValue() mdex:string
TIME setStringValue() mdex:time

setDataType()メソッドは、EndecaサーバーにAssignmentのデータ型を示します。たとえば、setStringValue("foo")setDataType(Data.Assignment.DataType.DOUBLE)を呼び出して、結果のAssignmentRecordに含めてサーバーに送信すると、サーバーではDOUBLE値の抽出を試みますが、何も取得されません。データ型を指定しないと、Assignmentは無効になります。

データ型の設定例を次に示します。
// BOOLEAN example:
assgtBuilder.setBoolValue(false);
assgtBuilder.setDataType(Assignment.DataType.BOOLEAN);

// DOUBLE example:
assgtBuilder.setDoubleValue(99.95);
assgtBuilder.setDataType(Assignment.DataType.DOUBLE);

// DATETIME example:
assgtBuilder.setStringValue("2010-11-18T17:00:00Z");
assgtBuilder.setDataType(Assignment.DataType.DATETIME);

// DURATION example:
assgtBuilder.setStringValue("P429DT1H2M3S");
assgtBuilder.setDataType(Assignment.DataType.DURATION);

// GEOCODE example:
assgtBuilder.setStringValue("42.365615 -71.075647");
assgtBuilder.setDataType(Assignment.DataType.GEOCODE);

// INT example:
assgtBuilder.setInt32Value(128);
assgtBuilder.setDataType(Assignment.DataType.INT);

// INT64 example:
assgtBuilder.setInt64Value(92233720);
assgtBuilder.setDataType(Assignment.DataType.INT64);

// STRING example:
assgtBuilder.setStringValue("Road Bikes");
assgtBuilder.setDataType(Assignment.DataType.STRING);

// TIME example:
assgtBuilder.setStringValue("09:14:52");
assgtBuilder.setDataType(Assignment.DataType.TIME);