如何在Snowflake中查询数据库/架构下所有视图的大小信息?
在Snowflake中查询指定库/架构下视图的行数或大小信息
视图本身是虚拟表,不存储物理数据,所以你在account_usage.tables、information_schema.tables里看到的bytes和row_count字段为NULL,table_storage_metrics表无视图记录,都是正常现象。要获取视图的行数或大小,需要通过以下方法:
方法一:获取所有视图的行数
单个视图查询
直接执行计数语句:
SELECT COUNT(*) AS row_count FROM DB.SCHEMA.YOUR_VIEW_NAME;
批量查询所有视图
通过生成动态SQL批量执行:
- 先运行以下语句生成查询脚本:
SELECT 'SELECT ''' || table_name || ''' AS view_name, COUNT(*) AS row_count FROM ' || table_catalog || '.' || table_schema || '.' || table_name || ' UNION ALL' FROM information_schema.views WHERE table_catalog = 'DB' AND table_schema = 'SCHEMA';
- 将生成的SQL结果去掉最后一行的
UNION ALL,执行后即可得到该架构下所有视图的行数。
方法二:估算视图的字节大小
如果需要获取视图结果集的字节数,可以结合RESULT_SCAN函数:
单个视图查询
- 先查询视图全部数据(注意大视图可能耗时):
SELECT * FROM DB.SCHEMA.YOUR_VIEW_NAME;
- 立即执行以下语句获取结果字节数:
SELECT SUM(BYTES) AS total_bytes FROM TABLE(RESULT_SCAN(LAST_QUERY_ID()));
批量查询所有视图
同样通过动态SQL生成脚本:
SELECT 'SELECT ''' || table_name || ''' AS view_name, (SELECT SUM(BYTES) FROM TABLE(RESULT_SCAN(LAST_QUERY_ID()))) AS total_bytes FROM ' || table_catalog || '.' || table_schema || '.' || table_name || ' UNION ALL' FROM information_schema.views WHERE table_catalog = 'DB' AND table_schema = 'SCHEMA';
去掉末尾的UNION ALL后执行,即可得到每个视图结果集的字节数。
注意事项
- 复杂视图(含JOIN、聚合等逻辑)的计数或大小估算会消耗计算资源,建议在业务低峰期执行。
- 如果是物化视图(
table_type = 'MATERIALIZED VIEW'),它会存储物理数据,可直接通过account_usage.tables或table_storage_metrics获取bytes和row_count。
内容的提问来源于stack exchange,提问作者Paradox
相关产品推荐
相关产品推荐

