首页 > 解决方案 > 从 Redshift 中的表中删除除一个以外的所有字段中的重复项

问题描述

我有一个包含超过 1.3B 记录的大表。此表基于 Web 事件级别数据。它有一个 uniqye 键mongo_id。该表有很多重复记录;但是对于这些重复的记录,mongo_id还是有区别的。所以换句话说,有重复的记录,除了mongo_id字段之外,其他所有内容都是重复的。我想从表中删除这些记录。

如果表中的所有字段都重复,我可以使用这样的方法来删除重复项:

create table table_name_new as select distinct * from table_name;
alter table table_name rename to table_name_old;
alter table table_name_new rename to table_name;
drop table table_name_old;

但是由于我在所有字段中都有重复记录,但mongo_id我不知道如何识别和删除重复项。

在这件事上的任何帮助将不胜感激。

标签: sqlamazon-redshift

解决方案


我建议重新创建表格:

create table new_t as 
    select t.*
    from (select <all other columns>,
                 row_number() over (partition by <all other columns> order by mongo_id) as seqnum
          from t
         ) t
    where seqnum = 1;

如果必须将数据放回原处,您可以截断现有表,然后将这些结果复制到其中。

删除表中的大量行可能比使用查询并保存结果要昂贵得多。


推荐阅读