Bigquery:检查流期间的重复项

Posted

技术标签:

【中文标题】Bigquery:检查流期间的重复项【英文标题】:Bigquery: Check for duplications during stream 【发布时间】:2014-09-10 17:06:37 【问题描述】:

我们从安装在客户端的设备生成了一些数据。重复数据存在并且是设计使然,这意味着我们无法在数据生成阶段消除重复数据。我们现在正在研究在流式传输到 Bigquery 时避免重复的可能性(而不是通过稍后执行表复制和删除来清理数据)。也就是说,对于每一条准备流式传输的记录,我们首先检查它是否已经在 Bigquery 中,如果没有,则继续流式传输,如果存在,则不再流式传输。

但这里有一个问题:(引自 [这里]:https://developers.google.com/bigquery/streaming-data-into-bigquery)

数据可用性

第一次进行流式插入时,流式数据在长达两分钟的预热时间内无法访问。在预热期之后,在预热期期间和之后添加的所有流数据都可以立即查询。几个小时不活动后,在下一次插入期间将再次进行预热。

数据最多可能需要 90 分钟才能用于复制和导出操作。

我们的数据将进入不同的 bigquery 表(表名是根据数据的 date_time 动态生成的)。 “第一次发生流插入”是什么意思?是每桌吗?

上面的文档是否意味着我们不能依赖查询结果来检查流过程中的重复?

【问题讨论】:

让 BQ 中的重复项并编写您的其他查询以获取最新版本的重复项并不容易。第二个问题,基于它们的重复项?共享列架构和用例。 【参考方案1】:

如果您提供插入 ID,只要重复项在重复数据删除窗口内,bigquery 就会自动为您执行重复数据删除。官方文档并没有提到去重窗口有多长,但一般是5分钟到90分钟(如果你把数据写入一个表的速度非常快,它会接近5而不是90,但如果数据是滴入,它将在重复数据删除缓冲区中持续更长时间。)。

关于“第一次发生流式插入”,这是针对每个表的。如果您有一个新表并开始向其流式传输,则该数据可能需要几分钟才能用于查询。但是,一旦您开始流式传输,新数据将立即可用。

【讨论】:

以上是关于Bigquery:检查流期间的重复项的主要内容,如果未能解决你的问题,请参考以下文章

BigQuery - 从数组中删除重复项

从 BigQuery 中的数组中删除重复项

处理 BigQuery(嵌套表)中的重复项

BigQuery 标准 SQL:从表中删除重复项

BigQuery 取消嵌套数组 - 获取重复项

Bigquery 分区表中的重复项