开启/关闭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")