温馨提示:本文翻译自stackoverflow.com,查看原文请点击:其他 - BigQuery Stream and Delete while streaming buffer is not empty?
google-bigquery streaming

其他 - 当流缓冲区不为空时,BigQuery流和删除吗?

发布于 2020-04-09 11:02:15

BigQuery不会直接将其流式传输到其长期存储中,而是先将其放入经过写优化的存储中,然后定期将其刷新到主存储中。

在以下使用案例中,我想更好地了解BigQuery Streaming缓冲区。

1)如果某些记录仍留在流式缓冲区中等待被刷新到主存储器中时,如果我删除bigquery表并立即重新创建具有相同名称的新bigquery表,该怎么办?

例如,如果我要将一百万条记录流式传输到BigQuery中。现在,某些记录仍留在流式缓冲区中,等待刷新到BigQuery的主存储中。

目前,我删除BigQuery表并使用相同的名称重新创建BigQuery表,流缓冲区中的其余记录是否仍会刷新到新创建的表中?否则流缓冲区中的剩余记录将被丢弃?

我的猜测是流缓冲区中的剩余记录将被删除吗?我的猜测是,即使删除表并重新创建具有相同名称的表,旧表和新表的“对象ID”也应该不同。

我对么?

2)如果我运行删除查询想删除一些我之前流过的记录怎么办?

与上面相同,如果我流式传输100万条记录,其中一些仍保留在流式缓冲区中,这时,我发出delete sql,它应该删除我刚刚流式传输的某些记录。

但是,如果我要删除的记录仍在流式缓冲区中,并且在我发送delete sql命令时等待刷新到主存储中,那么我的delete sql将无法删除它们(它们还不在BigQuery主存储中),然后,这些记录将被刷新到主存储中。这意味着我的删除SQL将无法删除这些记录。

我对么?如果我是正确的,那么为了使删除sql正常工作,我必须在发出delete sql之前确定流缓冲区是否为空?这会使事情变得更复杂。

谢谢!

查看更多

提问者
searain
被浏览
120
Y Y 2018-01-20 02:30

1)正确。“对象ID”不同,剩余的记录将被删除。

2)种类正确。DML语句无法修改仍在流缓冲区中的数据。但是,如果该语句尝试触摸仍在流缓冲区中的行,则该语句将失败。