Tablestore SDK for Node.js を使用して、データテーブルに自動採番主キー列を追加し、その列にデータ行を書き込み、生成された値を取得します。
前提条件
作業を開始する前に、次の要件を満たしていることを確認してください。
初期化済みのクライアント。詳細については、「Tablestore クライアントの初期化」をご参照ください。
自動インクリメント列の動作
自動採番主キー列の値は一意かつ単調増加ですが、同じパーティションキー値を共有するパーティション内では連続しているとは限りません。
自動採番主キー列を持つデータテーブルの作成
データテーブルを作成する際、パーティションキー以外のプライマリキー列を 1 つ選択し、その option を AUTO_INCREMENT に設定することで、自動採番主キー列として指定できます。この列は INTEGER データの型を使用する必要があります。テーブルに設定できる自動採番主キー列は最大で 1 列であり、既存のテーブルには後から追加できません。
自動採番主キー列の値は 64 ビット符号付き長整数です。AUTO_INCREMENT オプションは、パーティションキー以外の列でのみサポートされます。
例
次の例では、2 つのプライマリキー列(id(パーティションキー、STRING)および incr(自動採番、INTEGER))を持つ test_table を作成します。
function createTableSample() {
var createParams = {
tableMeta: {
tableName: 'test_table',
primaryKey: [
{
name: 'id',
type: 'STRING' // パーティションキー — 書き込みごとにこの値を指定します
},
{
name: 'incr',
type: 'INTEGER',
option: 'AUTO_INCREMENT' // Tablestore がこの値を自動的に生成します
},
]
},
tableOptions: {
timeToLive: -1, // -1 はデータが無期限であることを意味します
maxVersions: 1
},
reservedThroughput: {
capacityUnit: {
read: 0,
write: 0
}
},
};
client.createTable(createParams, function (err, data) {
if (err) {
console.error('error:', err);
return;
}
console.log('success:', data);
});
}
データの書き込み
行を書き込む際は、自動採番列の値を TableStore.PK_AUTO_INCR に設定します。これは Tablestore に対して値を自動生成するよう指示するプレースホルダーです。生成された値を取得する(たとえば、後続の読み取りや更新で使用する)には、returnContent 内で returnType を TableStore.ReturnType.Primarykey に設定します。
例
次の例では、test_table に行を書き込み、生成されたプライマリキーを出力します。
function putRowSample() {
var putParams = {
tableName: 'test_table',
condition: new TableStore.Condition(TableStore.RowExistenceExpectation.IGNORE, null),
primaryKey: [
{ id: 'row1' },
// PK_AUTO_INCR をプレースホルダーとして使用 — Tablestore が生成された値に置き換えます
{ incr: TableStore.PK_AUTO_INCR }
],
attributeColumns: [
{ 'col1': 'val1' }
],
// 生成された incr 値を後続のクエリで使用できるように、完全なプライマリキーを返します
returnContent: { returnType: TableStore.ReturnType.Primarykey }
};
client.putRow(putParams, function (err, data) {
if (err) {
console.error('error:', err);
return;
}
// リクエストメタデータおよび消費された容量単位を出力
console.log("RequestId: ", data.RequestId);
console.log("Read CU Cost: ", data.consumed.capacityUnit.read);
console.log("Write CU Cost: ", data.consumed.capacityUnit.write);
// 自動採番値を含む生成されたプライマリキーを出力
// returnType が Primarykey に設定されている場合にのみ返されます
if (data.row.primaryKey) {
console.log(JSON.stringify(data.row.primaryKey));
}
});
}