Data.Recordは、Endecaデータ・ドメインにデータをロードするための基本的なデータ型です。
バルク・ロードAPIを使用してEndecaデータ・ドメインにデータをロードするクライアント・プログラムでは、ソース・データ・レコードをネイティブ・フォーマットからRecordオブジェクトに変換する必要があります。概念的に、Recordはキー/値ペアの名前付きセットです。キー/値ペアはData.Assignmentです。キーはStringで、値には次の表に示したサポートされるデータ型のいずれかを指定できます。
Recordの名前もAssignmentなので、この中のどの型でも指定できます。そのためSpecと呼ばれています。Specはデータ・レコードの主キーとして機能し、Recordごとに1つ必要です。
Data.Record.Builder recordBuilder = Data.Record.newBuilder(); Data.Assignment.Builder assignmentBuilder = Data.Assignment.newBuilder(); assignmentBuilder.clear(); assignmentBuilder.setName("Value").setDataType(Data.Assignment.DataType.INT).setInt32Value(val); recordBuilder.setSpec(assignmentBuilder.build());
この例では、Specの名前はValueで、プログラムへの入力である整数値(val)を保持します。
assignmentBuilder.clear(); assignmentBuilder.setName("Words").setDataType(Data.Assignment.DataType.STRING).setStringValue(words); recordBuilder.addAssignments(assignmentBuilder.build());
サンプル・プログラムでは、Spec以外の3つの属性(String型のWordsと、2つのBoolean型のSquareおよびPrime)を持つ1つレコードが作成されます。
Data.Assignment.newBuilder().setName("SKU").setString("AB1234").setDataType(Data.Assignment.DataType.STRING).build();
列挙データ型 | Data.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()メソッドは、DgraphにAssignmentのデータ型を示します。たとえば、setStringValue("foo")とsetDataType(Data.Assignment.DataType.DOUBLE)を呼び出して、結果のAssignmentをRecordに含めてサーバーに送信すると、サーバーではDOUBLE値の抽出を試みますが、何も取得されません。データ型を指定しないと、Assignmentは無効になります。
// BOOLEAN example: assignmentBuilder.setBoolValue(false); assignmentBuilder.setDataType(Assignment.DataType.BOOLEAN); // DOUBLE example: assignmentBuilder.setDoubleValue(99.95); assignmentBuilder.setDataType(Assignment.DataType.DOUBLE); // DATETIME example: assignmentBuilder.setStringValue("2010-11-18T17:00:00Z"); assignmentBuilder.setDataType(Assignment.DataType.DATETIME); // DURATION example: assignmentBuilder.setStringValue("P429DT1H2M3S"); assignmentBuilder.setDataType(Assignment.DataType.DURATION); // GEOCODE example: assignmentBuilder.setStringValue("42.365615 -71.075647"); assignmentBuilder.setDataType(Assignment.DataType.GEOCODE); // INT example: assignmentBuilder.setInt32Value(128); assignmentBuilder.setDataType(Assignment.DataType.INT); // INT64 example: assignmentBuilder.setInt64Value(92233720); assignmentBuilder.setDataType(Assignment.DataType.INT64); // STRING example: assignmentBuilder.setStringValue("Road Bikes"); assignmentBuilder.setDataType(Assignment.DataType.STRING); // TIME example: assignmentBuilder.setStringValue("09:14:52"); assignmentBuilder.setDataType(Assignment.DataType.TIME);