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

无需Lambda函数,Snowflake如何读取压缩文件夹内的TSV文件?

Snowflake读取多文件压缩包的原生方案

Snowflake目前支持原生读取包含多文件的压缩包内的目标TSV文件,无需借助Lambda函数解压,具体实现方法如下:

核心前提确认

首先需要明确你的school.tsv.gz实际是tar.gz格式(即先将包含event.tsv和country.tsv的文件夹打包成tar,再压缩为gz)——因为标准的.gz压缩仅支持单个文件,无法直接压缩文件夹。Snowflake原生支持解析这种嵌套的归档压缩格式。

配置文件格式

确保你已创建的TSV_FILE_Format配置正确:

  • 将COMPRESSION参数设置为AUTO,Snowflake会自动识别gz、tar.gz等压缩类型;也可直接指定COMPRESSION = 'GZIP'(针对tar.gz格式同样有效)。
  • 保留TSV相关配置,例如FIELD_DELIMITER = '\t'、SKIP_HEADER = 1等适配你的文件内容。

加载目标文件的两种方式

1. 使用PATTERN参数筛选文件名

在COPY INTO语句或Snowpipe定义中,通过PATTERN正则匹配目标TSV文件:

-- 加载event.tsv到对应表
COPY INTO event_table
FROM @your_school_stage/school.tsv.gz
FILE_FORMAT = (FORMAT_NAME = 'TSV_FILE_Format')
PATTERN = '.*event\\.tsv';

-- 加载country.tsv到对应表
COPY INTO country_table
FROM @your_school_stage/school.tsv.gz
FILE_FORMAT = (FORMAT_NAME = 'TSV_FILE_Format')
PATTERN = '.*country\\.tsv';

2. 利用元数据列$FILE_NAME过滤

通过子查询结合元数据列精准筛选目标文件:

COPY INTO event_table
FROM (
    SELECT $1, $2, $3 -- 替换为event_table对应的列
    FROM @your_school_stage/school.tsv.gz
    WHERE $FILE_NAME = 'event.tsv'
)
FILE_FORMAT = (FORMAT_NAME = 'TSV_FILE_Format');

Snowpipe适配

创建Snowpipe时,只需将上述筛选逻辑整合到管道的COPY定义中即可,Snowpipe会自动扫描压缩包内的目标文件并触发加载,无需额外解压步骤。

注意事项

  • 确认你的Snowflake账户版本支持归档压缩包解析(当前主流商业版均已支持)。
  • 若压缩包不是tar.gz格式,而是错误地将文件夹直接压缩为gz(这种操作通常依赖特定工具,并非标准gz格式),则需要重新生成标准的tar.gz压缩包,才能被Snowflake原生解析。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 04:07:43