清理过期数据

清理过期数据可以释放存储空间,优化资源利用并提升系统运行效率等。本文为您介绍如何清理Paimon表过期数据,包括调整快照文件过期时间、设置分区的过期时间、以及清理废弃文件。

注意事项

仅实时计算引擎VVR 8.0.5及以上版本支持Paimon表。

调整快照文件过期时间

重要

为了保证快照能准确地还原历史状态,快照文件存在期间,其关联的历史数据文件不得删除。

随着快照文件不断产生,历史数据占用的存储空间也将逐渐增加。因此,我们需要清理不再使用的快照文件,以释放该快照文件指向的历史数据文件,从而释放存储空间。

以下参数决定了快照文件的过期时间。您可以通过ALTER TABLE语句修改这些参数,也可以在写入作业中通过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,就会触发快照清理。

设置分区过期时间

如果您的业务只关心最近一段时间内的数据,您可以按时间对数据进行分区,并设置分区过期时间以自动删除过于久远的历史分区,从而释放存储空间。

重要

只有包含分区过期事件的快照文件也过期了,分区中的数据文件才会被真正删除。

分区过期行为由下表三个表参数共同决定。您可以通过ALTER TABLE语句修改这些参数,也可以在写入作业中通过SQL Hints临时修改这些参数,详情请参见修改表结构

参数

说明

备注

partition.expiration-time

分区的过期时间。

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

partition.timestamp-pattern

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

在该格式串中,分区列由美元符号($)加上列名表示。

partition.timestamp-formatter

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

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

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

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

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

  2. 通过partition.timestamp-formatter参数指定的格式串,将时间字符串转换为时间戳

例如:

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

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

  • 假设分区列由yearmonthdayhour四列组成,可以设置'partition.timestamp-pattern' = '$year-$month-$day $hour:00:00',将分区year=2023,month=04,day=21,hour=17转换为字符串 2023-04-21 17:00:00。此时不需要设置partition.timestamp-formatter,因为该字符串符合默认格式之一的yyyy-MM-dd HH:mm:ss

清理废弃文件

由于作业报错重启等原因,Paimon表目录下可能会遗留一些未被提交的临时文件。这些废弃文件无法通过快照过期删除,需要手动执行以下步骤进行清理。清理的操作步骤如下:

  1. 实时计算控制台上,新建查询脚本,详情请参见查询脚本

  2. 在文本编辑区域,输入以下SQL语句。

    CALL `<catalog-name>`.sys.remove_orphan_files('<database-name>.<table-name>');

    其中,<catalog-name>是Paimon Catalog的名称,<database-name>是需要清理的 Paimon表所在的Database的名称,<table-name>是需要清理的Paimon表的名称。

    默认情况下,清理废弃文件只清理创建时间超过1天的废弃文件。您可以额外传入时间参数,指定最晚创建时间。例如,下面代码示例展示了清理mycat.mydb.mytbl表中,创建时间不晚于2023-10-31 12:00:00的废弃文件。

    CALL `mycat`.sys.remove_orphan_files('mydb.mytbl', '2023-10-31 12:00:00');
  3. 选中SQL代码后,单击左侧代码行数上的运行

    清理完成后,下方的结果选项卡会显示删除文件的总数。

相关文档