すべてのプロダクト
Search
ドキュメントセンター

Tablestore:自動採番主キー列

最終更新日:Nov 09, 2025

パーティションキーではないプライマリキー列を自動インクリメント列として設定した場合、データを書き込むときにその列の値を指定する必要はありません。Tablestore は、パーティションキーレベルで厳密に増加する一意の値を自動インクリメント列に自動的に生成します。

特徴

自動採番主キー列には、次の特徴があります。

  • 自動インクリメント列の値は一意であり、パーティションキーレベルで厳密に増加しますが、連続していることは保証されません。

  • 自動インクリメント列のデータの型は 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

使用方法

コンソールを使用する

  1. 自動採番主キー列を持つデータテーブルを作成します。

    1. Tablestore コンソールにログインします。

    2. [概要] ページで、インスタンスの [アクション] 列にある [インスタンス管理] をクリックします。

    3. [インスタンス詳細] タブの [データテーブルリスト] セクションで、[データテーブルの作成] をクリックします。

    4. [データテーブルの作成] ダイアログボックスで、[データテーブル名][テーブルプライマリキー] を設定します。必要に応じて他のパラメーターを設定します。

      テーブルプライマリキーを設定するときは、パーティションキーではないプライマリキー列のタイプとして [自動インクリメント列] を選択します。

      説明

      パラメーター設定の詳細については、「データテーブル操作」をご参照ください。

    5. [作成] をクリックします。

  2. データを書き込みます。

    1. [インスタンス詳細] タブの [データテーブルリスト] セクションで、データテーブル名をクリックします。

    2. [データ管理] タブで、[データの挿入] をクリックします。

    3. [データの挿入] ダイアログボックスで、プライマリキー値を入力し、必要に応じて属性列を追加します。

      自動インクリメント列の値を入力する必要はありません。データが書き込まれると、システムが自動的に値を生成します。複数の属性列を追加するには、image アイコンを複数回クリックし、各属性列の名前、タイプ、および値を設定します。

    4. [OK] をクリックします。

      システムは正常に書き込まれたデータを表示します。後続のデータ更新または読み取りのために、行の完全なプライマリキーを記録します。

コマンドラインインターフェイスを使用する

  1. 自動採番主キー列を持つデータテーブルを作成して使用します。

    1. create コマンドを実行してデータテーブルを作成します。詳細については、「テーブルを作成する」をご参照ください。

      次の例では、自動採番主キー列を持つ mytable という名前のデータテーブルを作成します。このテーブルには、uid (文字列型) と pid (整数型) の 2 つのプライマリキー列があります。2 番目のプライマリキー列 pid は、自動インクリメント列として設定されます。テーブル内のデータは有効期限が切れることはありません。

      create -t mytable --pk '[{"c":"uid", "t":"string"}, {"c":"pid", "t":"integer", "opt":"auto"}]'
    2. use --wc -t mytable コマンドを実行してデータテーブルを使用します。

  2. put コマンドを実行してデータの行を書き込みます。詳細については、「新しいデータを挿入する」をご参照ください。

    説明

    データを書き込んだ後、完全なプライマリキー情報を取得するには、scan コマンドを実行して指定された行データを取得できます。詳細については、「データをスキャンする」または「データをエクスポートする」をご参照ください。

    次の例では、データテーブルにデータの行を挿入します。最初のプライマリキー列の値は "86" です。2 番目のプライマリキー列の値は null です。この行には、name (文字列型) と country (文字列型) の 2 つの属性列があります。

    put --pk '["86", null]' --attr '[{"c":"name", "v":"redchen"}, {"c":"country", "v":"china"}]'

SDK を使用する

自動採番主キー列機能は、Java SDKGo SDKPython SDKNode.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) を消費しません。