Snowflake外部阶段:如何结合现有查询获取文件数量及总大小?
在Snowflake外部阶段获取符合条件文件的数量与大小总和
你不需要借助LIST命令,Snowflake允许直接在阶段查询中通过元数据列获取文件大小,直接扩展你的原有SQL即可实现需求。
方案1:直接聚合(适用于无重复文件名的场景)
SELECT COUNT(DISTINCT METADATA$FILENAME) AS file_count, SUM(METADATA$FILE_SIZE) AS total_file_size_bytes FROM @STAGE_NAME WHERE METADATA$FILE_LAST_MODIFIED > (SELECT MAX(end_time) FROM <table_name>);
方案2:先去重再聚合(更严谨,避免重复文件干扰)
如果担心阶段中存在重名文件(尽管这种情况很少见),可以先通过子查询去重文件名和对应大小,再统计:
SELECT COUNT(*) AS file_count, SUM(file_size) AS total_file_size_bytes FROM ( SELECT DISTINCT METADATA$FILENAME, METADATA$FILE_SIZE AS file_size FROM @STAGE_NAME WHERE METADATA$FILE_LAST_MODIFIED > (SELECT MAX(end_time) FROM <table_name>) );
额外说明:单位转换
如果需要将字节转换为更易读的MB/GB,可以修改求和部分:
-- 转换为MB SUM(file_size)/1024/1024 AS total_file_size_mb -- 转换为GB SUM(file_size)/1024/1024/1024 AS total_file_size_gb
LIST命令属于Snowflake的命令行/UI操作命令,无法直接嵌入SQL查询逻辑,而使用METADATA$FILE_SIZE元数据列是更高效、更贴合SQL工作流的方式。
内容的提问来源于stack exchange,提问作者Tester_Cary
相关产品推荐
相关产品推荐

