google-bigquery - 处理 BigQuery(嵌套表)中的重复项
问题描述
我认为这是一个非常简单的问题,但我想要一些指导:我不想删除一个表来发送一个包含重复数据删除记录的新表,例如基于下面使用 BigQuery 的查询使用 DELETE FROM,是吗可能的?PS:这是一个嵌套表!
SELECT
*
FROM (
SELECT
*,
ROW_NUMBER()
OVER (PARTITION BY id, date_register) row_number
FROM
dataset.table)
WHERE
row_number = 1
order by id, date_register
解决方案
要在不重新创建表的情况下就地删除重复数据 - 使用MERGE
:
MERGE `temp.many_random` t
USING (
SELECT DISTINCT *
FROM `temp.many_random`
)
ON FALSE
WHEN NOT MATCHED BY SOURCE THEN DELETE
WHEN NOT MATCHED BY TARGET THEN INSERT ROW
它比当前接受的答案更简单,因为它不会要求您匹配当前的分区或集群 - 它只会尊重它。