全部产品
表格存储

多行数据操作

更新时间:2017-06-07 13:26:11   分享:   

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

批量读(BatchGetRow)

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

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

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

接口

  1. /// <summary>
  2. /// <para>批量读取一个或多个表中的若干行数据。</para>
  3. /// <para>BatchGetRow操作可视为多个GetRow操作的集合,各个操作独立执行,独立返回结果,独立计算服务能力单元。</para>
  4. /// 与执行大量的GetRow操作相比,使用BatchGetRow操作可以有效减少请求的响应时间,提高数据的读取速率。
  5. /// </summary>
  6. /// <param name="request">请求实例</param>
  7. /// <returns>响应实例</returns>
  8. public BatchGetRowResponse BatchGetRow(BatchGetRowRequest request);
  9. /// <summary>
  10. /// BatchGetRow的异步形式。
  11. /// </summary>
  12. public Task<BatchGetRowResponse> BatchGetRowAsync(BatchGetRowRequest request);

示例

批量一次读 10 行。

  1. // 构造批量读取请求的对象,设置10行的pk值
  2. List<PrimaryKey> primaryKeys = new List<PrimaryKey>();
  3. for (int i = 0; i < 10; i++)
  4. {
  5. PrimaryKey primaryKey = new PrimaryKey();
  6. primaryKey.Add("pk0", new ColumnValue(i));
  7. primaryKey.Add("pk1", new ColumnValue("abc"));
  8. primaryKeys.Add(primaryKey);
  9. }
  10. try
  11. {
  12. BatchGetRowRequest request = new BatchGetRowRequest();
  13. request.Add(TableName, primaryKeys);
  14. // 调用BatchGetRow,查询十行数据
  15. var response = otsClient.BatchGetRow(request);
  16. var tableRows = response.RowDataGroupByTable;
  17. var rows = tableRows[TableName];
  18. // 输入rows里的数据,这里省略,详见下面GitHub链接
  19. // 批量操作可能部分成功部分失败,需要为每行检查状态,详见下面GitHub链接
  20. }
  21. catch (Exception ex)
  22. {
  23. // 如果抛出异常,则说明执行失败,打印出错误信息
  24. Console.WriteLine("Batch get row failed, exception:{0}", ex.Message);
  25. }

提示:

批量写(BatchWriteRow)

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

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

接口

  1. /// <summary>
  2. /// <para>批量插入,修改或删除一个或多个表中的若干行数据。</para>
  3. /// <para>BatchWriteRow操作可视为多个PutRow、UpdateRow、DeleteRow操作的集合,各个操作独立执行,独立返回结果,独立计算服务能力单元。</para>
  4. /// <para>与执行大量的单行写操作相比,使用BatchWriteRow操作可以有效减少请求的响应时间,提高数据的写入速率。</para>
  5. /// </summary>
  6. /// <param name="request">请求实例</param>
  7. /// <returns>响应实例</returns>
  8. public BatchWriteRowResponse BatchWriteRow(BatchWriteRowRequest request);
  9. /// <summary>
  10. /// BatchWriteRow的异步形式。
  11. /// </summary>
  12. /// <param name="request"></param>
  13. /// <returns></returns>
  14. public Task<BatchWriteRowResponse> BatchWriteRowAsync(BatchWriteRowRequest request);

示例

批量导入 100 行数据。

  1. // 构造批量插入的请求对象,包括了这100行数据的pk
  2. var request = new BatchWriteRowRequest();
  3. var rowChanges = new RowChanges();
  4. for (int i = 0; i < 100; i++)
  5. {
  6. PrimaryKey primaryKey = new PrimaryKey();
  7. primaryKey.Add("pk0", new ColumnValue(i));
  8. primaryKey.Add("pk1", new ColumnValue("abc"));
  9. // 定义要写入改行的属性列
  10. UpdateOfAttribute attribute = new UpdateOfAttribute();
  11. attribute.AddAttributeColumnToPut("col0", new ColumnValue(0));
  12. attribute.AddAttributeColumnToPut("col1", new ColumnValue("a"));
  13. attribute.AddAttributeColumnToPut("col2", new ColumnValue(true));
  14. rowChanges.AddUpdate(new Condition(RowExistenceExpectation.IGNORE), primaryKey, attribute);
  15. }
  16. request.Add(TableName, rowChanges);
  17. try
  18. {
  19. // 调用BatchWriteRow接口
  20. var response = otsClient.BatchWriteRow(request);
  21. var tableRows = response.TableRespones;
  22. var rows = tableRows[TableName];
  23. // 批量操作可能部分成功部分失败,需要为每行检查状态,详见下面GitHub链接
  24. }
  25. catch (Exception ex)
  26. {
  27. // 如果抛出异常,则说明执行失败,打印出错误信息
  28. Console.WriteLine("Batch put row failed, exception:{0}", ex.Message);
  29. }

