Lakehouse Time Travel 功能

Lakehouse 的 Time Travel 功能允许用户在定义的时间段内的任何时间点访问历史数据,包括已更改或删除的数据。

概述

Time Travel 基于 Lakehouse 的 MVCC(多版本并发控制)机制实现,每次数据变更都会生成新的版本。用户可以通过指定时间点或版本号来查询历史数据。

应用场景

  1. 恢复误删/误改数据:通过
    UNDROP TABLE
    UNDROP TABLE
    恢复被删除的表,或通过
    RESTORE TABLE
    RESTORE TABLE
    回滚到指定时间点
  2. 数据对比分析:比较不同时间点的数据变化
  3. 审计与合规:追溯历史数据状态

Time Travel 保留周期

Lakehouse 表的历史状态默认保留 1 天(24 小时)。如需保留更长时间,可为每个表单独设置:

-- 修改保留周期为 7 天 ALTER TABLE tablename SET PROPERTIES ('data_retention_days'='7'); -- 建表时指定保留周期 CREATE TABLE orders (id INT, amount DECIMAL(10,2)) PROPERTIES ('data_retention_days'='30');

保留周期取值范围:0-90 天。设置为 0 表示不保留历史版本。

查询语法

SELECT * FROM <table_name> TIMESTAMP AS OF <timestamp_expression>;

timestamp_expression
timestamp_expression
支持以下形式:

  • 时间戳字符串字面量:
    '2024-01-15 14:49:18'
    '2024-01-15 14:49:18'
  • CAST 转换:
    CAST('2024-01-15 14:49:18' AS TIMESTAMP)
    CAST('2024-01-15 14:49:18' AS TIMESTAMP)

查看版本历史

DESC HISTORY <table_name>;

返回结果包含版本号(version)、时间(time)、行数(total_rows)、操作类型(operation)等信息。

使用示例

示例 1:查询历史数据

CREATE TABLE birds ( id INT, name VARCHAR(50), wingspan_cm FLOAT, colors STRING ); INSERT INTO birds VALUES (1, 'Sparrow', 15.5, 'Brown'), (2, 'Blue Jay', 20.2, 'Blue'); -- 插入更多数据 INSERT INTO birds VALUES (3, 'Cardinal', 22.1, 'Red'), (4, 'Robin', 18.7, 'Red,Brown'); -- 查看版本历史 DESC HISTORY birds; +---------+-------------------------+------------+-------------+----------+----+ | version | time | total_rows | total_bytes | user | op | +---------+-------------------------+------------+-------------+----------+----+ | 3 | 2024-12-23 16:41:47.831 | 4 | 5786 | UAT_TEST | IN | | 2 | 2024-12-23 16:36:04.426 | 2 | 2859 | UAT_TEST | IN | | 1 | 2024-12-23 16:36:04.233 | 0 | 0 | UAT_TEST | CR | +---------+-------------------------+------------+-------------+----------+----+ -- 查询 version 2 时的数据(2 条记录) SELECT * FROM birds TIMESTAMP AS OF '2024-12-23 16:36:04.426'; +----+----------+-------------+---------+ | id | name | wingspan_cm | colors | +----+----------+-------------+---------+ | 1 | Sparrow | 15.5 | Brown | | 2 | Blue Jay | 20.2 | Blue | +----+----------+-------------+---------+

示例 2:历史数据 JOIN

-- 当前版本查询(4 个学生) SELECT s.name, s.class, sc.score FROM students s INNER JOIN scores sc ON s.name = sc.name; -- 查询历史版本(2 个学生) SELECT s.name, s.class, sc.score FROM students TIMESTAMP AS OF '2024-12-23 16:15:22.957' s INNER JOIN scores sc ON s.name = sc.name;

示例 3:恢复被 TRUNCATE 的数据

-- 创建表并插入数据 CREATE TABLE birds (id INT, name VARCHAR(50)); INSERT INTO birds VALUES (1, 'Sparrow'), (2, 'Blue Jay'); -- 清空数据 TRUNCATE TABLE birds; -- 通过 Time Travel 查询删除前的数据 SELECT * FROM birds TIMESTAMP AS OF '2024-01-15 10:00:00'; -- 恢复数据 INSERT OVERWRITE TABLE birds SELECT * FROM birds TIMESTAMP AS OF '2024-01-15 10:00:00';

示例 4:备份历史数据到新表

CREATE TABLE birds_backup AS SELECT * FROM birds TIMESTAMP AS OF '2024-01-15 10:00:00';

使用限制

  • View 不支持 Time Travel 查询
  • 外部 Schema 不支持 Time Travel
  • RealtimeStream 实时写入未提交的数据不支持 Time Travel 查询
  • 查询时间点不能早于表创建时间,也不能超出数据保留周期
  • 未来时间点不可查询

权限要求

用户需要对表具有

SELECT
SELECT
权限。

相关文档

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