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

Tablestore:自動インクリメント主キー列を設定する

最終更新日:Dec 28, 2024

このトピックでは、自動インクリメント主キー列を設定する方法について説明します。パーティションキーではない主キー列を自動インクリメント主キー列として指定できます。自動インクリメント主キー列を含むテーブルにデータを書き込む場合、自動インクリメント主キー列の値を指定する必要はありません。Tablestore は自動インクリメント主キー列の値を自動的に生成します。自動インクリメント主キー列に生成される値は一意であり、パーティション内で単調に増加します。

前提条件

OTSClient インスタンスが初期化されていること。詳細については、OTSClient インスタンスを初期化する を参照してください。

自動インクリメント主キー列を設定する

  1. テーブルを作成するときに、パーティションキーではない主キー列を自動インクリメント主キー列として指定します。

    INTEGER 型の主キー列のみを自動インクリメント主キー列として指定できます。自動インクリメント主キー列に生成される各値は、LONG 型の 64 ビット符号付き整数です。

  2. テーブルにデータを書き込むときは、自動インクリメント主キー列の値を指定する必要はありません。特定の主キー列を自動インクリメント主キー列として指定するだけです。

    テーブルにデータが書き込まれた後に自動インクリメント主キー列の値を取得する場合は、ReturnType を Primarykey に設定できます。

    データをクエリするときは、すべての主キー列の値を指定する必要があります。完全な主キー値を取得するには、PutRow、UpdateRow、または BatchWriteRow 操作で ReturnType パラメーターを Primarykey に設定します。

    データテーブルからデータを読み取るときに、完全な主キーが記録されている場合は、主キーに基づいてデータを読み取ることができます。詳細については、1 行のデータを読み取る および 複数行のデータを一度に読み取る を参照してください。自動インクリメント主キー列の値が記録されていない場合は、最初の主キー列の値に基づいてデータの範囲を決定してから、データを読み取る必要があります。詳細については、主キー値が特定の範囲内にあるデータを読み取る を参照してください。

    説明

    既存の行を更新する場合に、自動インクリメント主キー列の値を記録していない場合は、データを更新する前に GetRange 操作を呼び出して、行の主キー情報を取得します。

CreateTable、PutRow、UpdateRow、または BatchWriteRow 操作を呼び出すときに、自動インクリメント主キー列機能を使用できます。

  1. テーブルを作成する

    テーブルを作成するときに自動インクリメント主キー列を作成するには、主キー列の属性を AUTO_INCREMENT に設定するだけです。

    次のサンプルコードは、自動インクリメント主キー列を含むテーブルを作成する方法の例を示しています。テーブルには、STRING 型の pk1 主キー列と INTEGER 型の pk2 主キー列が含まれています。 pk1 主キー列はパーティションキーであり、pk2 主キー列は自動インクリメント主キー列です。

    var TableStore = require('../index.js');
    var Long = TableStore.Long;
    var client = require('./client');
    
    var tableName = "autoIncTable";
    var pk1 = "stringPK";
    var pk2 = "autoIncPK";
    
    function createTableWithAutoIncrementPk() {
        var createParams = {
            tableMeta: {
                tableName: tableName,
                primaryKey: [
                    {
                        name: pk1,
                        type: 'STRING'
                    },
                    {
                        name: pk2,
                        type: 'INTEGER',
                        option: 'AUTO_INCREMENT' // 主キー列を自動インクリメント主キー列に設定するには、option を AUTO_INCREMENT に設定します。
                    },
                ]
            },
            reservedThroughput: {
                capacityUnit: {
                    read: 0,
                    write: 0
                }
            },
            tableOptions: {
                timeToLive: -1, // データの有効期間を秒単位で指定します。-1 は、データが期限切れにならないことを示します。このパラメーターを 31,536,000(365 × 24 x 3,600)に設定すると、データの有効期間は 1 年になります。
                maxVersions: 1 // 各列に保持できる最大バージョン数を指定します。1 は、各列に最新バージョンのみが保持されることを示します。
            },
        };
    
        client.createTable(createParams, function (err, data) {
            if (err) {
                console.log('error:', err);
                return;
            }
            console.log('create table success');
        });
    }
  2. データを書き込む

    自動インクリメント主キー列を含むテーブルにデータを書き込むときは、自動インクリメント主キー列の値を指定する必要はありません。主キー列の属性を PK_AUTO_INCR に設定するだけです。

    var TableStore = require('../index.js');
    var Long = TableStore.Long;
    var client = require('./client');
    
    var tableName = "autoIncTable";
    var pk1 = "stringPK";
    var pk2 = "autoIncPK";
    
    function putRow() {
        var putParams = {
            tableName: tableName,
            condition: new TableStore.Condition(TableStore.RowExistenceExpectation.IGNORE, null),
            primaryKey: [
                { stringPK: 'pk1' },
                { autoIncPK: TableStore.PK_AUTO_INCR }
            ],
            attributeColumns: [
                { 'col1': 'col1val' }
            ],
            returnContent: { returnType: TableStore.ReturnType.Primarykey }
        };
    
        client.putRow(putParams, function (err, data) {
            if (err) {
                console.log('error:', err);
                return;
            }
    
            console.log('put row success,autoIncrement pk value:' + JSON.stringify(data.row.primaryKey));
        });
    
    }