Go SDK 可一次读取一个或多个宽表模型数据表中的多行数据。
前提条件
安装Tablestore Go SDK并初始化客户端。
功能说明
调用 BatchGetRow 根据完整主键批量读取多行数据。单次调用最多读取 100 行,并支持同时读取多个数据表。各行操作独立执行,需逐行检查返回结果。
func (tableStoreClient *TableStoreClient) BatchGetRow(request *BatchGetRowRequest) (*BatchGetRowResponse, error)
以下示例读取 example_table 中主键值为 row1 和 row2 的两行数据。
row1 := &tablestore.PrimaryKey{}
row1.AddPrimaryKeyColumn("id", "row1")
row2 := &tablestore.PrimaryKey{}
row2.AddPrimaryKeyColumn("id", "row2")
criteria := &tablestore.MultiRowQueryCriteria{
TableName: "example_table",
MaxVersion: 1,
}
criteria.AddRow(row1)
criteria.AddRow(row2)
request := &tablestore.BatchGetRowRequest{
MultiRowQueryCriteria: []*tablestore.MultiRowQueryCriteria{criteria},
}
response, err := client.BatchGetRow(request)
if err != nil {
log.Fatal(err)
}
for _, row := range response.TableToRowsResult["example_table"] {
fmt.Println(row.IsSucceed, row.PrimaryKey, row.Columns, row.Error)
}
参数说明
BatchGetRowRequest 包含以下参数。
|
名称 |
类型 |
说明 |
|
MultiRowQueryCriteria(必选) |
|
各数据表的批量读取条件。读取多个数据表时,每个表配置一个元素。 |
批量读取条件
MultiRowQueryCriteria[] 的类型为 MultiRowQueryCriteria,包含以下参数。
|
名称 |
类型 |
说明 |
|
TableName(必选) |
|
数据表名称。 |
|
PrimaryKey(必选) |
|
要读取的完整行主键列表。主键值支持 |
|
MaxVersion(可选) |
|
每个属性列最多返回的版本数。 符合查询条件的数据版本数超过该值时,按从新到旧的顺序返回指定数量的版本。 |
|
TimeRange(可选) |
|
版本时间范围,包括起始时间、结束时间或指定版本,单位为毫秒。 每个属性列可以具有不同的数据版本。设置后,仅返回指定版本时间范围内的数据。 |
|
ColumnsToGet(可选) |
|
要返回的主键列或属性列名称。未设置时返回整行数据。 如果行数据不包含任何指定列,则对应的 |
|
Filter(可选) |
|
属性列过滤器。更多信息,请参见过滤器。 同时设置 |
|
StartColumn(可选) |
|
属性列名称范围的起始列,结果包含该列。 |
|
EndColumn(可选) |
|
属性列名称范围的结束列,结果不包含该列。 |
返回值
BatchGetRowResponse 包含以下业务信息。
|
字段 |
类型 |
说明 |
|
|
|
按数据表名称组织的逐行结果。每个 |
场景示例
同时读取多张表
以下示例在一次请求中读取两张数据表。每张表需要分别创建一个 MultiRowQueryCriteria。
primaryKey1 := &tablestore.PrimaryKey{}
primaryKey1.AddPrimaryKeyColumn("id", "row1")
criteria1 := &tablestore.MultiRowQueryCriteria{TableName: "example_table", MaxVersion: 1}
criteria1.AddRow(primaryKey1)
primaryKey2 := &tablestore.PrimaryKey{}
primaryKey2.AddPrimaryKeyColumn("id", "row2")
criteria2 := &tablestore.MultiRowQueryCriteria{TableName: "example_table_2", MaxVersion: 1}
criteria2.AddRow(primaryKey2)
request := &tablestore.BatchGetRowRequest{
MultiRowQueryCriteria: []*tablestore.MultiRowQueryCriteria{criteria1, criteria2},
}
response, err := client.BatchGetRow(request)
if err != nil {
log.Fatal(err)
}
for tableName, rows := range response.TableToRowsResult {
for _, row := range rows {
fmt.Println(tableName, row.IsSucceed, row.PrimaryKey, row.Columns, row.Error)
}
}
读取指定时间范围内的数据版本
以下示例读取指定时间范围内的数据版本。时间范围为左闭右开区间。
endTime := time.Now().UnixMilli()
startTime := endTime - int64(time.Hour/time.Millisecond)
criteria.MaxVersion = 0
criteria.TimeRange = &tablestore.TimeRange{
Start: startTime,
End: endTime,
}