このトピックでは、Java SDK を使用してデータテーブルの自動採番主キー列を設定する方法について説明します。また、自動インクリメント列へのデータの書き込み方法と、生成された自動インクリメント値の取得方法についても説明します。
考慮事項
Tablestore Java SDK は、バージョン 4.2.0 以降で自動採番主キー列をサポートしています。
自動インクリメント列によって生成される自動インクリメント値は一意であり、パーティションキーレベルで厳密に増加します。ただし、連続していることは保証されません。
開始前の準備
自動採番主キー列を設定する
データテーブルを作成するときに、パーティションキー以外の主キー列を自動インクリメント列として設定できます。既存のデータテーブルでは、自動インクリメント列を設定できません。
説明
整数型の主キー列のみを自動インクリメント列として設定できます。データテーブルは、最大で 1 つの自動インクリメント列を持つことができます。自動インクリメント列によって生成される値は、64 ビット符号付き long 整数です。
サンプルコード
次のサンプルコードは、test_table という名前のデータテーブルを作成します。このテーブルには、id という名前のパーティションキーと incr という名前の自動インクリメント列が含まれています。
public static void createTableTest(SyncClient client) {
TableMeta tableMeta = new TableMeta("test_table");
tableMeta.addPrimaryKeyColumn(new PrimaryKeySchema("id", PrimaryKeyType.STRING));
tableMeta.addPrimaryKeyColumn(new PrimaryKeySchema("incr", PrimaryKeyType.INTEGER, PrimaryKeyOption.AUTO_INCREMENT));
TableOptions tableOptions = new TableOptions();
tableOptions.setMaxVersions(1);
tableOptions.setTimeToLive(-1);
CreateTableRequest createTableRequest = new CreateTableRequest(tableMeta, tableOptions);
client.createTable(createTableRequest);
}データを書き込む
自動インクリメント列にデータを書き込むときは、自動インクリメント列の値をプレースホルダーとして設定するだけで済みます。データのクエリと更新のために生成された自動インクリメント値を取得する場合は、rowPutChange の戻り値の型を RT_PK に設定する必要もあります。
サンプルコード
次のサンプルコードは、test_table テーブルにデータの行を書き込み、書き込まれた行データの主キー情報を取得して出力します。
public static void putRowTest(SyncClient client) {
// 主キーを構築する
PrimaryKeyBuilder primaryKeyBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
primaryKeyBuilder.addPrimaryKeyColumn("id", PrimaryKeyValue.fromString("row1"));
// 自動インクリメント列をプレースホルダーとして設定する
primaryKeyBuilder.addPrimaryKeyColumn("incr", PrimaryKeyValue.AUTO_INCREMENT);
PrimaryKey primaryKey = primaryKeyBuilder.build();
// 書き込む行データを構築する
RowPutChange rowPutChange = new RowPutChange("test_table", primaryKey);
rowPutChange.addColumn("col1", ColumnValue.fromString("val1"));
// 書き込まれた行データの主キー情報を返すように、戻り値の型を RT_PK に設定する
rowPutChange.setReturnType(ReturnType.RT_PK);
// putRow メソッドを呼び出して、行データを書き込む
PutRowRequest putRowRequest = new PutRowRequest();
putRowRequest.setRowChange(rowPutChange);
PutRowResponse putRowResponse = client.putRow(putRowRequest);
// RequestId と読み取り/書き込み CU 消費量
System.out.println("RequestId: " + putRowResponse.getRequestId());
System.out.println("Read CU Cost: " + putRowResponse.getConsumedCapacity().getCapacityUnit().getReadCapacityUnit());
System.out.println("Write CU Cost: " + putRowResponse.getConsumedCapacity().getCapacityUnit().getWriteCapacityUnit());
// 返された主キー情報を取得して出力します。戻り値の型が RT_PK に設定されていない場合、主キー情報はデフォルトでは返されません
Row row = putRowResponse.getRow();
if(row != null)
System.out.println(row.getPrimaryKey().toString());
}