Bigquery 重复数据删除查询无法正常工作

Posted

技术标签:

【中文标题】Bigquery 重复数据删除查询无法正常工作【英文标题】:Big query De-duplication query is not working properly 【发布时间】:2021-03-25 12:53:16 【问题描述】:

任何人请告诉我以下查询无法正常工作,它假设只删除重复记录并保留其中一条(最新记录),但它正在删除所有记录而不是保留一条重复记录,为什么是这样吗?

    delete
    from
        dev_rahul.page_content_insights
    where
        (sha_id,
        etl_start_utc_dttm) in (
        select
            (a.sha_id,
            a.etl_start_utc_dttm)
        from
            (
            select
                sha_id,
                etl_start_utc_dttm,
                ROW_NUMBER() over (Partition by sha_id
            order by
                etl_start_utc_dttm desc) as rn
            from
                dev_rahul.page_content_insights
            where
                (snapshot_dt) >= '2021-03-25' ) a
        where
            a.rn <> 1)

【问题讨论】:

【参考方案1】:

查询看起来不错,但我不使用该语法来清理重复项。

我可以确认以下内容吗:

    sha_id, etl_start_utc_dttm 是你的主键吗? 您希望根据 etl_start_utc_dttm 字段降序保留 sha_id 和最新行吗?

如果是这样,请尝试以下两种查询模式:

create or replace table dev_rahul.rows_not_to_delete as
SELECT col.* FROM (SELECT ARRAY_AGG(pci ORDER BY etl_start_utc_dttm desc LIMIT 1
) OFFSET(0)]  col
FROM dev_rahul.page_content_insights pci
where snapshot_dt >= '2021-03-25' )
GROUP BY sha_id
);
delete dev_rahul.page_content_insights p
where not exists (select 1 from DW_pmo.rows_not_to_delete d 
                  where p.sha_id = d.sha_id and p.etl_start_utc_dttm = d.etl_start_utc_dttm
) and snapshot_dt >= '2021-03-25';

您可以通过将第一条语句放入 CTE 来在单个查询中执行此操作。

【讨论】:

以上是关于Bigquery 重复数据删除查询无法正常工作的主要内容,如果未能解决你的问题,请参考以下文章

BigQuery Python 无法删除数据集:数据集仍在使用中 [重复]

BigQuery 重复数据删除和分区表

BigQuery - 删除重复记录有时需要很长时间

如何过滤 bigquery 的重复表行数据以删除重复行?

两列上的 BigQuery 重复数据删除作为唯一键

BigQuery SQL:无法查询重复字段的叉积/