如何在BigQuery中获取多表不同日期列的最大日期值?
在BigQuery中批量获取多表日期/时间戳列的最大值
首先修正你用来筛选目标表和列的查询(注意BigQuery中字符串值需加单引号,且INFORMATION_SCHEMA的引用要加反引号):
SELECT table_name, column_name FROM `db.INFORMATION_SCHEMA.COLUMNS` WHERE data_type IN ('TIMESTAMP', 'DATE') AND column_name NOT IN ('ingestion_date')
接下来可以用动态SQL批量生成查询,一次性获取所有目标列的最大值:
DECLARE sql_str STRING; -- 拼接所有表列的最大值查询语句 SET sql_str = ( SELECT STRING_AGG( FORMAT( 'SELECT "%s" AS table_name, "%s" AS column_name, MAX(%s) AS max_value FROM `db.%s`', table_name, column_name, column_name, table_name ), '\nUNION ALL\n' ) FROM `db.INFORMATION_SCHEMA.COLUMNS` WHERE data_type IN ('TIMESTAMP', 'DATE') AND column_name NOT IN ('ingestion_date') ); -- 执行动态生成的SQL EXECUTE IMMEDIATE sql_str;
说明:
- 脚本会自动遍历所有符合条件的表和列,为每个列生成
MAX()查询,并用UNION ALL合并结果 - 结果返回三列:
table_name(表名)、column_name(列名)、max_value(该列的最大日期/时间戳) - 如果某个表或列无数据,
MAX()会返回NULL,可按需添加COALESCE替换默认值
内容的提问来源于stack exchange,提问作者Ilario
相关产品推荐
相关产品推荐

