做改网站,购物车网站建设,网页跳转到别的网站,南京网站的优化Iceberg 表元数据保持一个快照日志#xff0c;记录了对表所做的更改。快照在 Iceberg 中至关重要#xff0c;因为它们是读者隔离和时间旅行查询的基础。为了控制元数据大小和存储成本#xff0c;Iceberg 提供了快照生命周期管理程序#xff0c;如 expire_snapshots#xf…Iceberg 表元数据保持一个快照日志记录了对表所做的更改。快照在 Iceberg 中至关重要因为它们是读者隔离和时间旅行查询的基础。为了控制元数据大小和存储成本Iceberg 提供了快照生命周期管理程序如 expire_snapshots用于删除基于表快照保留属性不再需要的快照和数据文件。
为了更精细的快照生命周期管理Iceberg 支持分支和标签这些是具有独立生命周期的快照的命名引用。这种生命周期由分支和标签级别的保留策略控制。分支是独立的快照血统并指向该血统的头部。分支和标签具有最大引用年龄属性用于控制何时应该过期对快照本身的引用。分支具有保留属性这些属性定义了在分支上保留的最小快照数量以及在分支上保留的单个快照的最大年龄。在运行 expireSnapshots 过程时会使用这些属性。有关 expireSnapshots 算法的详细信息请参考规范。
用例
分支和标签可以用于处理GDPR通用数据保护条例要求以及保留用于审计的重要历史快照。分支还可以作为数据工程工作流程的一部分用于创建实验性分支以测试和验证新任务。请参阅下面的一些示例了解分支和标签如何促进这些用例。
历史标签
标签可以用于保留用于审计目的的重要历史快照。
上图展示了使用以下保留策略保留重要历史快照该策略通过 Spark SQL 定义。
保留每周1个快照为期1个月。这可以通过标记每周快照并将标签保留时间设置为一个月来实现。快照将被保留分支引用本身将保留1周。
-- Create a tag for the first end of week snapshot. Retain the snapshot for a week
ALTER TABLE prod.db.table CREATE TAG EOW-01 AS OF VERSION 7 RETAIN 7 DAYS;保留每月1个快照为期6个月。这可以通过标记每月快照并将标签保留时间设置为6个月来实现。
-- Create a tag for the first end of month snapshot. Retain the snapshot for 6 months
ALTER TABLE prod.db.table CREATE TAG EOM-01 AS OF VERSION 30 RETAIN 180 DAYS;保留每年1个快照永久保存。这可以通过标记年度快照来实现。分支和标签的默认保留时间是永久的。
-- Create a tag for the end of the year and retain it forever.
ALTER TABLE prod.db.table CREATE TAG EOY-2023 AS OF VERSION 365;创建一个临时的“test-branch”该分支保留7天且分支上的最新2个快照会被保留。
-- Create a branch test-branch which will be retained for 7 days along with the latest 2 snapshots
ALTER TABLE prod.db.table CREATE BRANCH test-branch RETAIN 7 DAYS WITH SNAPSHOT RETENTION 2 SNAPSHOTS;上图展示了一个使用审计分支来验证写入工作流的例子。
首先确保设置了 write.wap.enabled 参数。
ALTER TABLE db.table SET TBLPROPERTIES (write.wap.enabledtrue
);创建一个从快照3开始的审计分支该分支将被写入并保留1周。
ALTER TABLE db.table CREATE BRANCH audit-branch AS OF VERSION 3 RETAIN 7 DAYS;写入操作在一个独立于主表历史的单独审计分支上执行。
-- WAP Branch write
SET spark.wap.branch audit-branch
INSERT INTO prod.db.table VALUES (3, c);验证工作流可以验证审计分支的状态例如数据质量。验证后可以将主分支快速前进到审计分支的头部以更新主表的状态。
CALL catalog_name.system.fast_forward(prod.db.table, main, audit-branch);在 Iceberg Java 库中以及在 Spark 和 Flink 引擎集成中支持创建、查询和写入分支和标签。