如何在BigQuery中复制分区表并保留各行对应的分区时间
BigQuery分区表复制(保留原分区时间+表结构完全一致)实现方案
该操作完全可以实现,以下是两种常用的稳定操作方式:
方式1:使用原生表复制功能(零代码,最便捷)
该操作会1:1复刻源表的字段结构、分区配置、所有行的分区时间,不需要额外调整参数:
- 控制台操作:进入源表详情页,点击顶部「复制」按钮,选择目标项目、目标数据集,填写目标表名后确认即可
- bq命令行操作:执行以下命令即可
bq cp 你的源项目ID:源数据集名.源表名 你的目标项目ID:目标数据集名.目标表名
方式2:使用CTAS语句创建(灵活支持过滤/修改逻辑的场景)
如果需要同步的同时附带数据过滤等自定义逻辑,可以用CREATE TABLE AS SELECT语句,注意保持分区规则和源表完全一致即可:
源表为业务字段分区场景
比如源表按event_time字段按天分区,示例代码如下:
CREATE OR REPLACE TABLE `你的项目ID.你的数据集.目标表名` -- 此处分区规则完全照搬源表的配置即可,例如按小时分区就替换为PARTITION BY TIMESTAMP_TRUNC(event_time, HOUR) PARTITION BY DATE(event_time) AS SELECT * FROM `你的项目ID.你的数据集.源表名`;
源表为摄入时间(Ingestion Time)分区场景
需要把系统内置的分区伪列_PARTITIONTIME同步到目标表,示例代码如下:
CREATE OR REPLACE TABLE `你的项目ID.你的数据集.目标表名` PARTITION BY _PARTITIONTIME AS SELECT *, _PARTITIONTIME FROM `你的项目ID.你的数据集.源表名`;
补充注意:如果目标表已经提前创建,需要先确认目标表的字段顺序、类型、分区规则和源表完全一致,再执行
INSERT INTO 目标表 SELECT * FROM 源表写入即可,摄入时间分区场景同样需要把_PARTITIONTIME加入查询字段列表。
内容的提问来源于stack exchange,提问作者user9068370
相关产品推荐
相关产品推荐

