すべてのマップ・エントリは同じ型である必要があります。マップの値の型にかかわらず、キーは常に文字列です。
文字列「[]」は予約されていて、キー名に使用することはできません。
表のフィールドをマップとして宣言する場合、MAP()
文を使用します。マップ要素データ型も宣言する必要があります。
主キーがUIDで2番目のフィールドに整数のマップを持つシンプルな2つのフィールドの表を定義するには、次のDDL文を使用します。
CREATE TABLE myTable ( uid INTEGER, myMap MAP(INTEGER), PRIMARY KEY (uid) )
マップ・フィールドでは、CHECK
制約がサポートされています。詳細は、「CHECK」を参照してください。
マップ・フィールドでは、DEFAULT
およびNOT NULL
制約はサポートされていません。
マップを書き込むには、Row.putMap()
を使用し、これによりMapValue
クラス・インスタンスが返されます。次に、マップに要素を書き込むには、MapValue.put()
を使用します。
TableAPI tableH = kvstore.getTableAPI(); Table myTable = tableH.getTable("myTable"); Row row = myTable.createRow(); row.put("uid", 12345); MapValue mv = row.putMap("myMap"); mv.put("field1", 1); mv.put("field2", 2); mv.put("field3", 3); tableH.put(row, null, null);
マップを読み込むにはRow.get().asMap()
を使用します。これにより、MapValue
クラス・インスタンスが返されます。次にMapValue.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); MapValue mv = row.get("testMap").asMap(); FieldValue fv = mv.get("field3"); System.out.println("fv: " + fv.asInteger().get());