BigQuery不会直接流到他们的长期存储中,他们首先将其放入一个写优化的存储中,并定期将其刷新到主存储中。
在下面的用例中,我想更好地理解BigQuery流缓冲区。
1)如果我删除bigquery表,并立即以相同的名称重新创建一个新的bigquery表,此时某些记录仍然保存在流缓冲区中,等待被刷新到主存储中?
例如,如果我将一百万条记录流到BigQuery中。有些记录现在仍然保存在流缓冲区中,等待被刷新到BigQuery的主存储区。
此时,我删除BigQuery表并以相同的名称重新创建BigQuery表,是否仍会将流缓冲区中的剩余记录刷新到新的重新创建的表中?还是流缓冲区中的剩余记录将被删除?
我猜,流缓冲区中的剩余记录会被删除吗?我的猜测是,即使删除该表并重新创建同名的表,旧表和新表的"object id“也应该不同。
我说的对吗?
2)如果我运行delete查询,试图删除刚才流过的一些记录,该怎么办?
和上面一样,如果我流了100万条记录,其中一些仍然保存在流缓冲区中,此时,我发布了一个delete sql,它应该删除我刚刚流过的一些记录。
但是,当我发送delete sql命令时,如果我要删除的记录仍然在流缓冲区中等待被刷新到主存储中,那么我的delete sql将无法删除它们(它们还没有在BigQuery主存储中),然后这些记录将被刷新到主存储中。这意味着我的delete sql将无法删除这些记录。
我说的对吗?如果我是正确的,那么我的删除sql工作,我必须找出流缓冲区是否是空的,然后我发出删除sql?这会使事情变得更复杂。
谢谢!
发布于 2018-01-19 18:30:32
1)正确。"object id“是不同的,其余的记录将被删除。
2)正确的种类。DML语句不能修改仍在流缓冲区中的数据。但是,如果该语句试图触摸仍在流缓冲区中的行,则该语句将失败。
发布于 2020-01-31 20:43:56
我的经验。
如果您不必使用“流到BigQuery",那么就不要使用它。
现在,大多数情况下,我会将数据保存在中,然后将数据从传输到BigQuery。
例如,在旧情况下,我从MySQL获取数据,然后流到BigQuery中。现在我会
这解决了我以前使用“流到BigQuery”时遇到的许多问题。
https://stackoverflow.com/questions/48331407
复制相似问题