本文介紹如何通過 Node.js SDK 範圍讀取Table Store中的資料。
前提條件
方法說明
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);
});
});單次範圍掃描資料上限為 5000 行或者 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 };設定讀取的資料版本範圍,結果只返回版本範圍內的資料。
// 設定查詢的資料版本範圍為目前時間往前一天 params.timeRange = { startTime: (Date.now() - 86400 * 1000).toString(), endTime: Date.now().toString() }指定讀取的屬性列。
params.columnsToGet = ['col2']設定單次返回最大行數。
params.limit = 10