BigQuery使用流插入API最终保证一致性

时间:2018-12-14 13:39:43

标签: google-bigquery consistency eventual-consistency

我想使用BigQuery streaming insert API将行插入到BigQuery表中。在我的用例中,这是将要执行的唯一一类“写”操作。我将永远不会通过任何其他方式插入行,也永远不会更新或删除行。

读取Life of a BigQuery streaming insert后,我的理解是,即使在insertAll请求被确认之后,后续的读取操作也可能无法“看到”它成功插入的所有行,直到它们已从流缓冲区转移到托管存储中。

假设我的理解是正确的(请告诉我,如果不正确!):

  1. 有什么方法可以判断给定insertAll请求插入的所有行何时已提交到托管存储?
  2. 即使已将行提交到托管存储之后,是否保证随后的读取操作看到它们还是失败?

我为什么要问这些问题?我的表模式将包括“键”列,该列是严格单调增加的标识符。所有读取操作将被约束到其键不超过某些指定值的行。我需要保证这种形式的读取操作将始终返回相同的结果,假设指定的键对应于已插入的行。显然,此类查询不可能返回随后插入的行(因为它们的键将大于指定的键)。但是,如果有任何已插入 的行但仍在流缓冲区中,则查询可能不会返回它们,而是稍后(在提交这些行之后)执行的查询完全相同。 em>将退还给他们。在我的用例中,这将是一场灾难。

1 个答案:

答案 0 :(得分:0)

有两种状态。

在流缓冲区中并已提交。 您可以读取流缓冲区中的行,此语法在非分区表和分区表之间有所不同,您可以找到获取这些行的示例。

如果insertId被更多的人使用,则仅保留一行。

提交状态保证您可以阅读。