当前位置: 首页 > article >正文

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


http://www.kler.cn/a/402871.html

相关文章:

  • 数据结构与算法——1122—复杂度总结检测相同元素
  • 序列化库Jackson、FastJson 和 Gson详细对比
  • 链表中是否存在环
  • 浪潮信息自动驾驶框架AutoDRRT 2.0,赋能高阶自动驾驶
  • 力扣-位运算-1【算法学习day.41】
  • JDBC编程---Java
  • 机器学习算法模型系列——Adam算法
  • 量子计算机全面解析:技术、应用与未来
  • 连接数据库:通过链和代理查询鲜花信息
  • 如何拆解问题
  • Git入门图文教程 -- 深入浅出 ( 保姆级 )
  • 【生物服务器】数据分析//论文润色/组学技术服务 、表观组分析、互作组分析、遗传转化实验、生物医学
  • ESP32移植Openharmony外设篇(6)光敏电阻ADC读取
  • Vue前端框架开发 npm安装Vite或CLI
  • 使用Python编写脚本,为Excel表格添加水印
  • 前端两大利器:Vue与TypeScript的渊源
  • 使用Python生成卡方分布表并导出为Excel文件
  • K8S数据存储持久化Volume和高级存储之PV、PVC
  • Git分布式版本控制系统
  • 【Linux】基础02
  • CommonsBeanutils与Shiro发序列化利用的学习
  • Python毕业设计选题:基于python的豆瓣电影数据分析可视化系统-flask+spider
  • React Native 全栈开发实战班 - 网络与数据之 websock与服务端交互
  • Ansible一键部署Kubernetes集群
  • 2024一带一路暨金砖国家技能发展与技术创新大赛第二届企业信息系统安全赛项选拔赛(北部赛区)
  • react 如何修改弹出的modal的标题