如何在Big Query中将两个分时段表合并为一个综合表?
在BigQuery中合并两个表的方法
场景1:一次性创建新的综合表
如果两个表字段结构完全一致(字段名、数据类型都匹配),直接用UNION ALL拼接数据并创建新表是最高效的方式:
CREATE OR REPLACE TABLE `your_project.your_dataset.combined_table` AS SELECT * FROM `your_project.your_dataset.table_9_11` UNION ALL SELECT * FROM `your_project.your_dataset.table_12_1`;
- 用
CREATE OR REPLACE会覆盖已存在的同名表,若不想覆盖,去掉OR REPLACE即可(但表已存在时会报错) - 如果需要去除两个表中的重复数据,把
UNION ALL换成UNION DISTINCT(注意:去重会增加计算开销,确认有必要再用)
场景2:将一个表的数据追加到另一个表
如果不想创建新表,而是把其中一个表的数据合并到另一个已有表中,用INSERT INTO:
INSERT INTO `your_project.your_dataset.table_9_11` SELECT * FROM `your_project.your_dataset.table_12_1`;
- 同样要求两个表结构完全匹配,否则会报错
处理表结构不一致的情况
如果两个表字段名/数据类型不匹配,需要手动对齐字段:
CREATE OR REPLACE TABLE `your_project.your_dataset.combined_table` AS -- 对齐字段名和类型,确保SELECT的字段顺序、类型一致 SELECT user_id, username, CAST(register_time AS TIMESTAMP) AS register_time -- 转换数据类型 FROM `your_project.your_dataset.table_9_11` UNION ALL SELECT user_id, user_name AS username, -- 字段名别名对齐 register_time FROM `your_project.your_dataset.table_12_1`;
进阶:合并分区/集群表
如果原表是分区或集群表,创建综合表时可以保留这些特性:
CREATE OR REPLACE TABLE `your_project.your_dataset.combined_table` PARTITION BY DATE(register_time) -- 按时间分区,和原表一致 CLUSTER BY user_id -- 按user_id集群 AS SELECT * FROM `your_project.your_dataset.table_9_11` UNION ALL SELECT * FROM `your_project.your_dataset.table_12_1`;
内容的提问来源于stack exchange,提问作者anna
相关产品推荐
相关产品推荐

