You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何通过元数据查询Snowflake外部表的大小?

如何通过元数据查询Snowflake外部表的大小与行数

当然可以!完全不用执行SELECT COUNT(*)这类全表扫描的语句,Snowflake提供了元数据驱动的方式,能直接获取外部表的大小(优先字节单位)和行数,下面是最实用的几种方法:

方法1:查询INFORMATION_SCHEMA.EXTERNAL_TABLES视图

这是最直接的方案,这个系统视图包含了外部表的核心元数据,其中就有总文件大小和预估行数(前提是你已经刷新过外部表的元数据)。

查询语句:

SELECT
  TABLE_NAME AS **外部表名称**,
  TOTAL_FILE_SIZE AS **总大小(字节)**,
  TOTAL_FILE_SIZE / (1024*1024) AS **总大小(MB)**,
  ROW_COUNT AS **预估行数**
FROM INFORMATION_SCHEMA.EXTERNAL_TABLES
WHERE TABLE_SCHEMA = '<你的Schema名>'
  AND TABLE_CATALOG = '<你的数据库名>';

关键注意点:

  • TOTAL_FILE_SIZE 直接返回字节数,完美匹配你的需求。
  • ROW_COUNT 是预估行数,必须先刷新外部表元数据才会更新为最新值:
    ALTER EXTERNAL TABLE <你的外部表名> REFRESH;
    
  • 如果不执行刷新操作,这里的大小和行数可能和外部存储(如S3、Azure Blob)的实际数据不一致,尤其是当存储里的文件有新增、删除或修改时。

方法2:关联外部表对应的Stage查询

如果你的外部表是基于某个Stage创建的,也可以通过查询Stage的元数据来获取存储大小:

SELECT
  s.STAGE_NAME AS **Stage名称**,
  s.STORAGE_LOCATION AS **存储位置**,
  SUM(f.FILE_SIZE) AS **总大小(字节)**,
  SUM(f.FILE_SIZE)/(1024*1024) AS **总大小(MB)**,
  COUNT(f.FILE_NAME) AS **文件总数**
FROM INFORMATION_SCHEMA.STAGES s
JOIN INFORMATION_SCHEMA.STAGE_FILES f
  ON s.STAGE_NAME = f.STAGE_NAME
  AND s.STAGE_SCHEMA = f.STAGE_SCHEMA
WHERE s.STAGE_NAME = '<关联的Stage名>'
  AND s.STAGE_SCHEMA = '<你的Schema名>'
GROUP BY s.STAGE_NAME, s.STORAGE_LOCATION;

说明:

  • 这个方法适合你想确认外部表关联的存储位置的总数据量,但它无法返回行数,只能得到文件总大小和文件数量。
  • 若刚修改过外部存储的文件,建议先执行ALTER STAGE <Stage名> REFRESH来同步最新的文件元数据。

方法3:使用DESC EXTERNAL TABLE快速查询单个表

如果你只是想快速查看某一个外部表的信息,可以用这个命令:

DESC EXTERNAL TABLE <你的外部表名>;

在返回的结果中,你能找到total_file_sizerow_count字段,同样需要先刷新元数据才能获取最新值。


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

火山引擎 最新活动