ApacheIcebergonGCSatomicrename
创始人
2024-09-06 00:30:47
0

Apache Iceberg 是一个通用的数据表格式,可在不同的存储后端(如 Hadoop HDFS,Amazon S3 和 Google Cloud Storage)上运行。在使用 GCS 进行数据迁移时,需要使用原子重命名操作来确保数据的一致性和持久性。以下是使用 Java 代码实现 Apache Iceberg 在 GCS 上的原子重命名操作的示例:

import com.google.cloud.storage.BlobInfo;
import com.google.cloud.storage.Storage;
import com.google.cloud.storage.StorageOptions;
import org.apache.iceberg.common.DynMethods;
import org.apache.iceberg.util.Tasks;

import java.util.UUID;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.stream.Collectors;
import java.util.stream.Stream;

public class GcsAtomicRename implements Callable {

  private static final int MAX_RETRIES = 8;
  private static final int INITIAL_BACKOFF_MS = 100;

  private final String container;
  private final String containerPath;
  private final String srcPath;
  private final String dstPath;

  public GcsAtomicRename(String container, String containerPath, String srcPath, String dstPath) {
    this.container = container;
    this.containerPath = containerPath;
    this.srcPath = srcPath;
    this.dstPath = dstPath;
  }

  @Override
  public Void call() throws Exception {
    Storage storage = StorageOptions.getDefaultInstance().getService();
    String randomId = UUID.randomUUID().toString();

    BlobInfo srcBlob = BlobInfo.newBuilder(container, containerPath + "/" + srcPath).build();
    BlobInfo dstBlob = BlobInfo.newBuilder(container, containerPath + "/." + randomId + "._" + dstPath).build();

    boolean copied;

    do {
      copied = storage.copy(srcBlob, dstBlob).getContent() != null;
    } while (!copied);

    Tasks.foreach(Stream.generate(() -> null)
        .limit(MAX_RETRIES)
        .collect(Collectors.toList()))
        .retry(MAX_RETRIES)
        .exponentialBackoff(INITIAL_BACKOFF_MS, 2.0)
        .onlyRetryOn(ExecutionException.class)
        .run(ignore -> {
          storage.delete(srcBlob.getBlobId

相关内容

热门资讯

一分钟了解(wopoker)外... 一分钟了解(wopoker)外挂透明挂辅助软件(软件透明挂)一般真的有挂(2023已更新)(小红书)...
推荐十款(wepoke)外挂透... 推荐十款(wepoke)外挂透明挂辅助安装(智能ai代打)的确是有挂的(2020已更新)(百度)1、...
科普(WepokE)外挂透明挂... 科普(WepokE)外挂透明挂辅助插件(透视辅助)的确是有挂的(2025已更新)(头条)1、起透看视...
最新研发(wpK)外挂透明挂辅... 最新研发(wpK)外挂透明挂辅助工具(透视)就是真的有挂(2022已更新)(小红书)1、系统规律教程...
重大推荐(云扑克app)外挂透... 重大推荐(云扑克app)外挂透明挂辅助脚本(软件透明挂)总是真的有挂(2020已更新)(百度)辅助器...
必备科技(poker worl... 必备科技(poker world)外挂透明挂辅助器(透视辅助)都是真的有挂(2024已更新)(微博热...
重大推荐(we辅助poker)... 重大推荐(we辅助poker)外挂透明挂辅助脚本(透视辅助)一贯真的有挂(2023已更新)(百度)w...
一分钟了解(来玩德州)外挂透明... 一分钟了解(来玩德州)外挂透明挂辅助插件(透视辅助)原来真的有挂(2025已更新)(微博热搜)1、一...
一分钟了解(轰趴大菠萝)外挂透... 一分钟了解(轰趴大菠萝)外挂透明挂辅助安装(辅助挂)原来真的有挂(2022已更新)(知乎)1、每一步...
玩家必用(AAPOKEr)外挂... 玩家必用(AAPOKEr)外挂透明挂辅助工具(智能ai代打)果然真的有挂(2021已更新)(今日头条...