You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 01:13:24