如何在BigQuery中查询指定前缀表的记录数并合并结果?
BigQuery批量统计指定前缀表的记录数
要实现合并结果的需求,核心是先把所有表的统计语句拼接成一个带UNION ALL的完整查询,再一次性执行,而非循环执行单个查询。以下是修正后的实现方案:
DECLARE query_string STRING DEFAULT ''; -- 遍历符合前缀条件的表,拼接统计语句 FOR record IN ( SELECT FORMAT( 'SELECT COUNT(*) AS cnt_rows, "%s" AS t_name FROM `%s.%s`', table_name, table_schema, table_name ) AS MY_STMNT FROM `<<my-project-id>>.<<my-dataset>>.INFORMATION_SCHEMA.TABLES` WHERE table_name LIKE "my-table-prefix__YYYY-MM-DDT%" ) DO SET query_string = CONCAT(query_string, record.MY_STMNT, ' UNION ALL '); END FOR; -- 移除末尾多余的UNION ALL(如果存在匹配的表) IF query_string != '' THEN SET query_string = LEFT(query_string, LENGTH(query_string) - LENGTH(' UNION ALL ')); -- 执行最终查询 EXECUTE IMMEDIATE query_string; END IF;
关键说明:
- 用
FORMAT()函数替代手动拼接字符串,简化语法并避免转义错误 - 循环中逐步将单表统计语句拼接到变量,通过
UNION ALL实现结果合并 - 循环结束后清理末尾多余的连接符,保证最终查询语法合法
- 增加空值判断,避免无匹配表时执行无效查询
内容的提问来源于stack exchange,提问作者TPPZ
相关产品推荐
相关产品推荐

