unique模型快速找出并删除“业务重复”数据

模型
unique

unique key
k1,k2,k3

业务说明
1.源表中的唯一键是(k2,k3),为了符合查询场景,人为将K1纳入唯一键组合中,95%以上的场景下,都能保证(k1,k2,k3)的事实唯一
2.但是极少情况下,针对starrocks中已经存在的数据,上游源表可能修改k1的值,导致starrocks存在两条(k2,k3)相同的记录。这时候,应该先按照(k2,k3)分组,再删除修改时间update_time(非key)最早的记录,只保留相同分组中时间最新的一条记录

目前做法
1.关联查询出所有(k2,k3)重复的记录值
2.再使用多线程(线程池minCore=8,maxCore=16,任务等待队列长度=50,CPU=8C)逐行delete by unique 删除数据
结果:从33W数据量的单表中,删除5000条数据都要删除5、10分钟以上,太慢

问题
有没有更好、更快的清除“重复数据”的方式?

在2.1版本主键模型会支持非key列创建索引,届时可将表中数据导入到主键模型中,使用k2,k3作为key列,在k1上创建索引。目前没有什么好的方法。

1赞

索引持久化有没有计划呀。目前的索引占用内存过大,虽然说32bytes以内,已经优化了一半,但是如果对id(String)、分桶分区列(String)同时作为主键索引,肯定会大于32Bytes,索引的大小基本没有啥变化。目前来说,主键模型还不能应用在生产的id为字符串类型的表上