【发布时间】:2016-07-21 06:48:40
【问题描述】:
当使用 Big Query 流式处理 API 并在每一行上设置一个 insertId 时,我们可以通过使用相同的 insertId 执行后续插入来更新(覆盖)行。
documentation 中未提及此行为,仅说明:
BigQuery 使用 insertId 属性尽最大努力对您的数据进行重复数据删除。
Big Query 是否总是会覆盖具有相同 insertId 的行?
这可以用来更新数据吗?
【问题讨论】:
当使用 Big Query 流式处理 API 并在每一行上设置一个 insertId 时,我们可以通过使用相同的 insertId 执行后续插入来更新(覆盖)行。
documentation 中未提及此行为,仅说明:
BigQuery 使用 insertId 属性尽最大努力对您的数据进行重复数据删除。
Big Query 是否总是会覆盖具有相同 insertId 的行?
这可以用来更新数据吗?
【问题讨论】:
文档:这就是文档所说的(或至少暗示)“重复数据删除”:它假设使用相同的insertId 发送的数据是相同的,因此只会插入一个副本。但请注意,这是尽力而为,不能保证。
覆盖:否,并且由于多种因素:这只是尽力而为,您无法控制将保留哪些数据(较旧或较新),并且仅适用于流缓冲区中的数据。数据一旦提交,去重机制就不再生效。
【讨论】:
insertId 插入同一行,您将只得到一份。但如果您发送不同的数据,则不提供保证。