自学内容网 自学内容网

【Apache Paimon】-- 6 -- 清理过期数据

目录

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

分区的过期时间。

参数值为时间长度,例如12h7d等。

partition.timestamp-pattern

将分区值转换为时间字符串的格式串。

在该格式串中,分区列由 $ 加上列名表示。

partition.timestamp-formatter

将时间字符串转换为时间戳的格式串。

  • 如果该参数没有设置,默认尝试yyyy-MM-dd HH:mm:ssyyyy-MM-dd两个格式串。

  • 任何Java的DateTimeFormatter兼容的格式串都可以使用。

       当分区的存活时长超过分区的过期时间参数值时,该分区将被删除。分区的存活时长等于当前系统时间减去分区值转化后的时间戳。分区值转化成时间戳的逻辑如下:

  • 通过 partition.timestamp-pattern 参数指定的格式串,将一个分区值转换为时间字符串。
  • 通过 partition.timestamp-formatter 参数指定的格式串,将时间字符串转换为时间戳。

2.2.1、举例1

  • 假设分区列由dt一列组成,可以设置'partition.timestamp-pattern' = '$dt'将分区dt=20241108 转化为字符串20241108,设置'partition.timestamp-formatter' = 'yyyyMMdd'将该字符串转换为时间戳。

  • 假设分区列由yearmonth 和 day 三列组成,可以设置'partition.timestamp-pattern' = '$year-$month-$day',将分区year=2024,month=11,day=21转化为字符串2024-11-21。此时不需要设置partition.timestamp-formatter,因为该字符串符合默认格式之一的yyyy-MM-dd

  • 假设分区列由yearmonthdayhour四列组成,可以设置'partition.timestamp-pattern' = '$year-$month-$day $hour:00:00',将分区year=2024,month=11,day=21,hour=17转换为字符串 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.
);
-- Let's say now the date is 2024-07-09,so 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


原文地址:https://blog.csdn.net/high2011/article/details/143917694

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!