如何在BigQuery中合并12个同结构月度表为永久表?
在BigQuery中合并同结构月度表为永久表
如果你有12个schema完全一致的月度表,要合并成一张可长期访问的永久表,BigQuery里有两种高效的实现方式:
方法一:逐个表UNION ALL(表名无规律时用)
直接用CREATE OR REPLACE TABLE搭配UNION ALL,一次性将所有表的数据合并到新的永久表中:
CREATE OR REPLACE TABLE `你的项目ID.目标数据集.合并后的永久表名` AS SELECT * FROM `你的项目ID.源数据集.表_202301` UNION ALL SELECT * FROM `你的项目ID.源数据集.表_202302` UNION ALL SELECT * FROM `你的项目ID.源数据集.表_202303` UNION ALL SELECT * FROM `你的项目ID.源数据集.表_202304` UNION ALL SELECT * FROM `你的项目ID.源数据集.表_202305` UNION ALL SELECT * FROM `你的项目ID.源数据集.表_202306` UNION ALL SELECT * FROM `你的项目ID.源数据集.表_202307` UNION ALL SELECT * FROM `你的项目ID.源数据集.表_202308` UNION ALL SELECT * FROM `你的项目ID.源数据集.表_202309` UNION ALL SELECT * FROM `你的项目ID.源数据集.表_202310` UNION ALL SELECT * FROM `你的项目ID.源数据集.表_202311` UNION ALL SELECT * FROM `你的项目ID.源数据集.表_202312`;
CREATE OR REPLACE TABLE:如果目标表已存在则覆盖,若想避免覆盖,去掉OR REPLACE(但表已存在时会报错)- 替换语句中的项目ID、数据集名、表名为你实际的名称即可
方法二:通配符匹配(表名有规律时用)
如果你的表名是按月份命名的(比如sales_202301、sales_202302...),可以用通配符简化代码,不用逐个写UNION ALL:
CREATE OR REPLACE TABLE `你的项目ID.目标数据集.合并后的永久表名` AS SELECT *, _TABLE_SUFFIX AS data_month -- 可选:添加列记录数据来源的月份 FROM `你的项目ID.源数据集.sales_*` WHERE _TABLE_SUFFIX BETWEEN '202301' AND '202312';
_TABLE_SUFFIX是BigQuery的内置变量,会自动匹配通配符*对应的表名后缀(这里就是月份)- 用
WHERE子句限定只合并指定12个月的表,避免误包含其他表
关键注意事项
- 确保所有源表的schema完全一致:列名、数据类型、顺序必须匹配,否则会出现数据类型不兼容或列错位的问题
- 如果需要区分各月份的数据,一定要添加
data_month这类标识列,后续查询时更方便筛选 - 永久表会存储在你指定的数据集里,需要确保你拥有该数据集的创建表权限
- 若合并后的数据量较大,建议给永久表设置分区(比如按月份分区),提升后续查询的性能:
CREATE OR REPLACE TABLE `你的项目ID.目标数据集.合并后的永久表名` PARTITION BY DATE(PARSE_DATE('%Y%m', data_month)) -- 按月份分区 AS SELECT *, _TABLE_SUFFIX AS data_month FROM `你的项目ID.源数据集.sales_*` WHERE _TABLE_SUFFIX BETWEEN '202301' AND '202312';
内容的提问来源于stack exchange,提问作者Baxter Stockman
相关产品推荐
相关产品推荐

