更新时间:2024-11-29 GMT+08:00

历史数据清理

操作场景

随着时间的推移,Hudi表中的数据越来越多,表中的老数据价值逐渐变弱并且还会占用存储空间,对这些老数据Hudi需要支持删除操作以便节约存储成本。

delete/drop partition语句直接删除历史数据

delete/drop paritition命令可以用来清理历史数据,具体可以参考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') 
  • 系统响应

    可在客户端中查看查询结果。