数据处理中的精确一次处理与流表理论详解
1. BigQuery 去重插入实现
在向 BigQuery 插入数据时,可能会出现相同 ID 的重复插入情况。为解决此问题,BigQuery 接收器需要为每条记录生成统计上唯一的 ID,它借助 java.util.UUID 包生成 128 位的唯一 ID。
不过,生成随机通用唯一标识符(UUID)是一个非确定性操作,所以在插入 BigQuery 之前,必须添加 Reshuffle 操作。这样,Dataflow 的任何重试操作都会使用经过洗牌的相同 UUID。重复插入 BigQuery 的尝试会始终具有相同的插入 ID,因此 BigQuery 能够对其进行过滤。
以下是 BigQuery 接收器实现的伪代码:
// Apply a unique identifier to each record
c
.apply(new DoFn<> {
@ProcessElement
public void processElement(ProcessContext context) {
String uniqueId = UUID.randomUUID().toString();
context.output(KV.of(ThreadLocalRandom.current().nextInt(0, 50),
new RecordWithId(context.element(),
uniqueId)));
}
超级会员免费看
订阅专栏 解锁全文

被折叠的 条评论
为什么被折叠?



