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,
}