greenplum去重问题

最近一直为greenplum去重问题烦心,原本以为很简单的一个问题,使用distinct就可以解决,但是实际操作起来却发现并没有那么简单。还是请教了一些大神才解决这个问题,于是心想记录下来。下面就说说大神是怎么做的吧。

1、确定重要字段

假设你的字段有很多,但是你不知道哪些字段比较重要的(使用这些字段可以区分不行同的数据),那么你就需要逐一检验。

如:

select a,b,count(*) from C group by a,b having count(*)>1;

这里的a,b为你的字段名,C为你的表名,然后查看选出了多少数据,如果你不想顺便查看选出的数据,那就直接使用

select count(*) from (select a,b,count(*) from C group by a,b having count(*)>1)a;

然后你逐渐的添加字段,直到选出的数据基本趋于稳定为止。

2、新建一个表,用来存储重复的数据。

这里我们就可以选择几个重要的字段,把数据库中的重复数据导入到一个新的表中。如我们选择a,b字段


select m.* into C2 from 
(select a,b,count(*) from C group by a,b having count(*)>1) n,C m where m.a=n.a and 
m.b=n.b;



3、从表中删除选出导表C2的数据

Delete from C where (a,b) in (select a,b from C2);



4、从C2表中删除重复的数据。(假设你已经筛选出了重要的字段为a,b,d,e,f,g)

delete from C2 m where (gp_segment_id, ctid)  not in (select gp_segment_id, min(ctid) from C2 n group by gp_segment_id,n.a,n.b,n.d,n.e,n.f,n.g);

5、把数据导回大表C

Insert into C select * from C2;


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天心有情

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值