sql - 从 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
我不知道如何识别和删除重复项。
在这件事上的任何帮助将不胜感激。
解决方案
我建议重新创建表格:
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;
如果必须将数据放回原处,您可以截断现有表,然后将这些结果复制到其中。
删除表中的大量行可能比使用查询并保存结果要昂贵得多。
推荐阅读
- c++ - 位排序/字节顺序 flac 解码
- c# - 如何从 winform 中删除一个绘制的对象?
- flutter - Flutter 中的下拉菜单视图
- linux - 是否可以在 Flutter 中编写特定于 Windows/Linux/MacOS 的代码?
- java - 无法从双重转换为类
- makefile - 如何用循环简化这个 Makefile
- python - 读取多个 .csv 文件并提取(在新的 .csv 文件中)与特定列中的非空单元格对应的所有行
- c++ - 如何让代码提示用户输入信息而不是硬接线?
- controller - Sails.js SyntaxError: await 仅在异步函数中有效
- selenium - 盒子阻塞元素有问题