城市建设杂志社官方网站,wap网站开发平台,微信企业邮箱登录入口,安徽建设干部学校网站首页目录
1、简要介绍
2、操作方式和步骤
2.1、调整快照文件过期时间
2.2、设置分区过期时间
2.2.1、举例1
2.2.2、举例2
2.3、清理废弃文件
3、参考 1、简要介绍 清理 paimon #xff08;表#xff09;过期数据可以释放存储空间#xff0c;优化资源利用并提升系统运行效…目录
1、简要介绍
2、操作方式和步骤
2.1、调整快照文件过期时间
2.2、设置分区过期时间
2.2.1、举例1
2.2.2、举例2
2.3、清理废弃文件
3、参考 1、简要介绍 清理 paimon 表过期数据可以释放存储空间优化资源利用并提升系统运行效率等。本文将介绍如何清理 Paimon 表过期的数据包括
1调整快照文件过期时间2设置分区的过期时间3以及清理废弃文件
2、操作方式和步骤
2.1、调整快照文件过期时间
注意为了保证快照能准确地还原历史状态快照文件存在期间其关联的历史数据文件不可删除。 以下参数决定了快照文件的过期时间。我们可以通过2种方式修改
1 ALTER TABLE 语句修改这些参数
2在写入作业中通过SQL Hints临时修改这些参数 参数 说明 数据类型 默认值 snapshot.num-retained.min 至少保留几个快照文件。 Integer 10 snapshot.num-retained.max 至多保留几个快照文件。 Integer 2147483647 snapshot.time-retained 一个快照文件最长保留多久。 Duration 1h 在当前快照文件数量多于 snapshot.num-retained.min 的前提下只要当前快照文件数量多于 snapshot.num-retained.max 或最早的快照文件产出时间超过了 snapshot.time-retained就会触发快照清理。 下面的示例
snapshot.num-retained.min 2
snapshot.time-retained 1h
snapshot.num-retained.max 5
我使用 tuple (snapshotId, corresponding time) 表示 snapshot item 信息 2.2、设置分区过期时间 如果我们的业务只关心最近一段时间内的数据那么可以按时间对数据进行分区并设置分区过期时间以自动删除过于久远的历史分区从而释放存储空间高效地利用存储以降低成本。
非常重要 只有包含分区过期事件的快照文件也过期了分区中的数据文件才会被真正删除。 以下参数决定了快照文件的过期时间。我们可以通过2种方式修改
1 ALTER TABLE 语句修改这些参数
2在写入作业中通过SQL Hints临时修改这些参数 参数 说明 备注 partition.expiration-strategy 分区过期策略默认是 values-time 取值包括 values-time将分区值提取的时间与当前时间进行比较。 update-time该策略将分区的最后更新时间与当前时间进行比较。 partition.expiration-time 分区的过期时间。 参数值为时间长度例如12h、7d等。 partition.timestamp-pattern 将分区值转换为时间字符串的格式串。 在该格式串中分区列由 $ 加上列名表示。 partition.timestamp-formatter 将时间字符串转换为时间戳的格式串。 如果该参数没有设置默认尝试yyyy-MM-dd HH:mm:ss与yyyy-MM-dd两个格式串。 任何Java的DateTimeFormatter兼容的格式串都可以使用。 当分区的存活时长超过分区的过期时间参数值时该分区将被删除。分区的存活时长等于当前系统时间减去分区值转化后的时间戳。分区值转化成时间戳的逻辑如下
通过 partition.timestamp-pattern 参数指定的格式串将一个分区值转换为时间字符串。通过 partition.timestamp-formatter 参数指定的格式串将时间字符串转换为时间戳。
2.2.1、举例1 假设分区列由dt一列组成可以设置partition.timestamp-pattern $dt将分区dt20241108 转化为字符串20241108设置partition.timestamp-formatter yyyyMMdd将该字符串转换为时间戳。 假设分区列由year、month 和 day 三列组成可以设置partition.timestamp-pattern $year-$month-$day将分区year2024,month11,day21转化为字符串2024-11-21。此时不需要设置partition.timestamp-formatter因为该字符串符合默认格式之一的yyyy-MM-dd。 假设分区列由year、month、day和hour四列组成可以设置partition.timestamp-pattern $year-$month-$day $hour:00:00将分区year2024,month11,day21,hour17转换为字符串 2024-11-21 17:00:00。此时不需要设置partition.timestamp-formatter因为该字符串符合默认格式之一的yyyy-MM-dd HH:mm:ss。
2.2.2、举例2
-- 默认策略1: value-time
CREATE TABLE t (...) PARTITIONED BY (dt) WITH (partition.expiration-time 7 d,partition.expiration-check-interval 1 d,partition.timestamp-formatter yyyyMMdd -- this is required in values-time strategy.
);
-- Lets say now the date is 2024-07-09so before the date of 2024-07-02 will expire.
insert into t values(pk, 2024-07-01);-- An example for multiple partition fields
CREATE TABLE t (...) PARTITIONED BY (other_key, dt) WITH (partition.expiration-time 7 d,partition.expiration-check-interval 1 d,partition.timestamp-formatter yyyyMMdd,partition.timestamp-pattern $dt
);-- 策略2: update-time
CREATE TABLE t (...) PARTITIONED BY (dt) WITH (partition.expiration-time 7 d,partition.expiration-check-interval 1 d,partition.expiration-strategy update-time
);-- The last update time of the partition is now, so it will not expire.
insert into t values(pk, 2024-01-01);
-- Support non-date formatted partition.
insert into t values(pk, par-1);
2.3、清理废弃文件 这种方式主要用于处理 Flink job 出现异常时的情况。由于作业报错重启等原因Paimon表目录下可能会遗留一些未被提交的临时文件。这些文件无法通过快照过期删除需手动执行以下步骤进行清理。清理的操作步骤如下
1编辑 SQL 命令
CALL catalog-name.sys.remove_orphan_files(database-name.table-name);
说明
catalog-name Paimon Catalog 的名称
database-name 需要清理的 Paimon 表所在的 Database 的名称
table-name需要清理的 Paimon 表的名称。
注意默认情况下清理废弃文件只清理创建时间超过1天的废弃文件。我们可以额外传入时间参数指定最晚创建时间。
举例下面代码示例展示了清理 myproject.mydb.mytbl 表中创建时间不晚于 2024-10-31 12:00:00 的废弃文件。
CALL myproject.sys.remove_orphan_files(mydb.mytbl, 2024-10-31 12:00:00);
2执行 SQL 命令
3检查快照文件目录 3、参考
Expire Partition | Apache Paimon
Manage Snapshots | Apache Paimon