创建Tag和Branch
本章节介绍如何创建Iceberg Tag和Branch。Tag可用于保留重要的历史快照以用于审计目的。
创建Tag
Tag可用于保留重要的历史快照以用于审计目的。可登录spark-sql客户端参考以下操作创建Tag:
- 每周保留1个快照,持续1个月。
- 获取current-snapshot-id:
DESCRIBE EXTENDED local.db.table;
例如,获取到的current-snapshot-id为“2767263131158701491”。
- 可以通过每周标记快照并将Tag保留期设置为一个月来实现。快照将被保留,且分支引用本身将保留1周。
ALTER TABLE local.db.table CREATE TAG `EOW-01` AS OF VERSION {current-snapshot-id} RETAIN 7 DAYS;
- 获取current-snapshot-id:
- 每月保留1个快照,持续6个月。
- 每年保留1个快照,永久保存。
创建Branch
创建Branch的流程如下:
- 设置“write.wap.enabled”为“true”以开启创建和切换分支功能:
ALTER TABLE local.db.table SET TBLPROPERTIES ( 'write.wap.enabled'='true');
- 基于主表创建分支
例如,基于快照3创建分支,该分支将被写入并保留1周:
ALTER TABLE local.db.table CREATE BRANCH `audit-branch` AS OF VERSION {current-snapshot-id} RETAIN 7 DAYS;例如,创建一个临时的“test-branch”,保留7天,并保留该Branch上的最新2个快照:
ALTER TABLE local.db.table CREATE BRANCH `test-branch` RETAIN 7 DAYS WITH SNAPSHOT RETENTION 2 SNAPSHOTS;
- 切换分支并执行写入操作
切换分支:
SET spark.wap.branch = audit-branch;
写入数据:
INSERT INTO local.db.table VALUES (3, 'c');
- 指定某个分支更新主表的最新状态
CALL local.system.fast_forward('local.db.table', 'main', 'audit-branch'); - 主表执行schema evolution对所有分支都生效。
- 登录安装了Spark客户端的节点,执行以下命令登录Spark客户端:
- 切换至客户端安装目录:
cd 客户端安装目录
- 配置环境变量:
source bigdata_env
- 加载Spark组件环境变量:
source Spark/component_env
- 认证用户,如果集群未启用Kerberos认证(普通模式)请跳过此操作:
kinit 组件业务用户
- 切换至客户端安装目录:
- 创建表并插入数据。
- 创建表:
CREATE TABLE local.db.table (id bigint, data string, col float);
- 向表中插入数据:
INSERT INTO local.db.table VALUES (1, 'a', 1.0), (2, 'b', 2.0), (3, 'c', 3.0);
- 查询表数据:
SELECT * FROM local.db.table;
例如,查询结果为:
-- 1 a 1.0 -- 2 b 2.0 -- 3 c 3.0
- 创建表:
- 创建分支指向当前快照:
ALTER TABLE local.db.table CREATE BRANCH test_branch;
查询分支数据:
SELECT * FROM local.db.table VERSION AS OF 'test_branch';
例如,查询结果为:
-- 1 a 1.0 -- 2 b 2.0 -- 3 c 3.0
- 修改Schema,删除“col”列并添加一个名为“new_col”的新列。
- 删除“col”列:
ALTER TABLE local.db.table DROP COLUMN col;
- 添加一个名为“new_col”的新列:
ALTER TABLE local.db.table ADD COLUMN new_col date;
- 向表中插入数据:
INSERT INTO local.db.table VALUES (4, 'd', date('2024-04-04')), (5, 'e', date('2024-05-05')); - 查询表数据:
SELECT * FROM local.db.table;
例如,查询结果为:
-- 1 a NULL -- 2 b NULL -- 3 c NULL -- 4 d 2024-04-04 -- 5 e 2024-05-05
- 删除“col”列:
- 查询分支快照:
- 方式一:
SELECT * FROM local.db.table.branch_test_branch;
- 方式二:
SELECT * FROM local.db.table VERSION AS OF 'test_branch';
例如,查询结果为:-- 1 a NULL -- 2 b NULL -- 3 c NULL
- 方式一:
- 向分支中写入数据,需要使用主表最新的Schema:
INSERT INTO local.db.table.branch_test_branch VALUES (6, 'e', date('2024-06-06')), (7, 'g', date('2024-07-07'));查分支询数据:
SELECT * FROM local.db.table VERSION AS OF 'test_branch';
例如,查询结果为:
-- 6 e 2024-06-06 -- 7 g 2024-07-07 -- 1 a NULL -- 2 b NULL -- 3 c NULL