Node.js SDK の `getRange` メソッドを使用して、Tablestore テーブルからプライマリキーの範囲内のデータを読み取ります。
前提条件
メソッド
getRange: function getRange(params, callback)
使用例
次のサンプルコードは、`test_table` テーブルからプライマリキーの値が `row1` より大きいデータを読み取る方法を示しています。
var params = {
tableName: 'test_table',
// クエリの開始プライマリキーを設定します。
inclusiveStartPrimaryKey: [{ 'id': 'row1' }],
// クエリの終了プライマリキーを設定します。終了プライマリキーは結果に含まれません。
exclusiveEndPrimaryKey: [{ 'id': TableStore.INF_MAX }]
};
// getRange メソッドを呼び出してデータをクエリします。
client.getRange(params, function (err, data) {
if (err) {
console.log('Get range failed with 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);
console.log('* Rows Data: ');
data.rows.forEach(function (row) {
console.log(row);
});
});
1 回の範囲スキャンで返されるデータは、最大 5,000 行または 4 MB です。この制限を超えた場合、操作は次の読み取りのための開始プライマリキーを返します。次のコードを使用して、反復クエリを実行できます。
async function getRangeSample() {
try {
while (true) {
// getRange メソッドを呼び出してデータをクエリします。
const data = await client.getRange(params);
// 返された結果を処理します。
console.log('* RequestId: ', data.RequestId);
console.log('* Read CU Cost: ', data.consumed.capacityUnit.read);
console.log('* Write CU Cost: ', data.consumed.capacityUnit.write);
console.log('* Rows Data: ');
data.rows.forEach(function (row) {
console.log(row);
});
// 次の読み取りの開始プライマリキーを設定します。
if (data.nextStartPrimaryKey) {
params.inclusiveStartPrimaryKey = data.nextStartPrimaryKey.map(item => {
return {
[item.name]: item.value
};
});
} else {
break;
}
}
} catch (err) {
console.log('Range get failed with error: ', err);
}
}
getRangeSample();
データをクエリする際に、次の設定も構成します。
-
データの読み取り方向を設定します。
var params = { tableName: 'test_table', // クエリの開始プライマリキーを設定します。データを逆方向で読み取る場合、開始プライマリキーは終了プライマリキーよりも大きくする必要があります。 inclusiveStartPrimaryKey: [{ 'id': TableStore.INF_MAX }], // クエリの終了プライマリキーを設定します。終了プライマリキーは結果に含まれません。 exclusiveEndPrimaryKey: [{ 'id': 'row1' }], // 読み取り方向を逆方向に設定します。 direction: TableStore.Direction.BACKWARD }; -
読み取るデータのバージョン範囲を設定します。操作は、指定されたバージョン範囲内のデータのみを返します。
// クエリのバージョン範囲を過去 24 時間に設定します。 params.timeRange = { startTime: (Date.now() - 86400 * 1000).toString(), endTime: Date.now().toString() } -
読み取る属性列を指定します。
params.columnsToGet = ['col2'] -
1 回のリクエストで返す行の最大数を設定します。
params.limit = 10