このトピックでは、自動インクリメント主キー列を設定する方法について説明します。パーティションキーではない主キー列を自動インクリメント主キー列として指定できます。自動インクリメント主キー列を含むテーブルにデータを書き込む場合、自動インクリメント主キー列の値を指定する必要はありません。Tablestore は自動インクリメント主キー列の値を自動的に生成します。自動インクリメント主キー列に生成される値は一意であり、パーティション内で単調に増加します。
前提条件
OTSClient インスタンスが初期化されていること。詳細については、OTSClient インスタンスを初期化する を参照してください。
自動インクリメント主キー列を設定する
テーブルを作成するときに、パーティションキーではない主キー列を自動インクリメント主キー列として指定します。
INTEGER 型の主キー列のみを自動インクリメント主キー列として指定できます。自動インクリメント主キー列に生成される各値は、LONG 型の 64 ビット符号付き整数です。
テーブルにデータを書き込むときは、自動インクリメント主キー列の値を指定する必要はありません。特定の主キー列を自動インクリメント主キー列として指定するだけです。
テーブルにデータが書き込まれた後に自動インクリメント主キー列の値を取得する場合は、ReturnType を Primarykey に設定できます。
データをクエリするときは、すべての主キー列の値を指定する必要があります。完全な主キー値を取得するには、PutRow、UpdateRow、または BatchWriteRow 操作で ReturnType パラメーターを Primarykey に設定します。
データテーブルからデータを読み取るときに、完全な主キーが記録されている場合は、主キーに基づいてデータを読み取ることができます。詳細については、1 行のデータを読み取る および 複数行のデータを一度に読み取る を参照してください。自動インクリメント主キー列の値が記録されていない場合は、最初の主キー列の値に基づいてデータの範囲を決定してから、データを読み取る必要があります。詳細については、主キー値が特定の範囲内にあるデータを読み取る を参照してください。
説明既存の行を更新する場合に、自動インクリメント主キー列の値を記録していない場合は、データを更新する前に GetRange 操作を呼び出して、行の主キー情報を取得します。
例
CreateTable、PutRow、UpdateRow、または BatchWriteRow 操作を呼び出すときに、自動インクリメント主キー列機能を使用できます。
テーブルを作成する
テーブルを作成するときに自動インクリメント主キー列を作成するには、主キー列の属性を 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'); }); }
データを書き込む
自動インクリメント主キー列を含むテーブルにデータを書き込むときは、自動インクリメント主キー列の値を指定する必要はありません。主キー列の属性を 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)); }); }