背景
由于前端时间数据导入出现问题,导致druid 中的数据需要重新导入,但又要防止数据重复,需要把数据彻底清理。
问题
由于druid 属于时间序列数据库,删除的时候只能时间范围删除。
删除流程
根据时间范围查询segements 标识(在coordinator节点查询)
查询例子:查找 datasource 为uservalid_1d,时间范围是 2019-09-29至2019-10-08 间的范围数据,返回值为数组。
查看segements 信息
通过segements详情,可以看出interval,唯一标示,当前在哪个节点上存储。
标记segments 为 unused(unused 不是删除,而是加载对应的segements)(0.13版本)
上面实例就是 把数据库uservalid_1d,中的uservalid_1d_2019-10-06T00:00:00.000Z_2019-10-07T00:00:00.000Z_2019-10-08T07:10:17.073Z_1标记为unused 。
标记unused ?
在元数据存储中,表名:druid_segments,字段属性:dataSource 值:uservalid_1d 属性:used 设置为 ‘0’,在coordinator节点,分配segements时,used 为 ‘0',segements不进行加载。
查看系统中未加载的segments sql语句
SELECT * FROM `druid_segments` WHERE dataSource = 'uservalid_1d' AND used = '0'
清理深度存储数据。提交Kill 任务
只有标记为unused segements才能被清理掉。
验证
查看hdfs中是否还存在对应的 目录 hadoop -fs -ls /druid/segements/uservalid_1d
总结
druid 彻底清理数据时,分为三步,查询删除的segements,标记为unused,清理元数据及深度存储数据。
以上删除方式,适用于0.13版本,其他版本,未进行过测试。
领取专属 10元无门槛券
私享最新 技术干货