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

BigQuery eventual consistency guarantees using streaming insert API

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

阅读 Life of a BigQuery streaming insert 后,我的理解是即使 insertAll 请求已被确认,后续的读取操作可能不会 "see" 所有成功的行由它插入,直到它们从流缓冲区传输到托管存储中。

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

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

我为什么要问这些问题?我的 table 架构将包含一个 "key" 列,这是一个严格单调递增的标识符。所有读取操作都将被限制在其键不超过某个指定值的行中。我需要保证这种形式的读取操作总是 return 相同的结果,假设指定的键对应于已经插入的行。显然,随后 插入的行不可能被这样的查询 return 编辑(因为它们的键将大于指定的键)。但是,如果有任何行 already 已插入但仍在流式缓冲区中,查询可能不会 return 它们,但稍后执行完全相同的查询(之后行已提交)would return 它们。在我的用例中,这将是一场灾难。

有两种状态。

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

如果 insertId 被不止一行使用,则只有一行被保留。

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