本文介绍如何通过 Go SDK 批量读取表格存储中的数据,支持查询多个表的数据。
注意事项
单次批量读取操作最多支持读取 100 行数据。
前提条件
方法说明
func (tableStoreClient *TableStoreClient) BatchGetRow(request *BatchGetRowRequest) (*BatchGetRowResponse, error)示例代码
以下示例代码用于读取 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")