从bigquery中的表中删除重复项

时间:2018-10-25 12:46:04

标签: sql google-bigquery

通过执行以下查询,我在表中发现了重复项。

SELECT name, id, count(1) as count
  FROM [myproject:dev.sample] 
  group by name, id 
  having count(1) > 1

现在,我想使用DML语句根据ID和名称删除这些重复项,但显示“ 0行受影响”消息。 我想念什么吗?

DELETE FROM PRD.GPBP WHERE
    id not in(select id from [myproject:dev.sample] GROUP BY id) and 
    name not in (select name from [myproject:dev.sample] GROUP BY name) 

2 个答案:

答案 0 :(得分:2)

我建议您创建一个没有重复的新表。删除原始表,然后将新表重命名为原始表。

您可以找到以下重复项:

Create table new_table as 
Select name, id, ...... , put our remaining 10 cols here
FROM(
SELECT *, 
ROW_NUMBER() OVER(Partition by name , id Order by id) as rnk
FROM [myproject:dev.sample] 
)a
WHERE rnk = 1;

然后删除旧表并使用旧表名重命名new_table

答案 1 :(得分:0)

下面的查询(BigQuery标准SQL)对于像您一样的重复数据删除应该是更理想的

#standardSQL
SELECT AS VALUE ANY_VALUE(t)
FROM `myproject.dev.sample` AS t
GROUP BY name, id

如果您是从用户界面中运行的,则只需将Write Preference设置为Overwrite Table即可完成

或者,如果您愿意,可以使用DML的INSERT到新表中,然后复制到原始表中

同时,最简单的方法如下(使用DDL)

#standardSQL
CREATE OR REPLACE TABLE `myproject.dev.sample` AS
SELECT * FROM (
  SELECT AS VALUE ANY_VALUE(t)
  FROM `myproject.dev.sample` AS t
  GROUP BY name, id
)