Snowflake外部阶段能否用通配路径自动遍历嵌套日期文件夹加载文件?
Snowflake 遍历嵌套文件夹加载文件问题解答
问题场景
S3存储结构如下:
s3://finance/credits /Week_2022_0601_0607 file01.json file02.json /Week_2022_0608_0615 file01.json file02.json file03.json ...(每周新增以Week_开头的子文件夹)
想通过设置外部阶段的storage_location为s3://finance/credits/./*.json,让Snowflake执行COPY INTO时自动遍历所有含日期的嵌套文件夹加载文件;同时询问该需求在COPY INTO使用或不使用阶段的场景下的实现方式。
核心结论
不能将外部阶段的storage_location设置为s3://finance/credits/./*.json,因为Snowflake的外部阶段存储路径仅支持指定固定前缀,不支持这种通配符写法。但可以通过PATTERN参数实现自动遍历所有嵌套子文件夹的需求,以下分两种场景说明:
1. 使用外部阶段的场景
- 先创建指向根前缀的外部阶段:
CREATE OR REPLACE EXTERNAL STAGE your_credits_stage STORAGE_LOCATION = 's3://finance/credits/' FILE_FORMAT = (TYPE = JSON) CREDENTIALS = (AWS_KEY_ID = 'your_aws_key' AWS_SECRET_KEY = 'your_aws_secret');
- 执行
COPY INTO时,通过PATTERN参数用正则匹配所有Week_子文件夹下的JSON文件:
COPY INTO your_target_table FROM @your_credits_stage PATTERN = '.*Week_.*\\.json';
该正则会匹配所有包含Week_路径下的.json文件,后续新增的Week_开头子文件夹里的文件也会被自动覆盖。
2. 不使用外部阶段的场景
直接在COPY INTO语句中指定根路径,并搭配PATTERN参数实现匹配:
COPY INTO your_target_table FROM 's3://finance/credits/' PATTERN = '.*Week_.*\\.json' FILE_FORMAT = (TYPE = JSON) CREDENTIALS = (AWS_KEY_ID = 'your_aws_key' AWS_SECRET_KEY = 'your_aws_secret');
同样,新增的Week_子文件夹会被自动遍历,无需修改语句。
内容的提问来源于stack exchange,提问作者David Dumas
相关产品推荐
相关产品推荐

