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 重复数据删除查询无法正常工作的主要内容,如果未能解决你的问题,请参考以下文章