使用 BigQuery 中最后一个非缺失日的副本估算缺失天数

Posted

技术标签:

【中文标题】使用 BigQuery 中最后一个非缺失日的副本估算缺失天数【英文标题】:Impute missing days with copy of last non-missing day in BigQuery 【发布时间】:2021-12-14 07:27:58 【问题描述】:

由于某种原因,我错过了在 bigquery 表中提取三天的数据。现在,我知道简单地从最后一个非缺失日复制数据并不是估算缺失数据的最佳方式,但就我的目的而言,这已经足够了。

我知道我可以复制最后丢失的日期,将 pandas 中的日期转换为 DATE + 1、DATE +2 等等,然后将该数据附加到 bigquery 中的原始表中。但是,我宁愿避免这样做。有没有一种简单的方法可以直接在 bigquery 或数据表单中执行此操作?我对 SQL 不太熟悉。

感谢您的任何建议。

【问题讨论】:

请提供具有预期输出的示例数据 【参考方案1】:

您可以执行以下操作。该查询是不言自明的,但这里有一些细节:

使用DATE_ADD()DATE_SUB() 修改返回的数据并过滤您想要复制的日期。

使用联合多次返回单个表并使用不同的修改和过滤器

使用如下所述的插入将检索到的数据插入到表中。

在运行插入之前,只运行选择和联合来检查这是否是您想要的数据

我已返回 1、2 和 3 天前 (date_col = DATE_SUB(CURRENT_DATE(), interval 2 DAY)) 的数据,并在 if 日期字段中添加了 1 天。

INSERT INTO `<p>.<ds>.<t>` (date_col, data)  (
    SELECT DATE_ADD(date_col, INTERVAL 1 DAY) as date, data FROM `<p>.<ds>.<t>` where date_col =  DATE_SUB(CURRENT_DATE(), interval 1 DAY)
    UNION ALL
    SELECT DATE_ADD(date_col, INTERVAL 1 DAY) as date, data FROM `<p>.<ds>.<t>` where date_col =  DATE_SUB(CURRENT_DATE(), interval 2 DAY)
    UNION ALL
    SELECT DATE_ADD(date_col, INTERVAL 1 DAY) as date, data FROM `<p>.<ds>.<t>` where date_col =  DATE_SUB(CURRENT_DATE(), interval 3 DAY)

)

【讨论】:

干得好!只是需要一点适应!谢谢! 很高兴它有帮助!

以上是关于使用 BigQuery 中最后一个非缺失日的副本估算缺失天数的主要内容,如果未能解决你的问题,请参考以下文章

检查 Bigquery 分区表中的任何缺失天数记录

如何在 google BigQuery 中填写缺失的日期

BigQuery 记录类型缺失

BigQuery 未在 LEFT JOIN 中返回缺失的 NULL 行

SQL,BigQuery - 用行的其他部分完成缺失值

通过 BigQuery 识别缺失的时间戳