Lakehouse 历史数据回溯指南(Time Travel)

概述

在数据仓库运维中,误删数据、错误更新或需要对比历史状态是常见场景。云器 Lakehouse 提供 Time Travel 功能,允许你查询任意历史版本的数据,甚至恢复被删除的表。本指南按业务场景分类,帮助你快速掌握历史数据回溯与恢复方法。

涉及的 SQL 命令

命令用途适用场景
SELECT ... TIMESTAMP AS OF
SELECT ... TIMESTAMP AS OF
查询历史版本误操作后查看之前数据、审计
SHOW TABLES HISTORY
SHOW TABLES HISTORY
查看表删除历史确认误删表的信息
UNDROP TABLE
UNDROP TABLE
恢复被删除的表误删表后的快速恢复
RESTORE TABLE TO TIMESTAMP AS OF
RESTORE TABLE TO TIMESTAMP AS OF
恢复表到指定时间点错误更新后的数据回滚
DESC HISTORY
DESC HISTORY
查看表操作历史审计表变更操作

前置准备

以下示例使用模拟的订单表

orders_history
orders_history

-- 创建测试表 CREATE TABLE IF NOT EXISTS orders_history ( order_id INT, customer_id INT, amount DOUBLE, status STRING ); -- 插入初始数据 INSERT INTO orders_history VALUES (1, 101, 500, 'completed'), (2, 102, 300, 'pending');


查询历史版本数据

使用

TIMESTAMP AS OF
TIMESTAMP AS OF
查询表在指定时间点的数据状态。

-- 方式一:使用具体时间戳(推荐) -- 先通过 DESC HISTORY 获取历史版本时间点 DESC HISTORY orders_history; -- 再使用该时间点查询 SELECT * FROM orders_history TIMESTAMP AS OF '2024-06-01 10:30:00';

结果说明

  • 返回指定时间点的数据快照。
  • 如果时间点早于表的创建时间或超出 Time Travel 保留期,会报错
    version not found
    version not found

-- 方式二:使用相对时间(需确保该时间点有历史版本) SELECT * FROM orders_history TIMESTAMP AS OF (CURRENT_TIMESTAMP() - INTERVAL '1' MINUTE);


对比历史与当前数据

将历史数据与当前数据结合查询,快速识别数据变化。

-- 对比当前与 1 小时前的数据差异 SELECT 'current' as version, * FROM orders_history UNION ALL SELECT '1_hour_ago' as version, * FROM orders_history TIMESTAMP AS OF (CURRENT_TIMESTAMP() - INTERVAL '1' HOUR) ORDER BY order_id, version DESC;

适用场景

  • 审计数据变更
  • 排查错误更新
  • 验证 ETL 结果

恢复误删的表

误删表后,使用

UNDROP TABLE
UNDROP TABLE
快速恢复。

-- 模拟误删 DROP TABLE orders_history; -- 查看删除历史 SHOW TABLES HISTORY LIKE 'orders_history'; -- 恢复表 UNDROP TABLE orders_history;

结果验证

SELECT * FROM orders_history;


恢复到指定时间点

使用

RESTORE TABLE
RESTORE TABLE
将表数据回滚到指定时间点,适用于错误更新场景。

-- 错误更新 UPDATE orders_history SET status = 'cancelled'; -- 方式一:使用 DESC HISTORY 中的具体时间点(推荐) RESTORE TABLE orders_history TO TIMESTAMP AS OF '2024-06-01 10:30:00'; -- 方式二:使用相对时间(需确保该时间点表已存在) RESTORE TABLE orders_history TO TIMESTAMP AS OF (CURRENT_TIMESTAMP() - INTERVAL '5' MINUTE);

注意事项

  • RESTORE TABLE
    RESTORE TABLE
    会覆盖当前数据,请谨慎操作。
  • 建议在恢复前先将当前数据备份到新表:
    CREATE TABLE backup AS SELECT * FROM orders_history;
    CREATE TABLE backup AS SELECT * FROM orders_history;
  • 相对时间恢复仅在表创建时间早于该时间点时有效。新创建的表无法使用相对时间恢复。

查看表操作历史

使用

DESC HISTORY
DESC HISTORY
查看表的所有变更记录。

-- 查看表历史 DESC HISTORY orders_history;

返回信息

  • version
    version
    :版本号
  • time
    time
    :操作时间
  • operation
    operation
    :操作类型(INSERT, UPDATE, DELETE 等)
  • user
    user
    :执行用户

清理测试数据

完成回溯验证后,建议清理测试表:

-- 删除测试表 DROP TABLE IF EXISTS orders_history;


注意事项

  1. 保留周期配置:通过
    data_retention_days
    data_retention_days
    参数设置,默认 1 天。重要表建议设置为 7 天或更长。
  2. 存储成本:Time Travel 会保留历史版本数据,占用额外存储空间。
  3. Dynamic Table:Dynamic Table 同样支持 Time Travel,但刷新后历史版本会被覆盖。
  4. RESTORE 限制
    RESTORE TABLE
    RESTORE TABLE
    不支持物化视图(Materialized View),仅适用于普通表和动态表。

相关文档

联系我们
预约咨询
微信咨询
电话咨询