特徴
自動採番主キー列には、次の特徴があります。
自動インクリメント列の値は一意であり、パーティションキーレベルで厳密に増加しますが、連続していることは保証されません。
自動インクリメント列のデータの型は 64 ビット符号付き整数です。
自動インクリメント列はテーブルレベルで定義されます。インスタンスには、自動インクリメント列を持つテーブルと持たないテーブルを含めることができます。
説明 自動採番主キー列機能を使用しても、条件付き更新のルールには影響しません。詳細については、「条件付き更新」をご参照ください。
使用上の注意
各データテーブルには、最大 1 つの自動採番主キー列を設定できます。パーティションキー列を自動インクリメント列として設定することはできません。
自動インクリメント列は、データテーブルを作成するときにのみ指定できます。既存のデータテーブルに自動インクリメント列を追加することはできません。
整数型のプライマリキー列のみを自動インクリメント列として設定できます。自動インクリメント列に対してシステムが生成する値は、64 ビット符号付き整数です。
属性列を自動インクリメント列として設定することはできません。
自動採番主キー列機能とローカルトランザクション機能は、同時に使用することはできません。
自動採番主キー列を持つテーブルにデータを書き込むときは、後続のデータ更新または読み取りのために、自動インクリメント列の値を取得して記録する必要があります。
API 操作
次の表に、自動採番主キー列機能に関連する API 操作を示します。
API | 説明 |
CreateTable | データテーブルを作成するときは、パーティションキーではないプライマリキー列を自動インクリメント列として設定します。そうしないと、自動採番主キー列機能を使用できません。 |
UpdateTable | データテーブルが作成された後、UpdateTable 操作を使用してプライマリキー列を自動インクリメント列として設定することはできません。 |
PutRow | データを書き込むとき、自動インクリメント列の値を指定する必要はありません。Tablestore は列の値を自動的に生成します。 ReturnType を RT_PK に設定することで、完全なプライマリキー値を取得できます。完全なプライマリキー値は、GetRow でデータをクエリするために使用できます。
重要 既存の行を更新する場合、自動採番主キー列の値を記録していない場合は、まず GetRange API 操作を使用して更新する行のプライマリキー情報を取得します。次に、データ更新を実行します。 |
UpdateRow |
BatchWriteRow |
GetRow | GetRow を使用する場合、完全なプライマリキー値が必要です。PutRow、UpdateRow、または BatchWriteRow で ReturnType パラメーターを RT_PK に設定することで、完全なプライマリキー値を取得できます。
重要 データを書き込むときに、自動採番主キー列の値を記録しない場合は、データの範囲を読み取ることができます。範囲は、最初のプライマリキー列によって決定されます。詳細については、「データの範囲を読み取る」をご参照ください。 |
BatchGetRow |
使用方法
コンソールを使用する
自動採番主キー列を持つデータテーブルを作成します。
Tablestore コンソールにログインします。
[概要] ページで、インスタンスの [アクション] 列にある [インスタンス管理] をクリックします。
[インスタンス詳細] タブの [データテーブルリスト] セクションで、[データテーブルの作成] をクリックします。
[データテーブルの作成] ダイアログボックスで、[データテーブル名] と [テーブルプライマリキー] を設定します。必要に応じて他のパラメーターを設定します。
テーブルプライマリキーを設定するときは、パーティションキーではないプライマリキー列のタイプとして [自動インクリメント列] を選択します。
[作成] をクリックします。
データを書き込みます。
[インスタンス詳細] タブの [データテーブルリスト] セクションで、データテーブル名をクリックします。
[データ管理] タブで、[データの挿入] をクリックします。
[データの挿入] ダイアログボックスで、プライマリキー値を入力し、必要に応じて属性列を追加します。
自動インクリメント列の値を入力する必要はありません。データが書き込まれると、システムが自動的に値を生成します。複数の属性列を追加するには、
アイコンを複数回クリックし、各属性列の名前、タイプ、および値を設定します。
[OK] をクリックします。
システムは正常に書き込まれたデータを表示します。後続のデータ更新または読み取りのために、行の完全なプライマリキーを記録します。
コマンドラインインターフェイスを使用する
自動採番主キー列を持つデータテーブルを作成して使用します。
create コマンドを実行してデータテーブルを作成します。詳細については、「テーブルを作成する」をご参照ください。
次の例では、自動採番主キー列を持つ mytable という名前のデータテーブルを作成します。このテーブルには、uid (文字列型) と pid (整数型) の 2 つのプライマリキー列があります。2 番目のプライマリキー列 pid は、自動インクリメント列として設定されます。テーブル内のデータは有効期限が切れることはありません。
create -t mytable --pk '[{"c":"uid", "t":"string"}, {"c":"pid", "t":"integer", "opt":"auto"}]'
use --wc -t mytable コマンドを実行してデータテーブルを使用します。
put コマンドを実行してデータの行を書き込みます。詳細については、「新しいデータを挿入する」をご参照ください。
説明 データを書き込んだ後、完全なプライマリキー情報を取得するには、scan コマンドを実行して指定された行データを取得できます。詳細については、「データをスキャンする」または「データをエクスポートする」をご参照ください。
次の例では、データテーブルにデータの行を挿入します。最初のプライマリキー列の値は "86" です。2 番目のプライマリキー列の値は null です。この行には、name (文字列型) と country (文字列型) の 2 つの属性列があります。
put --pk '["86", null]' --attr '[{"c":"name", "v":"redchen"}, {"c":"country", "v":"china"}]'
SDK を使用する
自動採番主キー列機能は、Java SDK、Go SDK、Python SDK、Node.js SDK、.NET SDK、および PHP SDK で使用できます。このセクションでは、Java SDK を例として使用します。
次のサンプルコードは、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);
// リクエスト ID と読み取り/書き込み 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());
}
課金
自動採番主キー列機能を使用しても、既存の課金ルールには影響しません。返されるプライマリキー列データは、追加の読み取り容量単位 (CU) を消費しません。