返回介绍

1.5.7 允许部分执行的批量操作

发布于 2020-10-01 15:06:22 字数 4195 浏览 887 评论 0 收藏 0

BatchResult partialAllowedBatch(BatchRequest request)

功能

一般的batch请求,当表quota不足时会全部拒绝;而partialAllowedBatch允许在quota满足的范围内,部分记录可以执行, 通过返回值告知用户哪些记录执行成功,哪些记录没有执行, 若当前quota不满足甚至1条记录执行,会抛出THROUGHPUT_EXCEED异常; 用户需要检查返回值,把没有执行的记录循环地发请求,直到所有记录都成功执行为止。

方法参数

request : BatchRequest : required

BatchRequest 包括一个可以为PutRequest, RemoveRequest, GetRequest, IncrementRequest的列表

1.items : List< BatchRequestItem > : required

BatchRequestItem包括BatchOp和Request

枚举类型BatchOp(PUT, GET, REMOVE, INCREMENT)指定该request的操作类型,

相应的,使用putRequest,getRequest, removeRequest,incrementRequest构造Request参数

方法返回值

batchResult : BatchResult

BatchResult 包括一个带有BatchResultItem的列表,表示batch的每个请求的执行结果

items : List< BatchResultItem >

返回每个子操作的结果,其中isSuccess==true表示已经执行,isSuccess==false表示没有执行

限制

每个子操作必须是同一个表的

put,remove请求不支持带条件

batch操作的子操作数范围为[ 1, 100 ]

示例

下面示例代码

List<BatchRequestItem> batch = new ArrayList<BatchRequestItem>();
  for (int i = 11; i < 20; i++) {
    BatchRequestItem item = new BatchRequestItem().setAction(BatchOp.PUT);
    Map<String, Datum> record = new HashMap<String, Datum>();
    record.put("cityId", DatumUtil.toDatum(cities[i]));
    putRequest.putToRecord("timestamp", DatumUtil.toDatum(now.getTime()));
    putRequest.putToRecord("score", DatumUtil.toDatum((double) new Random().nextInt(100)));
    putRequest.putToRecord("pm25", DatumUtil.toDatum((long) (new Random().nextInt(500))));
    item.setRequest(Request.putRequest(new PutRequest().setTableName(tableName).setRecord(record)));
    batch.add(item);
  }

  while (true) {
    BatchResult br = tableClient.partialAllowedBatch(new BatchRequest().setItems(batch));
    List<BatchRequestItem> request = new ArrayList<BatchRequestItem>();
    for (int i = 0; i < br.getItems().size(); i++) {
    //At current only quota exceeded will get  isSuccess() == false
      if (!br.getItems().get(i).isSuccess()) {
        request.add(batch.get(i));
      }
    }
    if (request.isEmpty()) {
      break;
    }
    Thread.sleep(100); // wait a while to retry.
    batch = request;
  }

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文