提示:

范围读(GetRange)

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

接口

  1. /// <summary>
  2. /// 根据范围条件获取多行数据。
  3. /// </summary>
  4. /// <param name="request">请求实例</param>
  5. /// <returns>响应实例</returns>
  6. public GetRangeResponse GetRange(GetRangeRequest request);
  7. /// <summary>
  8. /// GetRange的异步版本。
  9. /// </summary>
  10. /// <param name="request"></param>
  11. /// <returns></returns>
  12. public Task<GetRangeResponse> GetRangeAsync(GetRangeRequest request);

示例

范围读取。

  1. // 读取 (0, INF_MIN)到(100, INF_MAX)这个范围内的所有行
  2. var inclusiveStartPrimaryKey = new PrimaryKey();
  3. inclusiveStartPrimaryKey.Add("pk0", new ColumnValue(0));
  4. inclusiveStartPrimaryKey.Add("pk1", ColumnValue.INF_MIN);
  5. var exclusiveEndPrimaryKey = new PrimaryKey();
  6. exclusiveEndPrimaryKey.Add("pk0", new ColumnValue(100));
  7. exclusiveEndPrimaryKey.Add("pk1", ColumnValue.INF_MAX);
  8. try
  9. {
  10. // 构造范围查询请求对象
  11. var request = new GetRangeRequest(TableName, GetRangeDirection.Forward,
  12. inclusiveStartPrimaryKey, exclusiveEndPrimaryKey);
  13. var response = otsClient.GetRange(request);
  14. // 如果一次没有返回所有数据,则需要继续查询
  15. var rows = response.RowDataList;
  16. var nextStartPrimaryKey = response.NextPrimaryKey;
  17. while (nextStartPrimaryKey != null)
  18. {
  19. request = new GetRangeRequest(TableName, GetRangeDirection.Forward,
  20. nextStartPrimaryKey, exclusiveEndPrimaryKey);
  21. response = otsClient.GetRange(request);
  22. nextStartPrimaryKey = response.NextPrimaryKey;
  23. foreach (RowDataFromGetRange row in response.RowDataList)
  24. {
  25. rows.Add(row);
  26. }
  27. }
  28. // 输出Rows的数据,这里省略,详见下面GitHub链接
  29. // 如果没有抛出异常,则说明执行成功
  30. Console.WriteLine("Get range succeeded");
  31. }
  32. catch (Exception ex)
  33. {
  34. // 如果抛出异常,则说明执行失败,打印出错误信息
  35. Console.WriteLine("Get range failed, exception:{0}", ex.Message);
  36. }

提示:

  • 按范围读也支持通过条件语句过滤。

  • 详细代码:GetRange@GitHub

迭代读(GetRangeIterator)

获取一个范围查询的迭代器。

接口

  1. /// <summary>
  2. /// 根据范围条件获取多行数据,返回用来迭代每一行数据的迭代器。
  3. /// </summary>
  4. /// <param name="request"><see cref="GetIteratorRequest"/></param>
  5. /// <returns>返回<see cref="RowDataFromGetRange"/>的迭代器。</returns>
  6. public IEnumerable<RowDataFromGetRange> GetRangeIterator(GetIteratorRequest request);

示例

迭代读取。

  1. // 读取 (0, "a")到(1000, "xyz")这个范围内的所有行
  2. PrimaryKey inclusiveStartPrimaryKey = new PrimaryKey();
  3. inclusiveStartPrimaryKey.Add("pk0", new ColumnValue(0));
  4. inclusiveStartPrimaryKey.Add("pk1", new ColumnValue("a"));
  5. PrimaryKey exclusiveEndPrimaryKey = new PrimaryKey();
  6. exclusiveEndPrimaryKey.Add("pk0", new ColumnValue(1000));
  7. exclusiveEndPrimaryKey.Add("pk1", new ColumnValue("xyz"));
  8. // 构造一个CapacityUnit,用于记录迭代过程中消耗的CU值
  9. var cu = new CapacityUnit(0, 0);
  10. try
  11. {
  12. // 构造一个GetIteratorRequest,这里也支持过滤条件
  13. var request = new GetIteratorRequest(TableName, GetRangeDirection.Forward, inclusiveStartPrimaryKey,
  14. exclusiveEndPrimaryKey, cu);
  15. var iterator = otsClient.GetRangeIterator(request);
  16. // 遍历迭代器,读取数据
  17. foreach (var row in iterator)
  18. {
  19. // 处理逻辑
  20. }
  21. Console.WriteLine("Iterate row succeeded");
  22. }
  23. catch (Exception ex)
  24. {
  25. Console.WriteLine("Iterate row failed, exception:{0}", ex.Message);
  26. }

提示:

本文导读目录
本文导读目录
以上内容是否对您有帮助?