如何在Google BigQuery中用SQL动态UNION多个OUT格式表?
纯SQL实现BigQuery动态UNION合并OUT前缀数据表
完全可行,利用BigQuery的**动态SQL(EXECUTE IMMEDIATE)**特性,无需外部工具就能自动合并所有符合命名规则的表,具体实现如下:
核心实现代码
DECLARE union_sql STRING; -- 自动拼接所有OUT开头表的SELECT语句,用UNION ALL连接 SET union_sql = ( SELECT STRING_AGG( CONCAT('SELECT * FROM `gbqstuff.', table_id, '`'), ' UNION ALL ' ) FROM gbqstuff.__TABLES__ WHERE table_id LIKE 'OUT%' ); -- 执行动态生成的合并语句 EXECUTE IMMEDIATE union_sql;
关键细节调整
- 去重需求:如果需要合并时自动去重,将
UNION ALL替换为UNION即可(注意:UNION性能低于UNION ALL,无去重需求优先用前者) - 表结构校验:确保所有
OUT前缀的表字段结构完全一致,否则UNION操作会报错 - 时间范围筛选:如果只想合并指定时间范围内的表(比如近12个月),可以通过解析表名中的Unix时间戳过滤:
WHERE table_id LIKE 'OUT%' AND PARSE_TIMESTAMP('%s', SUBSTR(table_id, 4)) >= TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 12 MONTH) - 封装调用:可以将这段逻辑封装为BigQuery存储过程,方便PowerBI等工具直接调用执行。
内容的提问来源于stack exchange,提问作者John Leighow Tagban
相关产品推荐
相关产品推荐

