在数据仓库运维中,误删数据、错误更新或需要对比历史状态是常见场景。云器 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);
⚠️ 注意:> * 相对时间查询(如
CURRENT_TIMESTAMP() - INTERVAL '1' MINUTE
CURRENT_TIMESTAMP() - INTERVAL '1' MINUTE
)仅在表创建时间早于该时间点时有效。新创建的表无历史版本,会报错。
Time Travel 保留周期默认为 1 天,最长可配置为 90 天。超出保留期的数据无法查询。
对比历史与当前数据
将历史数据与当前数据结合查询,快速识别数据变化。
-- 对比当前与 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;
-- 错误更新
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;
💡 提示:Lakehouse 支持
UNDROP TABLE
UNDROP TABLE
,误删后可在保留期内恢复。
注意事项
保留周期配置:通过
data_retention_days
data_retention_days
参数设置,默认 1 天。重要表建议设置为 7 天或更长。
存储成本:Time Travel 会保留历史版本数据,占用额外存储空间。
Dynamic Table:Dynamic Table 同样支持 Time Travel,但刷新后历史版本会被覆盖。