配置Hudi历史数据清理
本章节仅适用于MRS 3.3.0-LTS及之后版本
操作场景
随着时间的推移,Hudi表中的数据越来越多,表中的老数据价值逐渐变弱并且还会占用存储空间,对这些老数据Hudi需要支持删除操作以便节约存储成本。
delete/drop partition语句直接删除历史数据
delete/drop partition命令可以用来清理历史数据,具体可以参考Hudi SQL语法参考相关内容。
优点:操作简单,支持cow表和mor表。
缺点:并发能力不足。 当Hudi表处于实时写入状态,并发执行delete/drop partition命令容易导致实时入库作业失败。
call clean_data命令删除历史数据
- 命令功能
call clean_data的功能是用来删除mor表的历史数据。
优点:可以和入库任务并发执行,不会影响实时入库数据。
缺点:只支持mor表,并且是惰性删除,依赖于compaction。
- 命令格式
call clean_data(table => 'table_name', sql => 'delete statement')
- 参数描述
表1 参数描述 参数
描述
table_name
待删除数据的表名,支持database.tablename格式
delete statement
select类型的sql语句,用于找出待删除的数据
- 示例
从mytable表中删除primaryKey < 100 的所有数据:
call clean_data(table => 'mytable', sql=>'select * from mytable where primaryKey < 100')
清理上次clean_data命令残留文件;cleanData执行失败会产生临时文件,该命令可以清理这些临时文件:
call clean_data(table => 'mytable', sql=>'delete cleanData')
- 系统响应