我想使用BigQuery streaming insert API将行插入到BigQuery表中。在我的用例中,这是将要执行的唯一一类“写”操作。我将永远不会通过任何其他方式插入行,也永远不会更新或删除行。
读取Life of a BigQuery streaming insert后,我的理解是,即使在insertAll
请求被确认之后,后续的读取操作也可能无法“看到”它成功插入的所有行,直到它们已从流缓冲区转移到托管存储中。
假设我的理解是正确的(请告诉我,如果不正确!):
insertAll
请求插入的所有行何时已提交到托管存储?我为什么要问这些问题?我的表模式将包括“键”列,该列是严格单调增加的标识符。所有读取操作将被约束到其键不超过某些指定值的行。我需要保证这种形式的读取操作将始终返回相同的结果,假设指定的键对应于已插入的行。显然,此类查询不可能返回随后插入的行(因为它们的键将大于指定的键)。但是,如果有任何已插入 的行但仍在流缓冲区中,则查询可能不会返回它们,而是稍后(在提交这些行之后)执行的查询完全相同。 em>将退还给他们。在我的用例中,这将是一场灾难。
答案 0 :(得分:0)
有两种状态。
在流缓冲区中并已提交。 您可以读取流缓冲区中的行,此语法在非分区表和分区表之间有所不同,您可以找到获取这些行的示例。
如果insertId被更多的人使用,则仅保留一行。
提交状态保证您可以阅读。