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

【Iceberg学习二】Branch和Tag在Iceberg中的应用

Iceberg 表元数据保持一个快照日志,记录了对表所做的更改。快照在 Iceberg 中至关重要,因为它们是读者隔离和时间旅行查询的基础。为了控制元数据大小和存储成本,Iceberg 提供了快照生命周期管理程序,如 expire_snapshots,用于删除基于表快照保留属性不再需要的快照和数据文件。

为了更精细的快照生命周期管理,Iceberg 支持分支和标签,这些是具有独立生命周期的快照的命名引用。这种生命周期由分支和标签级别的保留策略控制。分支是独立的快照血统,并指向该血统的头部。分支和标签具有最大引用年龄属性,用于控制何时应该过期对快照本身的引用。分支具有保留属性,这些属性定义了在分支上保留的最小快照数量以及在分支上保留的单个快照的最大年龄。在运行 expireSnapshots 过程时会使用这些属性。有关 expireSnapshots 算法的详细信息,请参考规范。

用例

分支和标签可以用于处理GDPR(通用数据保护条例)要求,以及保留用于审计的重要历史快照。分支还可以作为数据工程工作流程的一部分,用于创建实验性分支,以测试和验证新任务。请参阅下面的一些示例,了解分支和标签如何促进这些用例。

历史标签

标签可以用于保留用于审计目的的重要历史快照。
在这里插入图片描述

上图展示了使用以下保留策略保留重要历史快照,该策略通过 Spark SQL 定义。

  1. 保留每周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. 保留每月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. 保留每年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;
  1. 创建一个临时的“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;

在这里插入图片描述

上图展示了一个使用审计分支来验证写入工作流的例子。

  1. 首先确保设置了 write.wap.enabled 参数。
ALTER TABLE db.table SET TBLPROPERTIES ('write.wap.enabled'='true'
);
  1. 创建一个从快照3开始的审计分支,该分支将被写入并保留1周。
ALTER TABLE db.table CREATE BRANCH `audit-branch` AS OF VERSION 3 RETAIN 7 DAYS;
  1. 写入操作在一个独立于主表历史的单独审计分支上执行。
-- WAP Branch write
SET spark.wap.branch = audit-branch
INSERT INTO prod.db.table VALUES (3, 'c');
  1. 验证工作流可以验证审计分支的状态(例如数据质量)。
  2. 验证后,可以将主分支快速前进到审计分支的头部,以更新主表的状态。
CALL catalog_name.system.fast_forward('prod.db.table', 'main', 'audit-branch');

在 Iceberg Java 库中,以及在 Spark 和 Flink 引擎集成中,支持创建、查询和写入分支和标签。

http://www.lryc.cn/news/297203.html

相关文章:

  • 在 Blazor WASM 中手撸一个.NET MD5类
  • MFC实现遍历系统进程
  • 【C语言】深入理解指针
  • Excel——有效性、二级菜单联动
  • 计算机网络总结
  • 初识文件包含漏洞
  • AR特效自研AI算法技术解决方案
  • 牛客2024年除夕娱乐赛(题解)
  • 5 scala的函数式编程简介
  • 陪护系统|陪护小程序提升长者护理服务质量的关键
  • C++算法之双指针、BFS和图论
  • 【大厂AI课学习笔记】1.5 AI技术领域(3)自然语言处理
  • 【数字电子技术课程设计】多功能数字电子钟的设计
  • 【新书推荐】7.3 for语句
  • 爬山算法优化遗传算法优化极限学习机的多分类预测,p-ga-elm多分类预测
  • 挑战杯 opencv 图像识别 指纹识别 - python
  • 【Docker】了解Docker Desktop桌面应用程序,TA是如何管理和运行Docker容器(2)
  • PHP、Python、Java 和 Go语言对比
  • 算法题目题单+题解——图论
  • 车载测试中:如何处理 bug
  • 亲测解决vscode的debug用不了、点了没反应
  • 立足智能存取解决方案|HEGERLS智能托盘四向车储存制动能量 实现能源回收
  • 2024.2.8日总结(小程序开发5)
  • Spring Boot配置文件优先级
  • Rust 初体验1
  • 【深度学习】实验7布置,图像超分辨
  • 【八大排序】归并排序 | 计数排序 + 图文详解!!
  • Netty应用(三) 之 NIO开发使用 网络编程 多路复用
  • 融资项目——配置redis
  • npm修改镜像源