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

如何在BigQuery中高效实现动态多表UNION ALL存储过程?

BigQuery 动态合并多表的存储过程实现

要实现基于可变表名数组合并数据的存储过程,核心是用动态SQL拼接UNION ALL语句,具体实现如下:

完整存储过程代码

CREATE OR REPLACE PROCEDURE MY_DATASET.merge_tables_from_array()
BEGIN
  DECLARE dataset STRING DEFAULT "MY_DATASET";
  DECLARE tablesArray ARRAY<STRING>;
  DECLARE union_sql STRING;

  -- 动态赋值表名数组,可根据需求改成从元数据读取或外部参数传入
  SET tablesArray = ['TABLE_ONE','TABLE_TWO'];

  -- 拼接带UNION ALL的完整查询语句
  SET union_sql = ARRAY_TO_STRING(
    ARRAY(
      SELECT CONCAT('SELECT * FROM `', dataset, '.', table_name, '`')
      FROM UNNEST(tablesArray) AS table_name
    ),
    '\nUNION ALL\n'
  );

  -- 可选:将合并结果写入目标表
  -- EXECUTE IMMEDIATE CONCAT('CREATE OR REPLACE TABLE `', dataset, '.merged_result` AS ', union_sql);

  -- 执行动态查询(仅查询用此句,存表则用上面的语句)
  EXECUTE IMMEDIATE union_sql;
END;

关键逻辑说明

  • 用UNNEST遍历表名数组,为每个表生成对应的SELECT * FROM 数据集.表名语句
  • ARRAY_TO_STRING把所有SELECT语句用UNION ALL拼接成完整的查询SQL
  • EXECUTE IMMEDIATE是BigQuery执行动态SQL的核心命令,用来运行拼接好的语句
  • 如果表结构存在差异,建议替换SELECT *为具体列名,避免因列数/列类型不匹配报错
  • 表名数组可以灵活调整,比如改成从INFORMATION_SCHEMA.TABLES读取符合条件的表名,或者通过存储过程参数传入

内容的提问来源于stack exchange,提问作者build

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 16:15:41