暂无图片
请问大表删除大部分数据,有没有啥思路和建议?
我来答
分享
virvle
2023-05-22
请问大表删除大部分数据,有没有啥思路和建议?

好几个1T的分区表,在不停机或停机半小时内的情况下,按一定条件删除掉表中80%的数据,大家有没有啥好的思路和建议?
(说明:按rename+ctas的方式,停机半小时的情况下,来不及)

我来答
添加附件
收藏
分享
问题补充
6条回答
默认
最新
伪文艺

这个可以配合多次停机半小时来处理,每次根据实际情况处理若干个分区

1,将分区表的某个分区的数据置换出来

可以使用分区转换 ,不过要rebuild全局索引ALTER TABLE test_part EXCHANGE PARTITION SYS_P268 WITH TABLE tem_test_part;

也可以根据分区键使用ctas将一个分区的数据导出来,然后在truncate 该分区

2,在临时表中将需要的数据查找出来insert到分区表中,清空临时表

一次清理一个分区的话时间应该是够的,或者提前将执行脚本写好,多开几个窗口,一次多跑几个分区数据

暂无图片 评论
暂无图片 有用 1
暂无图片
virvle
题主
2023-06-02
感谢,评估下可行性,涉及十几张表,不是一张表
好好学习

DELETE FROM table_name WHERE condition;
其中,table_name为您需要删除数据的表名;condition为您需要满足的条件。
注意:在执行delete命令时,请务必谨慎操作。建议在执行前先备份好数据。

暂无图片 评论
暂无图片 有用 1
virvle
题主
2023-05-23
太大了,有点删不动
好好学习

导出不需要删除的数据,TRUNCATE 表,然后再导入数据。

注意:请务必谨慎操作。建议在执行前先备份好数据。

暂无图片 评论
暂无图片 有用 1
virvle
题主
2023-06-08
需要保留的数据担心评估的不够准确,会漏掉而被删除
好好学习

不能确定是可以先保留下来,随后再确定是否删除?

暂无图片 评论
暂无图片 有用 0
伪文艺

你这边找到解决方法的吗

今天在处理同样的问题的时候又想到了一个简单粗暴方案,可能比较合适,不过对磁盘的IO要求比较高

准备阶段:

1,将需要的数据通过查询条件创建物化视图,同步数据,如mv_tt

执行阶段:

停机

创建和原表结构一模一样的临时表

create  table t  as  select * from mv_tt;

暂无图片 评论
暂无图片 有用 1
virvle
题主
2023-06-21
物化视图的可以结合使用,应该比当时插入临时表,再插回来要快吧
virvle

目前我是通过python脚本,将需要删除的找出来,然后再慢慢干掉

暂无图片 评论
暂无图片 有用 0
伪文艺
2023-06-21
主要是通过物化视图把需要的数据拎出来,平时可以定时刷新同步,到正在实施的时候同步的数据就很少,这个物化视图里面的数据就是需要 保留的数据了,然后在rename+ctas,这就看IO给不给力了,你这个需求主要是找出需要的数据这个很费时间,物化视图刚好可以解决这个
回答交流
提交
问题信息
请登录之后查看
邀请回答
暂无人订阅该标签,敬请期待~~
暂无图片墨值悬赏