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

开启/关闭TTL

命令功能

开启或者关闭Hudi表的TTL能力。

命令格式

call ttl_configuration(table => "[table]", path => "[path]", enabled => "[enabled]", strategy => "[strategy]", value => "[value]", resolveConflictsBy => "[resolveConflictsBy]", runInline => "[runInline]")
  • strategy为NUM_COMMITS时,value指定的值代表每[value]个commit/deltacommit会触发一次TTL。
  • strategy为TIME_ELAPSED时,value指定的值代表每[value]天会触发一次TTL。
  • resolveConflictsBy属性用来处理TTL策略冲突,比如dt=2023/05/01分区同时命中以下两条TTL策略:

    策略A:call ttl_policy_save(table => 'hudi_table', spec => 'dt=2023/05/*', units => 'DAYS', value => '2', level => 'PARTITION');

    策略B:call ttl_policy_save(table => 'hudi_table', spec => 'dt=2023/05/01', units => 'DAYS', value => '1', level => 'PARTITION');

  • 当resolveConflictsBy为MAX_TTL时,如果同一个分区命中多条TTL策略,则保留时间最长的策略优先级最高,对于dt=2023/05/01分区来说策略A会生效,策略B不生效。
  • 当resolveConflictsBy为MIN_TTL时,如果同一个分区命中多条TTL策略,则保留时间最短的策略优先级最高,对于dt=2023/05/01分区来说策略B会生效,策略A不生效。
  • runInline为true时,TTL会在每次写入完成后会根据strategy和value属性的值去判断是否要检查所有分区的TTL情况,如果需要检查并且检查出老化的分区,则逻辑删除老化的分区,逻辑删除操作会生成一个repalcecommit,等执行clean操作时会自动物理删除老化的分区。如果不需要检查,则跳过,进行下一次写入。
  • runInline为false时,不需要指定strategy和value属性,TTL会在每次clean操作过程中去判断所有分区是否满足老化的条件,如果满足则直接物理删除老化的分区

参数描述

参数

描述

是否必填

table

String类型,表名或者库名.表名

否,table和path二选一

path

String类型,表的绝对路径

否,table和path二选一

enabled

String类型,是否开启TTL

否,false或者true,默认是false

strategy

String类型,TTL的触发模式

否,NUM_COMMITS或者TIME_ELAPSED,默认是NUM_COMMITS

value

String类型,TTL的触发间隔时间

否,默认是10

resolveConflictsBy

String类型,TTL的冲突解决策略

否,MAX_TTL或者MIN_TTL,默认是MAX_TTL

runInline

String类型,TTL是否在写操作完成时触发

否,true或者false,默认是false

示例

  • 指定表名开启TTL(每10个replacecommit触发一次TTL):
    call ttl_configuration(table => "hudi_table", enabled => "true", strategy => "NUM_COMMITS", value => "10", resolveConflictsBy => "MAX_TTL", runInline => "true")
  • 指定路径开启TTL(每1天触发一次TTL):
    call ttl_configuration(path => "hdfs://hacluster/user/hive/warehouse/hudi_table/", enabled => "true", strategy => "TIME_ELAPSED", value => "1", resolveConflictsBy => "MIN_TTL", runInline => "true")
  • 指定表名开启TTL(每次clean触发TTL):
    call ttl_configuration(table => "hudi_table", enabled => "true", resolveConflictsBy => "MAX_TTL", runInline => "false")
  • 关闭TTL:
    call ttl_configuration(table => "hudi_table", enabled => "false")