You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Snowflake查询指定Schema零记录表及表存储大小相关问题咨询

Snowflake查询问题解答

空表查询SQL逻辑解释

你提供的空表查询语句前三行逻辑逐行说明如下:

  1. 第一行select t.table_schema || '.' || t.table_name as "table_name"
    拼接表所属的schema名和表名,中间用.分隔,输出格式为schema名.表名,并给该输出列指定别名table_name;双引号用于保留别名的大小写,避免Snowflake默认将标识符转为大写。
  2. 第二行from information_schema.tables t
    指定查询的数据源为当前数据库自带的系统元数据视图INFORMATION_SCHEMA.TABLES,并给该视图起别名t简化后续代码编写,该视图存储了当前库下所有表、视图等表对象的元数据信息。

    如果你需要限定只查abc schema下的表,需要在where条件中补充t.table_schema = 'ABC'(注意schema名大小写匹配)。

  3. 第三行where t.table_type = 'BASE TABLE'
    过滤查询结果,只保留基础物理表,排除视图、临时表、外部表等其他类型的表对象。

补充说明:该视图中row_count是元数据统计的近似值,若需要完全精确的空表结果,可对查询返回的表单独执行SELECT COUNT(*)校验。

存储查询返回空记录的原因与解决方案

核心问题原因

你写的查询语句引用的视图位置错误:TABLE_STORAGE_METRICS视图不属于任意数据库的INFORMATION_SCHEMA,而是存放在Snowflake内置的SNOWFLAKE数据库的ACCOUNT_USAGE schema下,所以你查询INFORMATION_SCHEMA.table_storage_metrics找不到对应视图,返回空结果。

解决方案

方案1:使用ACCOUNT_USAGE视图查询全账号存储数据

该视图可以查询整个账号下所有表的存储明细,首先需要管理员给你的角色开通权限:

GRANT MONITOR USAGE ON ACCOUNT TO ROLE <你当前使用的角色名>;

权限开通后执行如下查询即可:

SELECT 
  table_catalog, 
  table_schema,
  table_name, 
  active_bytes / 1024 / 1024 AS storage_usage_MB -- 除以1024*1024得到MB单位,若需要KB可只除以1024
FROM SNOWFLAKE.ACCOUNT_USAGE.TABLE_STORAGE_METRICS 
WHERE 
  TABLE_CATALOG = 'TEST_DB'
  AND DELETED IS NULL; -- 过滤已经删除的表

方案2:使用当前库INFORMATION_SCHEMA查询(无需额外权限)

如果你只需要查询TEST_DB下的表存储,可直接使用该库INFORMATION_SCHEMA.TABLES自带的bytes字段查询,不需要额外权限:

SELECT 
  table_catalog,
  table_schema,
  table_name,
  bytes / 1024 / 1024 AS storage_usage_MB
FROM TEST_DB.INFORMATION_SCHEMA.TABLES
WHERE table_type = 'BASE TABLE';

内容的提问来源于stack exchange,提问作者Priya Chauhan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 11:48:01