更新时间:2025-12-10 GMT+08:00
分享

创建Tag和Branch

本章节介绍如何创建Iceberg Tag和Branch。Tag可用于保留重要的历史快照以用于审计目的。

创建Tag

Tag可用于保留重要的历史快照以用于审计目的。可登录spark-sql客户端参考以下操作创建Tag:

  • 每周保留1个快照,持续1个月。
    1. 获取current-snapshot-id:
      DESCRIBE EXTENDED local.db.table;

      例如,获取到的current-snapshot-id为“2767263131158701491”。

    2. 可以通过每周标记快照并将Tag保留期设置为一个月来实现。快照将被保留,且分支引用本身将保留1周。
      ALTER TABLE local.db.table CREATE TAG `EOW-01`  AS OF VERSION {current-snapshot-id} RETAIN 7 DAYS;
  • 每月保留1个快照,持续6个月。
    可以通过每月标记快照并将Tag保留期设置为6个月来实现:
    ALTER TABLE local.db.table CREATE TAG `EOM-01` AS OF VERSION {current-snapshot-id} RETAIN 180 DAYS;
  • 每年保留1个快照,永久保存。
    可以通过标记年度快照来实现。Branch和Tag的默认保留期是永久。
    ALTER TABLE local.db.table CREATE TAG `EOY-2025` AS OF VERSION {current-snapshot-id};

创建Branch

创建Branch的流程如下:

  1. 设置“write.wap.enabled”为“true”以开启创建和切换分支功能:
    ALTER TABLE local.db.table SET TBLPROPERTIES ( 'write.wap.enabled'='true');
  2. 基于主表创建分支
    例如,基于快照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;
  3. 切换分支并执行写入操作

    可以切换分支去验证表功能或者数据质量等,不影响主表。

    切换分支:

    SET spark.wap.branch = audit-branch;

    写入数据:

    INSERT INTO local.db.table VALUES (3, 'c');
  4. 指定某个分支更新主表的最新状态
    CALL local.system.fast_forward('local.db.table', 'main', 'audit-branch');
  5. 主表执行schema evolution对所有分支都生效。
  1. 登录安装了Spark客户端的节点,执行以下命令登录Spark客户端:

    1. 切换至客户端安装目录:
      cd 客户端安装目录
    2. 配置环境变量:
      source bigdata_env
    3. 加载Spark组件环境变量:
      source Spark/component_env
    4. 认证用户,如果集群未启用Kerberos认证(普通模式)请跳过此操作:
      kinit 组件业务用户

  2. 创建表并插入数据。

    1. 创建表:
      CREATE TABLE local.db.table (id bigint, data string, col float);
    2. 向表中插入数据:
      INSERT INTO local.db.table VALUES (1, 'a', 1.0), (2, 'b', 2.0), (3, 'c', 3.0);
    3. 查询表数据:
      SELECT * FROM local.db.table;

      例如,查询结果为:

      -- 1   a   1.0 
      -- 2   b   2.0 
      -- 3   c   3.0

  3. 创建分支指向当前快照:

    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

  4. 修改Schema,删除“col”列并添加一个名为“new_col”的新列。

    1. 删除“col”列:
      ALTER TABLE local.db.table DROP COLUMN col; 
    2. 添加一个名为“new_col”的新列:
      ALTER TABLE local.db.table ADD COLUMN new_col date; 
    3. 向表中插入数据:
      INSERT INTO local.db.table VALUES (4, 'd', date('2024-04-04')), (5, 'e', date('2024-05-05')); 
    4. 查询表数据:
      SELECT * FROM local.db.table;

      例如,查询结果为:

      -- 1   a   NULL 
      -- 2   b   NULL 
      -- 3   c   NULL 
      -- 4   d   2024-04-04 
      -- 5   e   2024-05-05

  5. 查询分支快照:

    • 方式一:
      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

  6. 向分支中写入数据,需要使用主表最新的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

相关文档