📜  BigQuery 从表中删除重复键 - SQL (1)

📅  最后修改于: 2023-12-03 15:13:39.293000             🧑  作者: Mango

BigQuery 从表中删除重复键 - SQL

在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
);

在这个例子中,我们使用了与上面的例子相同的基本操作,但是现在我们有一个多列组合键iddate。因此,我们需要在DELETE和子查询语句中指定这两个列。

请注意,运行此操作需要花费一些时间,因为它涉及到在表中查找和删除重复行。因此,请确保针对大型数据集优化您的查询,以确保该操作能够有效地运行。