繁体   English   中英

Google BigQuery:使用WRITE_TRUNCATE复制到同一张表后立即进行流插入时的数据丢失

[英]Google BigQuery: Data drop when streaming insert right after copy to same table with WRITE_TRUNCATE

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

  1. 有人进入舞台时正常播放流媒体
  2. 搬出时:

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

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

    b。 对新行进行流插入。

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

我找到了此链接: 重新创建BigQuery表后,流插入不起作用?

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

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

对于您的特殊情况,我的建议是不要在每个“移出”位置都截断表格。

假设您有标识最近行(时间戳或订单等)的字段,则可以使用类似以下内容的内容轻松过滤掉旧行

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

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

在哪里提到?

可能不是您的情况明确,但请查看“ 数据可用性”部分
并在如何更改模板表架构中阅读了第三段(我觉得这是相关的)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM