如何在Athena中一次性获取多表记录数?动态表名是否支持?
Athena动态表名查询问题解答
Athena不支持你写的这种直接用字段值作为表名的动态引用方式——因为SQL是静态解析的,执行阶段没法把字符串类型的字段值转换成实际表名,所以你的查询会报错。
解决方法
你可以通过以下方式批量获取多个表的记录数:
生成批量查询语句
先执行下面的查询,生成每个表对应的COUNT统计语句:SELECT CONCAT('SELECT ''', table_name, ''' AS table_name, COUNT(*) AS record_count FROM "', table_name, '";') FROM information_schema.tables WHERE table_name LIKE 'prefix_%';运行后会得到一系列独立的SELECT语句,你可以把这些语句复制出来逐个执行,或者用
UNION ALL拼接成一个大查询一次性执行(注意表数量过多时可能会有性能问题):SELECT 'prefix_table1' AS table_name, COUNT(*) AS record_count FROM "prefix_table1" UNION ALL SELECT 'prefix_table2' AS table_name, COUNT(*) AS record_count FROM "prefix_table2" -- 继续添加其他表的查询语句利用Glue元数据(限Glue分区表)
如果你的表是通过Glue创建的分区表,且已开启分区统计,可直接查询Glue元数据表获取分区记录数,但这种方法通用性有限,仅适用于特定场景。
原查询报错原因
你原查询里的TT.table_name是字符串类型的字段值,SQL解析器会把它当成TARGET_TABLES表中的一个列,而非要查询的目标表名,自然会因找不到对应表而报错。
内容的提问来源于stack exchange,提问作者O.Takashi
相关产品推荐
相关产品推荐

