如何获取athena aws中所有表的记录计数



我正在寻找一种方法来查找我的aws Athena中所有表(在所有表模式中)的记录计数。我已经尝试了以下,但它看起来像信息模式不提供记录计数。有谁能帮帮忙吗?


SELECT t.table_schema, t.table_name, t.table_rows
FROM   "information_schema"."schemata" s
INNER JOIN "information_schema"."tables" t on s.schema_name = t.table_schema
INNER JOIN "information_schema"."columns" c on c.table_name = t.table_name AND c.table_schema = t.table_schema
WHERE c.table_catalog = 'awsdatacatalog'

但是看起来信息模式没有提供记录计数

我认为原因很明显,首先它不是模式信息的一部分,其次——出于实用的性能原因——提供记录计数Athena/Presto/Trino将需要处理所有数据文件/源。

Presto/Trino不支持任何类型的过程查询执行(如PL/SQL与允许从字符串执行SQL的东西结合),所以唯一的选择是通过SQL或其他语言构建查询并执行它。开头:
with tables(full_name) as(
SELECT '"' || t.table_schema || '"."' || t.table_name || '"' as full_name
FROM "information_schema"."tables" t
)
select array_join(array_agg('select ''' || full_name || ''' as table_name, count(*) as rows_count from ' || full_name), ' union all ')
from tables
group by true;

或者你可以通过lambda定义自定义的Athena函数,它将动态地构建和执行相应的sql语句。

您可以将此过程分为两步。1. 使用下面的查询动态构建获取计数的SQL。2. 运行SQL的输出以生成计数

with tname_vw(i) as (
SELECT concat(
'select ''',
table_name,
''' as table_name,  count(*) from ',
table_name
)
FROM information_schema.tables
WHERE table_schema = 'schema_name'
)
select array_join(array_agg(i), ' union ') as result
from tname_vw

相关内容

  • 没有找到相关文章

最新更新