基于湖库一体架构,统一管理结构化、半结构化与非结构化等多模态数据,一个系统承载事务处理、实时分析与 AI 工作负载。
Fork Table
更新时间:2026-09-15 17:00:16
说明
本功能在当前版本为实验特性。
Fork Table 基于源表在某个快照时刻的数据,创建一个全新的目标表。目标表在逻辑上等价于源表在该快照时刻的完整副本(包括表结构和数据),但作为独立的表对象存在,后续的读写操作互不影响。
语法
FORK TABLE source_table TO destination_table;
参数说明
| 参数 | 说明 |
|---|---|
source_table |
源表名,支持 db.table 或 table(使用当前库) |
destination_table |
目标表名,支持 db.table 或 table(使用当前库) |
示例场景
创建副本表并进行读写
快速创建表副本,副本可独立读写,不影响源表。
-- 创建副本
FORK TABLE t1 TO t1_fork;
-- 查询副本
SELECT count(*) FROM t1_fork;
-- 写入副本(不影响源表 t1)
INSERT INTO t1_fork VALUES (...);
数据版本与分支管理
基于主版本派生分支,在分支上实验,随时可回滚或推广。
-- 步骤 1:创建分支(数据基线为 Fork 时刻的快照)
FORK TABLE t1 TO t1_branch_v2;
-- 步骤 2:在分支上执行变更(数据修订、特征更新、索引调整等)
-- ... 对 t1_branch_v2 执行 DML ...
-- 步骤 3a:回滚——丢弃分支
DROP TABLE t1_branch_v2;
-- 步骤 3b:推广——将分支切换为主版本(通过原子 RENAME)
-- RENAME TABLE t1 TO t1_backup, t1_branch_v2 TO t1;
-- DROP TABLE t1_backup;
A/B 实验与沙箱验证
基于线上表创建隔离副本,在副本中安全实验,完成后按需保留或丢弃。
-- 创建实验表
FORK TABLE t_search_prod TO t_search_exp;
-- 在实验表上变更与评估
-- ... 对 t_search_exp 执行写入与查询评估 ...
-- 实验不通过:丢弃实验表
DROP TABLE t_search_exp;
核心特性
说明
V4.6.2.1 版本起支持并行 Fork 和后台并行处理功能。
| 特性 | 说明 |
|---|---|
| 高效创建 | 复用源表的数据组织和存储结构,避免全量数据复制,适合大表场景 |
| 在线执行 | Fork 过程中源表可以继续进行 DML 读写 |
| 独立可写 | 目标表可独立执行 INSERT、UPDATE、DELETE、DDL 等操作,不影响源表 |
| 快照一致性 | 目标表的数据基于系统自动选取的快照时刻,保证数据一致性 |
| 渐进可用 | 目标表创建后即可访问,后台数据组织的完善不影响快照语义和可用性 |
| 增量存储 | 目标表后续写入的数据会产生额外存储开销 |
| 并行 Fork | 同一个源端支持同时 Fork 到多个目标端 |
| 后台并行处理 | 后台数据处理采用多线程并行执行,提升 Fork 整体完成效率 |
性能说明
- 在典型小规模场景下,
FORK TABLE可在百毫秒级完成目标表创建并提供访问。 - 目标表可用后,数据组织可能仍在后台继续完善。
- 在大事务、数据形态复杂或资源紧张等情况下,处理时间可能变长,但不影响对外的快照一致性和隔离语义。
- 对于单表多分区场景,系统已优化 Fork 发起时的统计信息处理,降低了发起延迟。
权限说明
发起 Fork Table 需要同时具备:
- 源表的
SELECT权限(全局、库级或表级权限均可满足) - 目标库的
CREATE权限
Fork 只复制 schema 和数据,不复制源表上的授权。目标表按照普通新建对象判断权限。Fork 只能在当前租户内执行,不支持 sys tenant。
操作互斥
Fork Table 执行期间,源表和目标表会与相关 DDL 操作互斥,直至 Fork 完成收尾。Fork 期间,源表仍可继续进行 DML 读写。
使用限制
当前版本有如下限制:
- 在当前 Fork 操作的后台处理结束前,不支持级联的 Fork
不支持的表类型和索引:
- 内部表、临时表
- 含外键的表
- 列存表
- HNSW 向量索引、IVF 索引、语义索引、空间索引、混合索引、列存索引、search index、异步索引
- 带有全局索引的分区表
- 建有物化视图日志的表,或被物化视图引用(作为增量刷新数据源)的表
其他限制:
- 目标表已存在或与外键占位父表(mock FK parent table)重名时,系统会报错
- 不支持 Fork 已进入回收站的表
- 不支持 Fork 系统或内部表
注意事项
- Fork 操作不影响源表。源表在 Fork 之后继续正常提供读写服务。
- 目标表创建后与源表完全独立,对任一方的修改不会反映到另一方。
- Fork 操作选取的快照时刻由系统自动决定,用户无需(也无法)指定具体时间点。
- 源表被删除或数据被清理前,Fork 出的目标表可以正常读取。