SELECT * FROM orders_clone_backup ORDER BY order_id;
order_id
customer_id
amount
order_date
1
101
500
2024-06-01
2
102
300
2024-06-02
3
103
800
2024-06-03
💡 提示:零拷贝克隆是 Lakehouse 的核心特性,克隆操作瞬间完成,无论表有多大。
时间点克隆
使用
AT
AT
子句克隆表在指定时间点的状态,常用于恢复到某个历史版本。
-- 克隆 1 分钟前的表状态
CREATE TABLE orders_clone_history CLONE orders_clone
TIMESTAMP AS OF (CURRENT_TIMESTAMP() - INTERVAL '1' MINUTE);
适用场景:
误操作后恢复到之前的状态
审计历史数据
对比数据变化
⚠️ 注意:时间点必须在 Time Travel 保留周期内(默认 1 天)。
仅克隆表结构
使用
LIKE
LIKE
语法克隆表结构但不复制数据,适合创建空表用于后续数据加载。
-- 仅克隆表结构
CREATE TABLE orders_clone_empty LIKE orders_clone;
结果验证:
SELECT COUNT(*) FROM orders_clone_empty;
COUNT(*)
0
克隆后验证
克隆完成后,建议验证克隆表与源表的一致性。
-- 对比行数
SELECT
(SELECT COUNT(*) FROM orders_clone) as source_count,
(SELECT COUNT(*) FROM orders_clone_backup) as clone_count;
结果说明:
source_count
clone_count
3
3
克隆与独立修改
克隆表创建后是独立的,对克隆表的修改不会影响源表。
-- 向克隆表插入新数据
INSERT INTO orders_clone_backup VALUES (4, 104, 600, '2024-06-04');
-- 对比源表和克隆表
SELECT 'source' as tbl, COUNT(*) as cnt FROM orders_clone
UNION ALL
SELECT 'clone' as tbl, COUNT(*) as cnt FROM orders_clone_backup;
-- 删除测试表
DROP TABLE IF EXISTS orders_clone;
DROP TABLE IF EXISTS orders_clone_backup;
DROP TABLE IF EXISTS orders_clone_history;
DROP TABLE IF EXISTS orders_clone_empty;