【发布时间】:2018-12-14 13:39:43
【问题描述】:
我想使用 BigQuery streaming insert API 将行插入 BigQuery 表。在我的用例中,这是唯一会执行的“写”操作;我永远不会通过任何其他方式插入行,也永远不会更新或删除行。
读过Life of a BigQuery streaming insert,我的理解是,即使insertAll 请求被确认后,后续的读操作也可能无法“看到”它成功插入的所有行,直到它们被传输从流缓冲区到托管存储。
假设我的理解是正确的(如果不是,请告诉我!):
- 有什么方法可以判断给定
insertAll请求插入的所有行现在何时已提交到托管存储? - 即使在一行被提交到托管存储之后,后续的读取操作是否保证要么看到它们,要么失败?
我为什么要问这些问题?我的表模式将包含一个“键”列,这是一个严格单调递增的标识符。所有读取操作都将被限制在其键不超过某个指定值的行上。我需要保证这种形式的读取操作将始终返回相同的结果,假设指定的键对应于已经插入的行。显然,这样的查询不可能返回随后插入的行(因为它们的键会大于指定的键)。但是,如果有任何行已经被插入但仍在流缓冲区中,则查询可能不会返回它们,但稍后会执行完全相同的查询(在提交行之后)会返回它们。在我的用例中,这将是一场灾难。
【问题讨论】:
标签: google-bigquery consistency eventual-consistency