通过执行以下查询,我在表中发现了重复项。
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)
答案 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
)