如何不使用information schema或account usage schema统计Snowflake schema下所有表的行数
可行方案说明
完全可以不用INFORMATION_SCHEMA和ACCOUNT_USAGE实现需求,以下是两种常用场景的实现方式:
方案1:快速获取近似行计数
适合不需要100%精准计数的场景,执行效率极高,无需扫描表数据:
- 首先执行
SHOW TABLES命令获取目标schema下的表基础信息,该命令内置返回表的近似行计数字段:
SHOW TABLES IN SCHEMA <你的数据库名>.<你的schema名>;
- 扫描上一步的查询结果直接提取行计数:
SELECT "name" AS table_name, "rows" AS approximate_row_count FROM TABLE(RESULT_SCAN(LAST_QUERY_ID()));
提示:这里的行计数是Snowflake后台统计的近似值,同步延迟通常在2小时以内,绝大多数统计场景都可满足。
方案2:获取完全精准的行计数
如果需要100%准确的实时行计数,可通过动态拼接COUNT语句实现:
- 第一步通过
SHOW TABLES结果批量生成每张表的计数查询语句:
SHOW TABLES IN SCHEMA <你的数据库名>.<你的schema名>; SELECT CONCAT('SELECT ''',"name",''' AS table_name, COUNT(*) AS exact_row_count FROM ', "database_name",'.',"schema_name",'.',"name",' UNION ALL ') AS exec_sql FROM TABLE(RESULT_SCAN(LAST_QUERY_ID()));
- 复制上一步返回的所有
exec_sql结果,删除末尾最后一个UNION ALL关键字后直接执行,即可拿到所有表的精准行计数。
注意事项
SHOW TABLES的返回结果受当前账号权限控制,仅会返回你拥有访问权限的表信息- 若要统计的表数据量极大,精准COUNT(*)的执行耗时会随数据量增长,可按需调整执行时间窗口
内容的提问来源于stack exchange,提问作者Suhayr
相关产品推荐
相关产品推荐

