流式数据湖Paimon探秘之旅 (十四) Tag与分支管理

第14章:Tag与分支管理

导言:数据的版本控制

就像Git管理代码一样,Paimon也提供了**Tag(标签)和Branch(分支)**来管理数据的版本。


第一部分:Tag(标签)

1.1 Tag是什么

Tag是一个Snapshot的固定引用,用于保存特定时刻的数据快照:

sql 复制代码
时间线:
Time 1: Snapshot 1 (100行)
Time 2: Snapshot 2 (110行) → 创建Tag: "v1.0"
Time 3: Snapshot 3 (115行)
Time 4: Snapshot 4 (120行) → 创建Tag: "v2.0"

Tag保留的是特定Snapshot的数据:
Tag "v1.0" 冻结了 Snapshot 2 的状态(110行)
Tag "v2.0" 冻结了 Snapshot 4 的状态(120行)

即使之后表被删除,Tag仍可恢复数据

1.2 创建和使用Tag

sql 复制代码
-- 创建Tag
ALTER TABLE orders CREATE TAG v1_2024_01_01;

-- 使用Tag查询
SELECT * FROM orders 
  FOR SYSTEM_VERSION AS OF TAG 'v1_2024_01_01';

-- 列出所有Tag
SHOW TAGS;

-- 删除Tag
ALTER TABLE orders DROP TAG v1_2024_01_01;

1.3 自动Tag创建

yaml 复制代码
CREATE TABLE orders (...) WITH (
    'tag.creation.mode' = 'AUTO',
    'tag.auto-create.interval' = '1d'
);

配置说明:
├─ 每天自动创建一个Tag
├─ Tag名称如:tag-20240101, tag-20240102
└─ 便于恢复任意历史版本

第二部分:Branch(分支)

2.1 Branch是什么

Branch是一个独立的数据分支,类似Git分支:

less 复制代码
主分支 (main):
Snapshot 1 → Snapshot 2 → Snapshot 3 → Snapshot 4

创建分支:
Snapshot 2 分支出 feature 分支
        ↓
feature: Snapshot 2a → Snapshot 2b → Snapshot 2c

特点:
├─ main和feature独立发展
├─ 不同分支有不同的数据视图
└─ 可以合并(目前不支持,但支持切换)

2.2 创建和使用Branch

sql 复制代码
-- 从当前Snapshot创建分支
ALTER TABLE orders CREATE BRANCH feature_v1;

-- 切换分支
ALTER TABLE orders SWITCH BRANCH feature_v1;

-- 在feature_v1分支上操作
INSERT INTO orders VALUES (...);

-- 切换回main分支
ALTER TABLE orders SWITCH BRANCH main;

-- 删除分支
ALTER TABLE orders DROP BRANCH feature_v1;

第三部分:时间旅行查询

3.1 按Snapshot ID查询

sql 复制代码
-- 查询历史数据
SELECT * FROM orders 
  FOR SYSTEM_VERSION AS OF SNAPSHOT_ID 10;

-- 最新数据
SELECT * FROM orders;  -- 隐含 SNAPSHOT_ID = 最大

-- 获取所有Snapshot ID
SELECT snapshot_id, commit_time FROM paimon_snapshots;

3.2 按时间戳查询

sql 复制代码
-- 查询特定时刻的数据
SELECT * FROM orders 
  FOR SYSTEM_TIME AS OF TIMESTAMP '2024-01-01 12:00:00';

-- 时间范围查询(需要Changelog)
SELECT * FROM orders 
  FOR SYSTEM_TIME BETWEEN 
    TIMESTAMP '2024-01-01 00:00:00' 
    AND TIMESTAMP '2024-01-01 23:59:59';

第四部分:生产级应用

4.1 数据误删恢复

vbnet 复制代码
场景:意外DELETE了大量数据

Step 1: 发现问题
时间:2024-01-15 10:30
现象:数据少了100万条

Step 2: 查找历史Snapshot
SELECT * FROM paimon_snapshots 
WHERE commit_time < '2024-01-15 10:00:00'
ORDER BY snapshot_id DESC
LIMIT 1;
结果:snapshot_id = 1000,commit_time = 2024-01-15 09:50:00

Step 3: 恢复数据
SELECT * FROM orders 
  FOR SYSTEM_VERSION AS OF SNAPSHOT_ID 1000
UNION ALL
SELECT * FROM orders  -- 新增的数据
WHERE created_at > '2024-01-15 09:50:00';

Step 4: 验证数据完整性
SELECT COUNT(*) FROM ...

Step 5: 确认无误后提交

4.2 A/B测试

sql 复制代码
-- 创建测试分支
ALTER TABLE metrics CREATE BRANCH ab_test;

-- 在测试分支上运行新算法
ALTER TABLE metrics SWITCH BRANCH ab_test;
UPDATE metrics SET score = new_algorithm(feature);

-- 在主分支上继续运行旧算法
ALTER TABLE metrics SWITCH BRANCH main;

-- 对比两个分支的结果
SELECT 'main' as branch, COUNT(*), AVG(score)
FROM metrics FOR BRANCH 'main'
GROUP BY 1
UNION ALL
SELECT 'ab_test' as branch, COUNT(*), AVG(score)
FROM metrics FOR BRANCH 'ab_test'
GROUP BY 1;

-- A/B测试结果满意,切换到新算法
ALTER TABLE metrics SWITCH BRANCH ab_test;

总结

Tag vs Snapshot vs Branch

特性 Snapshot Tag Branch
生命周期 临时(可被清理) 永久 长期
用途 检查点 版本标记 平行开发
存储成本 0% <5% 100%

下一章:第15章讲解文件清理与维护

相关推荐
QYR_111 小时前
机械制造用固体润滑涂层市场分析:2032年全球市场规模预计达8.78亿元,CAGR为6.2%
大数据·人工智能·物联网
数字化顾问1 小时前
(144页PPT)数字化转型汽车企业数智化战略规划(附下载方式)
大数据
智慧物业老杨2 小时前
数字底座,重构小区治理秩序
大数据
计算机编程指导师3 小时前
【计算机毕设选题推荐】基于Hadoop的宫颈癌变进程光谱数据分析系统源码 毕业设计 选题推荐 毕设选题 数据分析 机器学习
大数据·hadoop·python·数据分析·spark·毕业设计·宫颈癌变
guhunyihan4 小时前
无代码系统搭建平台,探索恐象 AI 带来的开发新范式
大数据·人工智能
计算机编程指导师4 小时前
【计算机毕设选题推荐】基于Hadoop+Spark的化妆品销售大数据分析系统源码 毕业设计 选题推荐 毕设选题 数据分析 机器学习
大数据·hadoop·python·spark·毕业设计·课程设计·化妆品
benchmark_cc4 小时前
前复权数据每天可能变化,历史数据库应该覆盖还是保留原始价格?
大数据·python·pandas·量化交易·股票数据·quantdash
计算机编程指导师4 小时前
计算机毕设选题推荐:Hadoop大数据下的个体肥胖健康风险评估与可视化系统源码 毕业设计 毕设选题 数据分析 机器学习
大数据·hadoop·python·spark·毕业设计·课程设计·肥胖健康风险
m0_715674435 小时前
数据分类分级的范式转换:从规则匹配到场景化高准确率一键部署
大数据·网络·人工智能·网络安全
计算机编程指导师5 小时前
Python大数据毕设怎么写?Django结合Hadoop+Spark京东销售分析系统源码 毕业设计 选题推荐 毕设选题 数据分析 机器学习
大数据·hadoop·python·spark·毕业设计·课程设计·京东商品