如何在BigQuery同一项目中低成本精准复制大型数据表
BigQuery大型表低成本备份方案
你用CREATE TABLE AS SELECT的方式确实会扫描全表,产生高额查询费用,尤其是超大型表。下面几个方案都是无查询成本的精准备份方式:
1. 克隆表(推荐)
BigQuery的克隆表功能是字节级的写时复制,创建时不会扫描或复制全量数据,初始成本为0,且完全保留原表的架构、分区、集群设置、权限等所有属性。
执行SQL即可:
CREATE TABLE `myproject.mydataset.my_new_table` CLONE `myproject.mydataset.my_old_table`;
- 克隆表创建后与原表独立,后续原表的修改不会影响克隆表(本质是创建时刻的快照)。
- 存储成本优化:未修改时与原表共享存储,只有当任意一方有数据变更时,才会额外存储变更部分。
2. 使用bq命令行工具复制
通过bq cp命令执行表复制,同一项目同一区域内的复制属于元数据操作,无数据处理费用,速度极快:
bq cp myproject:mydataset.my_old_table myproject:mydataset.my_new_table
如果是跨区域复制会产生数据传输费用,但你是同一项目内备份,基本可以忽略。
3. 控制台(UI)可视化复制
直接在BigQuery控制台操作:
- 找到目标表,右键选择「复制」
- 填写目标数据集和表名,确认即可
这个操作和命令行、克隆SQL的本质一样,都是无扫描成本的元数据复制,适合不熟悉命令行或SQL的用户。
对比原方法的优势
- 无查询费用:避免了扫描全表产生的高额成本
- 精准度更高:完整保留原表的所有结构属性(分区、集群、权限等),
CREATE TABLE AS SELECT可能会丢失部分元数据 - 速度更快:大型表可以在几秒内完成备份
内容的提问来源于stack exchange,提问作者Sander van den Oord
相关产品推荐
相关产品推荐

