批量读取数据

更新时间:
复制为 MD 格式

本文介绍如何通过 Node.js SDK 批量读取表格存储中的数据,支持查询多个表的数据。

注意事项

单次批量读取操作最多支持读取 100 行数据。

前提条件

初始化Tablestore Client

方法说明

batchGetRow: function batchGetRow(params, callback)

params参数说明

  • tables(必选)Array:批量读取数据信息,包含以下参数。

    名称

    类型

    说明

    tableName(必选)

    string

    数据表名称。

    primaryKey(必选)

    Array

    主键信息,包括主键列名称和主键值。

    • 主键列数据类型包括 STRING、INTEGER 和 BINARY。

    • 主键个数和类型必须与数据表的主键保持一致。

    maxVersions(可选)

    number

    最大版本数,默认值为1。

    • 如果符合查询条件的数据版本数量超过设置的最大版本数,按从新到旧的顺序返回指定版本数量的数据。

    timeRange(可选)

    object

    数据版本范围。

    • 表格存储数据表的每个属性列可以有不同的数据版本,设置版本范围后,仅返回版本范围内的数据。

    columnsToGet(可选)

    Array

    指定读取的数据列,可以是主键列或属性列。

    • 不设置columnsToGet时,返回整行数据。

    • 设置columnsToGet时,如果读取的行数据不包含任何指定的数据列,将返回 null。

    columnFilter(可选)

    TableStore.ColumnCondition

    过滤条件,详情请参见过滤器

    • 如果同时设置columnsToGetcolumnFilter,先按columnsToGet筛选符合条件的数据行,再按columnFilter条件过滤数据。

示例代码

以下示例代码用于读取 test_table 表中主键值为 row1 和 row2 的两行数据。

var table = {
    // 设置表名称
    tableName: 'test_table',
    primaryKey: [
        // 添加第 1 行主键信息
        [{ 'id': 'row1' }],
        // 添加第 2 行主键信息
        [{ 'id': 'row2' }]
    ]
};
var params = {
    tables: [
        table
    ]
}

// 调用 batchGetRow 方法进行批量数据查询
client.batchGetRow(params, function (err, data) {
    if (err) {
        console.log('Batch get row failed with error: ', err);
        return;
    }

    // 返回结果处理
    console.log('* RequestId: ', data.RequestId);
    console.log('* Rows Data: ');
    data.tables.forEach(function (rows) {
        rows.forEach(function (row) {
            if (row.isOk) {
                console.log('Succeeded Row:', row.tableName, JSON.stringify(row.primaryKey), JSON.stringify(row.attributes));
            } else {
                console.log('Failed Row:', row.tableName, row.errorMessage);
            }
        });
    });
});

您可以在批量读取数据时参考以下示例代码进行参数设置。

  • 读取多张表的数据。批量读取支持一次读取多张表的数据,您需要为每张表指定查询条件。

    var table1 = {
        tableName: 'orders_small',
        primaryKey: [
            [{ 'order_id': '90fb478c-1360-11f0-a34d-00163e30a2a9' }]
        ]
    };
    
    var params = {
        tables: [
            table,
            table1
        ]
    };
  • 设置读取的数据版本范围,结果只返回版本范围内的数据。

    // 设置查询的数据版本范围为当前时间往前一天
    table.timeRange = {
        startTime: (Date.now() - 86400 * 1000).toString(),
        endTime: Date.now().toString()
    }
  • 指定读取的属性列。

    table.columnsToGet = ['col2']

相关文档

范围读取数据