📅  最后修改于: 2023-12-03 15:13:39.293000             🧑  作者: Mango
在BigQuery中,经常需要删除表中的重复行。这可以通过DISTINCT
操作完成,但是如果你想完全删除重复的行,包括重复的键,则需要使用DELETE
语句。
以下是一些用于删除表中的重复键的示例SQL语句:
DELETE FROM my_table
WHERE id IN (
SELECT id
FROM (
SELECT id,
ROW_NUMBER() OVER (PARTITION BY id) AS row_number
FROM my_table
)
WHERE row_number > 1
);
在这个例子中,我们首先使用ROW_NUMBER
窗口函数为每个具有重复id
的行分配行号。然后,我们将重复的id
过滤掉,并删除所有剩余的行。请注意,这将保留具有最小行数的行。
DELETE FROM my_table
WHERE (id, date) IN (
SELECT id, date
FROM (
SELECT id, date,
ROW_NUMBER() OVER (PARTITION BY id, date) AS row_number
FROM my_table
)
WHERE row_number > 1
);
在这个例子中,我们使用了与上面的例子相同的基本操作,但是现在我们有一个多列组合键id
和date
。因此,我们需要在DELETE
和子查询语句中指定这两个列。
请注意,运行此操作需要花费一些时间,因为它涉及到在表中查找和删除重复行。因此,请确保针对大型数据集优化您的查询,以确保该操作能够有效地运行。