【问题标题】:Delete duplicate equal rows in BigQuery在 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。

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

【问题讨论】:

    标签: google-bigquery


    【解决方案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 子句中 - 您应该添加用于对原始表进行分区的字段

    【讨论】:

      猜你喜欢
      • 2020-10-01
      • 2016-08-09
      • 2020-03-30
      • 2019-09-13
      • 2017-07-06
      • 1970-01-01
      • 1970-01-01
      • 2020-01-08
      • 1970-01-01
      相关资源
      最近更新 更多