批量读取数据

更新时间:
复制 MD 格式

Go SDK 可一次读取一个或多个宽表模型数据表中的多行数据。

前提条件

安装Tablestore Go SDK并初始化客户端。

功能说明

调用 BatchGetRow 根据完整主键批量读取多行数据。单次调用最多读取 100 行,并支持同时读取多个数据表。各行操作独立执行,需逐行检查返回结果。

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

以下示例读取 example_table 中主键值为 row1row2 的两行数据。

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[] 的类型为 MultiRowQueryCriteria,包含以下参数。

名称

类型

说明

TableName(必选)

string

数据表名称。

PrimaryKey(必选)

[]*PrimaryKey

要读取的完整行主键列表。主键值支持 STRINGINTEGERBINARY 类型;每个主键的列数、顺序和类型必须与数据表的主键结构一致。

MaxVersion(可选)

int

每个属性列最多返回的版本数。MaxVersionTimeRange 至少设置一个。

符合查询条件的数据版本数超过该值时,按从新到旧的顺序返回指定数量的版本。

TimeRange(可选)

*TimeRange

版本时间范围,包括起始时间、结束时间或指定版本,单位为毫秒。MaxVersionTimeRange 至少设置一个。

每个属性列可以具有不同的数据版本。设置后,仅返回指定版本时间范围内的数据。

ColumnsToGet(可选)

[]string

要返回的主键列或属性列名称。未设置时返回整行数据。

如果行数据不包含任何指定列,则对应的 RowResult 为成功,但不包含主键和属性列。

Filter(可选)

ColumnFilter

属性列过滤器。更多信息,请参见过滤器

同时设置 ColumnsToGetFilter 时,先按 ColumnsToGet 选择列,再使用 Filter 对选择后的列进行过滤。如果过滤条件引用的属性列不在 ColumnsToGet 中,则按该列不存在处理,是否过滤该行由 FilterIfMissing 决定。

StartColumn(可选)

*string

属性列名称范围的起始列,结果包含该列。

EndColumn(可选)

*string

属性列名称范围的结束列,结果不包含该列。

返回值

BatchGetRowResponse 包含以下业务信息。

字段

类型

说明

TableToRowsResult

map[string][]RowResult

按数据表名称组织的逐行结果。每个 RowResult 包含成功状态、错误信息、主键、属性列和原请求中的行序号。

场景示例

同时读取多张表

以下示例在一次请求中读取两张数据表。每张表需要分别创建一个 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,
}