全部产品
表格存储

多行数据操作

更新时间:2017-09-08 16:14:47   分享:   

表格存储的 SDK 提供了 BatchGetRow、BatchWriteRow、GetRange 和 GetByIterator 等多行操作的接口。

批量读(BatchGetRow)

批量读取一个或多个表中的若干行数据。

BatchGetRow 操作可视为多个 GetRow 操作的集合,各个操作独立执行,独立返回结果,独立计算服务能力单元。

与执行大量的 GetRow 操作相比,使用 BatchGetRow 操作可以有效减少请求的响应时间,提高数据的读取速率。

接口

  1. //返回表(Table)中的多行数据。
  2. //
  3. // @param BatchGetRowRequest 执行BatchGetRow操作所需参数的封装。
  4. // @return BatchGetRowResponse BatchGetRow操作的响应内容。
  5. BatchGetRow(request *BatchGetRowRequest) (*BatchGetRowResponse, error)

示例

批量一次读 10 行。

  1. batchGetReq := &tablestore.BatchGetRowRequest{}
  2. mqCriteria := &tablestore.MultiRowQueryCriteria{}
  3. for i := 0; i < 10; i++ {
  4. pkToGet := new(tablestore.PrimaryKey)
  5. pkToGet.AddPrimaryKeyColumn("pk1", "pk1value1")
  6. pkToGet.AddPrimaryKeyColumn("pk2", int64(i))
  7. pkToGet.AddPrimaryKeyColumn("pk3", []byte("pk3"))
  8. mqCriteria.AddRow(pkToGet)
  9. mqCriteria.MaxVersion = 1
  10. }
  11. mqCriteria.TableName = tableName
  12. batchGetReq.MultiRowQueryCriteria = append(batchGetReq.MultiRowQueryCriteria, mqCriteria)
  13. batchGetResponse, err := client.BatchGetRow(batchGetReq)
  14. if err != nil {
  15. fmt.Println("batachget failed with error:", err)
  16. } else {
  17. fmt.Println("batchget finished")
  18. }

说明:

  • 批量读也支持通过条件语句过滤。
  • 详细代码可在 BatchGetRow@GitHub 获取。

批量写(BatchWriteRow)

批量插入、修改或删除一个或多个表中的若干行数据。

BatchWriteRow 操作可视为多个 PutRow、UpdateRow、DeleteRow 操作的集合,各个操作独立执行,独立返回结果,独立计算服务能力单元。

接口

  1. // 对多张表(Table)中的多行数据进行增加、删除或者更改操作。
  2. //
  3. // @param BatchWriteRowRequest 执行BatchWriteRow操作所需参数的封装。
  4. // @return BatchWriteRowResponse BatchWriteRow操作的响应内容。
  5. BatchWriteRow(request *BatchWriteRowRequest) (*BatchWriteRowResponse,error)

示例

批量写入100行数据。

  1. batchWriteReq := &tablestore.BatchWriteRowRequest{}
  2. for i := 0; i < 100; i++ {
  3. putRowChange := new(tablestore.PutRowChange)
  4. putRowChange.TableName = tableName
  5. putPk := new(tablestore.PrimaryKey)
  6. putPk.AddPrimaryKeyColumn("pk1", "pk1value1")
  7. putPk.AddPrimaryKeyColumn("pk2", int64(i))
  8. putPk.AddPrimaryKeyColumn("pk3", []byte("pk3"))
  9. putRowChange.PrimaryKey = putPk
  10. putRowChange.AddColumn("col1", "fixvalue")
  11. putRowChange.SetCondition(tablestore.RowExistenceExpectation_IGNORE)
  12. batchWriteReq.AddRowChange(putRowChange)
  13. }
  14. response, err := client.BatchWriteRow(batchWriteReq)
  15. if err != nil {
  16. fmt.Println("batch request failed with:", response)
  17. } else {
  18. fmt.Println("batch write row finished")
  19. }

说明:

范围读(GetRange)

读取指定主键范围内的数据。

接口

  1. // 从表(Table)中查询一个范围内的多行数据。。
  2. //
  3. // @param GetRangeRequest 执行GetRange操作所需参数的封装。
  4. // @return GetRangeResponse GetRange操作的响应内容。
  5. GetRange(request *GetRangeRequest) (*GetRangeResponse,error)

示例

按照范围读取。

  1. getRangeRequest := &tablestore.GetRangeRequest{}
  2. rangeRowQueryCriteria := &tablestore.RangeRowQueryCriteria{}
  3. rangeRowQueryCriteria.TableName = tableName
  4. startPK := new(tablestore.PrimaryKey)
  5. startPK.AddPrimaryKeyColumnWithMinValue("pk1")
  6. startPK.AddPrimaryKeyColumnWithMinValue("pk2")
  7. startPK.AddPrimaryKeyColumnWithMinValue("pk3")
  8. endPK := new(tablestore.PrimaryKey)
  9. endPK.AddPrimaryKeyColumnWithMaxValue("pk1")
  10. endPK.AddPrimaryKeyColumnWithMaxValue("pk2")
  11. endPK.AddPrimaryKeyColumnWithMaxValue("pk3")
  12. rangeRowQueryCriteria.StartPrimaryKey = startPK
  13. rangeRowQueryCriteria.EndPrimaryKey = endPK
  14. rangeRowQueryCriteria.Direction = tablestore.FORWARD
  15. rangeRowQueryCriteria.MaxVersion = 1
  16. rangeRowQueryCriteria.Limit = 10
  17. getRangeRequest.RangeRowQueryCriteria = rangeRowQueryCriteria
  18. getRangeResp, err := client.GetRange(getRangeRequest)
  19. fmt.Println("get range result is " ,getRangeResp)
  20. for ; ; {
  21. if err != nil {
  22. fmt.Println("get range failed with error:", err)
  23. }
  24. if (len(getRangeResp.Rows) > 0) {
  25. for _, row := range getRangeResp.Rows {
  26. fmt.Println("range get row with key", row.PrimaryKey.PrimaryKeys[0].Value, row.PrimaryKey.PrimaryKeys[1].Value, row.PrimaryKey.PrimaryKeys[2].Value)
  27. }
  28. if getRangeResp.NextStartPrimaryKey == nil {
  29. break
  30. } else {
  31. fmt.Println("next pk is :", getRangeResp.NextStartPrimaryKey.PrimaryKeys[0].Value, getRangeResp.NextStartPrimaryKey.PrimaryKeys[1].Value, getRangeResp.NextStartPrimaryKey.PrimaryKeys[2].Value)
  32. getRangeRequest.RangeRowQueryCriteria.StartPrimaryKey = getRangeResp.NextStartPrimaryKey
  33. getRangeResp, err = client.GetRange(getRangeRequest)
  34. }
  35. } else {
  36. break
  37. }
  38. fmt.Println("continue to query rows")
  39. }
  40. fmt.Println("putrow finished")

说明:

  • 按范围读也支持通过条件语句过滤。
  • 按范围读需要注意数据可能会分页。
  • 详细代码可在 GetRange@GitHub 获取。
本文导读目录
本文导读目录
以上内容是否对您有帮助?