【问题标题】:Google BigQuery: Data drop when streaming insert right after copy to same table with WRITE_TRUNCATEGoogle BigQuery:在使用 WRITE_TRUNCATE 复制到同一个表后立即进行流式插入时数据丢失
【发布时间】:2016-04-20 14:28:26
【问题描述】:

我希望我可以尽可能清楚地理解。我正在维护有关舞台移动的数据,即当有人进入舞台和何时离开时。我希望 bigquery 表对每个阶段的移动都有一个条目(由于我将对数据进行的查询类型),但是输入和输出有两个更新,所以这就是我正在做的;

  1. 当有人进入舞台时正常流式插入
  2. 搬出时:

    一个。使用类似的查询将截断的表复制到相同的目的地

    SELECT * FROM my_dataset.my_table WHERE id !="id" 
    

    b.为新行进行流式插入。

问题是,在复制操作后进行流式插入时会出现随机数据丢失。

我找到了这个链接:After recreating BigQuery table streaming inserts are not working?

已经提到,在这种情况下,在进行流式插入之前应该有 >2 分钟的延迟以避免数据丢失,但是我希望它是瞬时的,因为多个阶段的移动可以在几秒钟内发生.有解决方法或解决方法吗?或者我是否必须重新考虑我的完整流程,现在看起来不太可能?

【问题讨论】:

    标签: python google-bigquery


    【解决方案1】:

    我是否必须在仅附加的基础上重新考虑我的完整流程?

    我对您的特定情况的建议是不要在每次“搬出”时截断表格。

    假设您有标识最近行的字段(时间戳或顺序等),您可以使用类似

    的内容轻松过滤掉旧行
    SELECT <your_fileds> 
    FROM (
      SELECT 
        <your_fileds>, 
        ROW_NUMBER() OVER(PARTITION BY id ORDER BY timestanp DESC) AS most_recent_row
      FROM my_dataset.my_table 
    )
    WHERE most_recent_row = 1
    

    如果需要,您可以每天使用与上述相同的方法将“旧/非最新”行清除到截断表中

    在哪里提到过?

    也许不是那么明确你的情况,但检查Data availability部分
    并在How to change the template table schema阅读第三段(我觉得它是相关的)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-06-09
      • 2018-05-13
      • 2020-08-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多