在greenplum中删除重复数据

在PostgreSQL中,可以借助ctid变量删除重复数据:postgresql: 使用SQL删除重复数据,但在GreenPlum中,由于数据是分散到不同的segment上,因此仅使用ctid无法删除重复数据了,需要借助pg_segment_id来解决。

参考了这篇文章:http://www.cnblogs.com/kuang17/p/5861700.html,最终解决方法就是:

delete from taxi_2010_dup where (gp_segment_id,ctid) not in (select gp_segment_id,min(ctid) from taxi_2010_dup group by tid,gpstime,gp_segment_id);

在实际测试过程中,发现上述sql有时删除重复数据不彻底,还是这种办法好:

DELETE FROM dupes T1
    USING   dupes T2
WHERE   T1.ctid < T2.ctid  -- delete the older versions
    AND T1.key  = T2.key;  -- add more columns if needed

发表评论

邮箱地址不会被公开。 必填项已用*标注