全部产品
Search
文档中心

表格存储:批量读取数据

更新时间:Mar 31, 2026

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

注意事项

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

前提条件

初始化Tablestore Client

方法说明

func (tableStoreClient *TableStoreClient) BatchGetRow(request *BatchGetRowRequest) (*BatchGetRowResponse, error)

BatchGetRowRequest参数说明

  • MultiRowQueryCriteria(必选)[]*MultiRowQueryCriteria:批量读取数据信息,包含以下参数。

    名称

    类型

    说明

    TableName(必选)

    string

    数据表名称。

    PrimaryKey(必选)

    []*PrimaryKey

    主键列表。

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

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

    MaxVersion(可选)

    int

    最大版本数。

    • 必须设置最大版本数和版本范围的其中一个。

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

    TimeRange(可选)

    *TimeRange

    数据版本范围。

    • 必须设置最大版本数和版本范围的其中一个。

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

    ColumnsToGet(可选)

    []string

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

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

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

    Filter(可选)

    ColumnFilter

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

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

示例代码

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

func BatchGetRowSample(client *tablestore.TableStoreClient) {
    // 构造查询条件
    multiRowQueryCriteria := new(tablestore.MultiRowQueryCriteria)
    // 设置表名称
    multiRowQueryCriteria.TableName = "test_table"
    // 添加第 1 行主键信息
    getPk1 := new(tablestore.PrimaryKey)
    getPk1.AddPrimaryKeyColumn("id", "row1")
    multiRowQueryCriteria.AddRow(getPk1)
    // 添加第 2 行主键信息
    getPk2 := new(tablestore.PrimaryKey)
    getPk2.AddPrimaryKeyColumn("id", "row2")
    multiRowQueryCriteria.AddRow(getPk2)
    // 设置查询版本
    multiRowQueryCriteria.MaxVersion = 1

    // 调用 BatchGetRow 方法进行批量数据查询
    batchGetRowRequest := new(tablestore.BatchGetRowRequest)
    batchGetRowRequest.MultiRowQueryCriteria = append(batchGetRowRequest.MultiRowQueryCriteria, multiRowQueryCriteria)
    batchGetRowResponse, err := client.BatchGetRow(batchGetRowRequest)

    // 返回结果处理
    if err != nil {
        fmt.Println("Batch get row failed with error: ", err)
    } else {
        fmt.Printf("* RequestId: %s \n", batchGetRowResponse.RequestId)
        for tableName, rows := range batchGetRowResponse.TableToRowsResult {
            fmt.Printf("* Table: %s \n", tableName)
            for _, row := range rows {
                if row.IsSucceed {
                    fmt.Printf("Succeeded Row: %v \n", row)
                } else {
                    fmt.Printf("Failed Row: %d | %v \n", row.Index, row.Error)
                }
            }
        }
    }
}

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

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

    // 构造第 2 个表的查询条件
    multiRowQueryCriteria1 := new(tablestore.MultiRowQueryCriteria)
    multiRowQueryCriteria1.TableName = "orders_small"
    // 添加第 1 行主键信息
    getPk3 := new(tablestore.PrimaryKey)
    getPk3.AddPrimaryKeyColumn("order_id", "90fb478c-1360-11f0-a34d-00163e30a2a9")
    multiRowQueryCriteria1.AddRow(getPk3)
    // 设置查询版本
    multiRowQueryCriteria1.MaxVersion = 1
    // Request 添加 MultiRowQueryCriteria
    batchGetRowRequest.MultiRowQueryCriteria = append(batchGetRowRequest.MultiRowQueryCriteria, multiRowQueryCriteria1)
  • 设置读取的数据版本范围,结果只返回版本范围内的数据。

    // 设置查询的数据版本范围为当前时间往前一天
    timeRange := new(tablestore.TimeRange)
    timeRange.Start = int64(time.Now().Unix() * 1000 - 86400 * 1000) 
    timeRange.End = int64(time.Now().Unix() * 1000) 
    multiRowQueryCriteria.TimeRange = timeRange
  • 指定读取的属性列。

    multiRowQueryCriteria.AddColumnToGet("col1")

相关文档

范围读取数据