レコード・エントリは様々な型のフィールドを持つことができます。ただし、埋込みレコードはデータが相対的に静的の場合のみ使用してください。一般的に、特に子データセットが大きいかサイズが変更する場合に、埋込みレコードよりも子表が優れた解決策を提供します。
RECORD()
文を使用して表フィールドをレコードとして宣言します。
主キーがUIDで2番目のフィールドにレコードを持つシンプルな2つのフィールドの表を定義するには、次のスクリプトを使用します。
CREATE TABLE myTable ( uid INTEGER, myRecord MAP(firstField STRING, secondField INTEGER), PRIMARY KEY (uid) )
埋込みレコード・フィールドで、CHECK
、DEFAULT
およびNOT NULL
制約はサポートされていません。ただし、これらの制約は埋込みレコードの個々のフィールドには適用できます。詳細は、「フィールド制約」を参照してください。
レコードを書き込むには、Row.putRecord()
を使用し、これにより、RecordValue
クラス・インスタンスが返されます。次に、レコードにフィールドを書き込むために、RecordValue.put()
を使用します。
TableAPI tableH = kvstore.getTableAPI(); Table myTable = tableH.getTable("myTable"); Row row = myTable.createRow(); row.put("uid", 12345); RecordValue rv = row.putRecord("myRecord"); rv.put("firstField", "An embedded record STRING field"); rv.put("secondField", 3388); tableH.put(row, null, null);
レコードを読み込むにはRow.get().asRecord()
を使用します。これにより、RecordValue
クラス・インスタンスが返されます。こうすることで、レコードからフィールドを取得するためにRecordValue.get()
を使用できます。取得した値はFieldValue
として返され、これにより、FieldValue.asInteger()
などのキャスト・メソッドを使用してカプセル化された値が取得できます。
たとえば、前述の例で作成した埋込みレコードからフィールド値を取得します。
TableAPI tableH = kvstore.getTableAPI(); Table myTable = tableH.getTable("myTable"); /* Create a primary key for user id 12345 and get a row */ PrimaryKey key = myTable.createPrimaryKey(); key.put("uid", 12345); Row row = tableH.get(key, null); RecordValue rv = row.get("myRecord").asRecord(); FieldValue fv = rv.get("firstField"); System.out.println("firstField: " + fv.asString().get()); fv = rv.get("secondField"); System.out.println("secondField: " + fv.asInteger().get());