创建标签(Tag)策略可以保留关键快照。创建Tag的快照,在进入过期清除流程时,快照的元数据与数据文件仍会被持续保存。在快照过期后,借助标签仍能追溯查询到特定时间点的数据。在实践中,每日生成一个标签尤为实用,能够确保对每一天历史数据的持久访问能力,为数据分析、审计追溯等应用场景提供了坚实支撑。本文为您介绍如何自动和手动创建与删除Tag、回退到指定Tag、查询Tag数据及高级配置。
使用限制
仅实时计算引擎VVR 8.0.5及以上版本支持Paimon表。
自动创建与删除Tag
Paimon支持在写入数据的过程中,按照表参数的配置自动创建Tag以及删除过期的Tag。您需要配置相关表参数。
参数 | 说明 | 备注 |
| Tag创建模式,即基于何种行为触发自动创建。 | 参数取值如下:
说明 如果未配置该参数,则不会自动创建Tag。 |
| 指定Tag创建时间间隔。 | 如果您指定的Tag创建模式为
|
| 指定延迟时间。 | 默认延迟时间为0。如果您的作业存在延迟,并且您希望触发自动创建时,能够等待延迟的数据提交后再创建,可以指定延迟时间。例如,如果您的作业延迟为10分钟,则可以设置 |
| 指定最多保留的Tag数量。 | 由于Tag会保留某个快照的元数据和数据文件,因此旧的Tag可能导致不需要使用的历史数据文件占用存储。当创建的Tag数量超出这个参数时,最早的Tag将会被删除,相应的数据也会被清理。 |
例如,创建的Paimon表,Tag在每天00:10(00:00触发创建,加上延迟时间10分钟)自动创建,并且保留3个月的Tag(设置的最大保留数为90,3个月产生90个)。
CREATE TABLE mycat.mydb.mytbl (
k INT,
v INT,
PRIMARY KEY (k) NOT ENFORCED
) WITH (
'tag.automatic-creation' = 'process-time',
'tag.creation-period' = 'daily',
'tag.creation-delay' = '10 m',
'tag.num-retained-max' = '90'
);
手动创建和删除Tag
您可以在查询脚本中执行CALL语句手动创建或删除Tag。
操作 | 命令 |
手动创建Tag |
|
手动删除Tag |
|
回退到指定Tag
如果您的作业出现了错误,并且有较早时候创建的Tag,您可以回退到Tag,从而使数据回到正确的状态。
这个操作会将Tag的时间之后的数据删除,请谨慎使用,并在操作前备份数据文件。
-- 使mycat.mydb.mytbl表回退到tag-1的状态。
CALL `mycat`.sys.rollback_to('mydb.mytbl', 'tag-1');
查询Tag元数据和数据
查询Tag元数据
您可以通过查询Tags系统表查询所有Tag的元数据信息,更多Tags系统表的信息,请参见Tags系统表。以
mycat.mydb.mytbl
为例:SELECT * FROM mycat.mydb.`mytbl$tags`;
查询Tag数据
Tag可以用于批读。您可以通过SQL Hints读取特定Tag指向的数据,或者读取两个Tag间的增量数据。
读取指定Tag的数据
-- 指定读取名为 tag-1 的 tag SELECT * FROM mycat.mydb.mytbl /*+ OPTIONS('scan.tag-name' = 'tag-1') */;
读取两个Tag间的增量数据
-- 指定读取tag-1和tag-2间的增量数据。 SELECT * FROM mycat.mydb.mytbl /*+ OPTIONS('incremental-between' = 'tag-1,tag-2') */;
高级配置
设置自动创建的Tag名称格式
您可以通过表参数tag.period-formatter
来设置。支持的参数值如下:
with_dashes
(默认值):Tag名称中的日期带有短划线(-),即yyyy-MM-dd HH。without_dashes
:Tag名称中的日期不带短划线(-),即yyyyMMdd HH。
与快照(Savepoint)结合使用
在使用Flink时,通常会利用保存点机制来长期保存作业状态,并用于作业的增量恢复。但是Paimon的快照会自动过期清理,在作业长时间运行后,保存点对应的快照文件可能会因为过期而被清理,导致从保存点对应的快照恢复作业失败。
而Paimon的Tag能长期保留某个快照的状态,因此,您可以结合这两个功能,在触发保存点的同时创建相应的Tag,方便在未来从某个保存点恢复作业。
要使用这个特性,首先您需要通过ALTER TABLE语句或SQL Hints配置表参数sink.savepoint.auto-tag = true
来开启Tag自动创建。当您需要从保存点恢复作业时,操作步骤如下。
找到该保存点对应的Tag。
自动创建的Tag名称的格式为
savepoint-${savepointID}
。停止作业后,执行如下命令将数据回退到指定Tag。
CALL `<catalog-name>`.sys.rollback_to('<database-name>.<table-name>', 'savepoint-${savepointID}')
从保存点对应的快照恢复作业。
响应源表的Idle状态
自动创建Tag功能依赖于Paimon的数据提交机制。当Paimon提交数据时,会创建快照,同时也会检查当前时间点是否满足创建Tag的条件。在一般情况下,当源表长时间处于Idle状态,未发送数据时,Paimon会提交空数据,此时不会创建快照。如果在这个时间点正好需要创建Tag,就会导致相应的Tag没有按时创建。
如果您配置了表参数'tag.automatic-creation' = 'process-time'
,这个问题不会产生。因为Paimon会在这种情况下强制创建快照,从而正常触发Tag的创建。
但是,如果您配置了表参数'tag.automatic-creation' = 'watermark'
,此时Paimon无法判断上游是否长时间未发送数据。您需要额外配置表参数snapshot.watermark-idle-timeout
来指定源表的最长Idle时间。如果源表在超过指定时间后仍未发送数据,则会强制创建快照,从而正常触发Tag的创建。
相关文档
调整快照文件过期时间、设置分区的过期时间、以及清理废弃文件,详情请参见清理过期数据。