【问题标题】:Big Query Streaming API to overwrite rows using insertIdBigquery Streaming API 使用插入 ID 覆盖行
【发布时间】:2016-07-21 06:48:40
【问题描述】:

当使用 Big Query 流式处理 API 并在每一行上设置一个 insertId 时,我们可以通过使用相同的 insertId 执行后续插入来更新(覆盖)行。

documentation 中未提及此行为,仅说明:

BigQuery 使用 insertId 属性尽最大努力对您的数据进行重复数据删除。

Big Query 是否总是会覆盖具有相同 insertId 的行?

这可以用来更新数据吗?

【问题讨论】:

    标签: streaming google-bigquery


    【解决方案1】:

    文档:这就是文档所说的(或至少暗示)“重复数据删除”:它假设使用相同的insertId 发送的数据是相同的,因此只会插入一个副本。但请注意,这是尽力而为,不能保证。

    覆盖:否,并且由于多种因素:这只是尽力而为,您无法控制将保留哪些数据(较旧或较新),并且仅适用于流缓冲区中的数据。数据一旦提交,去重机制就不再生效。

    【讨论】:

    • 不知道他们为什么对你投了反对票,但有一个赞成票 - 这是正确的答案。
    • 谢谢@FelipeHoffa!
    • @FelipeHoffa 和 iustin 这是在改写文档并做出更多假设,但没有任何支持。至于覆盖,这不是我们发现的行为,我们可以在单独的请求中多次覆盖同一行。流缓冲区有多长?到目前为止,我们已经看到成功覆盖超过 15 分钟。
    • @j.davies - 抱歉,如果我的回复不清楚。让我再试一次: * 系统当前的实现将覆盖该行,只要它在流缓冲区中 * 但是,最后一行获胜并不能保证行为,所以我个人不会设计一个系统* 并且我们没有保证流窗口的窗口(据我所知)基本上 BigQuery 所做的唯一保证是,如果您在短时间内使用相同的 insertId 插入同一行,您将只得到一份。但如果您发送不同的数据,则不提供保证。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-31
    • 2014-11-27
    相关资源
    最近更新 更多