跳到主要内容
版本:V1.1.0

FORK TABLE

描述

FORK TABLE 语句用于在指定的一致性快照时刻,为源表创建一个逻辑等价的目标表副本。目标表可作为独立的表对象进行后续读写操作,且目标表与源表相互隔离,任一表上的写入都不会影响另一方。

与传统“全量拷贝数据”的方式相比,Fork Table 在保证快照一致性语义的前提下,会尽量复用已有的数据组织与存储结构,从而降低大表复制的时间与资源开销。

提示

在 seekdb V1.1.0 版本中,Fork Table 为实验特性,请谨慎用于生产环境。

权限要求

执行 FORK TABLE 通常需要满足以下权限要求:

  • 对源表的访问权限(例如 SELECT)。
  • 在目标表所在数据库创建表的权限(例如 CREATE)。

后续在目标表上执行读写或 DDL 操作时,需要相应的表/库权限。

语法

FORK TABLE source_table TO destination_table;

参数解释

参数描述
source_table源表名。支持 db.tabletable(使用当前数据库)。
destination_table目标表名。支持 db.tabletable(使用当前数据库)。

行为说明

  • 快照一致性:目标表的数据视图与源表在 Fork 时刻的一致性快照保持一致。Fork 之后源表发生的新增/修改/删除不会影响目标表。

  • 读写隔离:目标表与源表相互独立。对目标表的写入不会影响源表;对源表的写入也不会影响目标表。

  • 渐进可用:系统会优先创建目标表对象,使其尽快可访问;在后台可能还会持续进行必要的数据组织工作,但对外始终提供一致的快照语义与可用性。

  • 性能特征:在典型小规模场景下,FORK TABLE 可在百毫秒级完成目标表创建并立即可用。大表/复杂负载场景下,后台处理可能耗时更长。

使用限制及注意事项

在 seekdb V1.1.0 中,Fork Table 存在以下使用限制及注意事项:

  • 与 DDL 互斥:Fork 过程中通常不影响源表的日常读写,但需注意,此过程中源表和目标表与 DDL 操作互斥,直至 Fork 操作结束。建议避免在同一时间对相关表执行 CREATE/ALTER/DROP/RENAME 等 DDL。

  • 目标表必须不存在:若目标表已存在,系统会报错。请先删除已存在的目标表。

  • 对象类型限制:不支持对部分对象进行 Fork,包括内部表、临时表、物化视图、触发器、外键和回收站中的表。

  • 索引相关限制

    • 不支持语义索引、IVF 索引、空间索引。
    • 不支持对包含全局索引的分区表执行 Fork。
    • 不支持在 Fork 构建过程中构建索引。若需要调整索引策略,请在 Fork 完成后对目标表执行 CREATE INDEX/ALTER TABLE 等操作。
    • 当源表包含 HNSW 向量索引时,Fork 操作可能带来额外内存压力。建议在资源紧张的环境中先进行小规模验证,并做好监控与容量规划。
  • 存储形态限制:不支持 Fork 列存表。

示例

示例一:创建副本表并进行读写

-- 创建表副本
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_branch_backup, t1_branch_v2 TO t1;
-- DROP TABLE t1_branch_backup;

示例三:A/B 实验与沙箱验证

-- 以线上表为基线创建实验表
FORK TABLE t_search_prod TO t_search_exp;

-- 在实验表上进行变更与评估(索引/元数据/算法相关参数等)
-- ... 对 t_search_exp 执行实验性写入与查询评估 ...

-- 实验不通过:停止使用实验表并回到线上表
DROP TABLE t_search_exp;

常见问题

Q1:Fork 完成后,源表的后续变更会影响目标表吗?

不会。目标表基于 Fork 时刻的一致性快照创建,源表之后发生的变更不会影响目标表。

Q2:修改目标表会影响源表吗?

不会。目标表与源表相互隔离,任一表的写入都不会影响另一方。

Q3:为什么 Fork 完全结束前目标表就可以使用?

系统会优先完成目标表对象的创建并提供访问能力;在后台数据组织过程中,系统仍保证对外提供一致的快照语义与可用性。同时,FORK TABLE 在创建阶段会尽量复用既有的数据组织与存储结构,在大表场景下通常也能保持较快的创建速度。

Q4:FORK TABLE 与传统表复制有何区别?

FORK TABLE 在满足一致性语义的前提下尽量复用已有的数据组织与存储结构,从而减少全量数据拷贝带来的时间与资源开销。