删除不在 BigQuery 流式缓冲区中的行

Posted

技术标签:

【中文标题】删除不在 BigQuery 流式缓冲区中的行【英文标题】:Delete rows not in BigQuery streaming buffer 【发布时间】:2018-05-27 17:27:03 【问题描述】:

我需要从分区 BigQuery 表中删除与给定 WHERE 条件匹配的行。该表总是有一个流缓冲区,向它添加更多数据。我不关心从流式传输的内容中删除,只是昨天分区中的历史数据。

当 BigQuery 表上存在流式缓冲区时删除数据的正确策略是什么,最好不要停机?

【问题讨论】:

另请参阅@AlexeyMaloletkin 的另一个answer,以防您想从摄取时间分区表中完全删除旧分区。 @mark,找到解决方案了吗?我也需要删除不在流缓冲区中的旧重复行 【参考方案1】:

您可以使用数据操作语言DELETE 语句。但是请记住以下几点(来自 DML docs):

支持使用数据操作语言语句进行修改 分区表数据目前处于测试阶段。

但是您始终可以通过过滤掉要删除的记录并将结果写回同一分区来进行选择。 不会有停机时间。成本将与完整的单个分区扫描的成本相同。

【讨论】:

【参考方案2】:

从此页面Data Manipulation Language

“最近通过流(使用 tabledata.insertall 方法)写入表的行不能使用 UPDATE、DELETE 或 MERGE 语句修改。最近的写入通常是最近 30 分钟内发生的那些。请注意,所有表中的其他行仍然可以使用 UPDATE、DELETE 或 MERGE 语句进行修改。"

这意味着您应该使用时间限制 DML,理想情况下您应该创建日期列,以便您可以使用该列,或者如果有一个内置的元数据列可以使用但我不知道这样的列

【讨论】:

以上是关于删除不在 BigQuery 流式缓冲区中的行的主要内容,如果未能解决你的问题,请参考以下文章

流式缓冲区 - Google BigQuery

BigQuery:插入行,但不写

插入大查询表的行数少于预期

分区表中未分区的旧行

在 BigQuery 中流式传输数据

sed命令详解