在 BigQuery 中删除重复的相等行

Posted

技术标签:

【中文标题】在 BigQuery 中删除重复的相等行【英文标题】:Delete duplicate equal rows in BigQuery 【发布时间】:2020-04-28 13:22:27 【问题描述】:

有一个重复行的表,其中所有列的值都相等:

+------+---------+------------+
|  id  |  value  | timestamp  |
+------+---------+------------+
| 1    |  500    | 2019-10-12 |
| 2    |  400    | 2019-10-11 |
| 1    |  500    | 2019-10-12 |
+------+---------+------------+

我想保留其中一个相等的行并删除其他行。我想出了:

DELETE
FROM
  `table` t1
WHERE (
  SELECT
    ROW_NUMBER() OVER (PARTITION BY id),
  FROM
    `table` t2
  WHERE
    t1.id = t2.id 
) > 1

但这不起作用:

不支持引用其他表的相关子查询 除非它们可以去相关,例如通过将它们转换为 高效的 JOIN。

任何想法如何删除重复的行?

【问题讨论】:

【参考方案1】:

以下是 BigQuery 标准 SQL

...所有列值都相等 所以你可以使用简单的DISTINCT * 而不是DELETE 使用CREATE / REPLACE 写回同一个表

#standardSQL
CREATE OR REPLACE TABLE `project.dataset.table`   
PARTITION BY date
SELECT DISTINCT * 
FROM `project.dataset.table`     

PARTITION BY 子句中 - 您应该添加用于对原始表进行分区的字段

【讨论】:

以上是关于在 BigQuery 中删除重复的相等行的主要内容,如果未能解决你的问题,请参考以下文章

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

Bigquery - 根据时差删除行

根据条件对 BigQuery 中的行进行重复数据删除

sql [BigQuery - Facebook产品目录]查询para obtenerelcatálogodeproductos de Kichink。 #facebook #bigqu

Kafka Bigquery中的重复行

从 BigQuery 中的数组中删除重复项