全部產品
Search
文件中心

Tablestore:範圍讀取資料

更新時間:Mar 12, 2026

本文介紹如何通過 Node.js SDK 範圍讀取Table Store中的資料。

前提條件

初始化Tablestore Client

方法說明

getRange: function getRange(params, callback)

params參數說明

名稱

類型

說明

tableName(必選)

string

資料表名稱。

inclusiveStartPrimaryKey(必選)

Array

起始主鍵資訊,包括主鍵列名稱和主索引值。

  • 返回資料包含起始主鍵。

  • 主鍵個數和類型必須與資料表的主鍵保持一致。

  • 正向讀取資料時,起始主鍵必須小於結束主鍵。

  • 反向讀取資料時,起始主鍵必須大於結束主鍵。

  • TableStore.INF_MIN 表示無限小,TableStore.INF_MAX 表示無限大。

exclusiveEndPrimaryKey(必選)

Array

結束主鍵資訊,包括主鍵列名稱和主索引值。

  • 返回資料不包含結束主鍵。

  • 主鍵個數和類型必須與資料表的主鍵保持一致。

  • TableStore.INF_MIN 表示無限小,TableStore.INF_MAX 表示無限大。

direction(可選)

string

讀取方向。

  • TableStore.Direction.FORWARD:預設值,正向讀取資料。

  • TableStore.Direction.BACKWARD:反向讀取資料。

maxVersions(可選)

number

最大版本數,預設值為1。

  • 如果符合查詢條件的資料版本數量超過設定的最大版本數,按從新到舊的順序返回指定版本數量的資料。

timeRange(可選)

object

資料版本範圍。

  • Table Store資料表的每個屬性列可以有不同的資料版本,設定版本範圍後,僅返回版本範圍內的資料。

limit(可選)

number

單次返回最大行數,必須大於 0。如果符合查詢條件的資料行數大於設定的值,將返回指定的最大行數和用於下一次查詢的起始主索引值。

columnsToGet(可選)

Array

指定讀取的資料列,可以是主鍵列或屬性列。

  • 不設定columnsToGet時,返回整行資料。

  • 設定columnsToGet時,如果讀取的行資料不包含任何指定的資料列,將返回 null。

columnFilter(可選)

TableStore.ColumnCondition

過濾條件,詳情請參見過濾器

  • 如果同時設定columnsToGet和columnFilter,先按columnsToGet篩選合格資料行,再按columnFilter條件過濾資料。

transactionId(可選)

string

局部事務ID,用於唯一標識局部事務,詳情請參見局部事務

範例程式碼

以下範例程式碼用於讀取 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

相關文檔

批量讀取資料