我们的数据仓库团队正在评估BigQuery作为数据仓库列存储的解决方案,并对其功能和最佳使用方式提出了一些问题。我们现有的ETL管道通过队列异步消耗事件,并将事件幂等地保留到现有的数据库技术中。幂等架构允许我们偶尔重新播放几个小时或几天的事件,以纠正错误和数据故障,而不会产生重复的风险。
在测试BigQuery时,我们尝试使用实时流插入API并使用唯一键作为insertId。这为我们提供了一种短时间内进行upsert功能的选项,但稍后重新流式传输数据会导致重复。因此,我们需要一种优雅的选项来实现近乎实时的去重,以避免数据差异。
我们有一些问题,并希望得到任何问题的答案。欢迎提供关于在ETL架构中使用BigQuery的任何其他建议。
以下是需要回答的问题:
在测试BigQuery时,我们尝试使用实时流插入API并使用唯一键作为insertId。这为我们提供了一种短时间内进行upsert功能的选项,但稍后重新流式传输数据会导致重复。因此,我们需要一种优雅的选项来实现近乎实时的去重,以避免数据差异。
我们有一些问题,并希望得到任何问题的答案。欢迎提供关于在ETL架构中使用BigQuery的任何其他建议。
以下是需要回答的问题:
- 除了使用tableId之外,是否有常见的实时流去重实现方式?
- 如果我们尝试使用delsert(通过使用BigQuery API中的删除后跟插入来进行删除),删除是否总是先于插入完成,还是操作异步到达?
- 是否可能将实时流式处理实现到暂存环境中,然后定期合并到目标表中?这是其他列存储ETL技术的常见解决方案,但我们没有看到任何文档建议在BigQuery中使用它。