从S3向Snowflake加载CSV时pattern参数匹配异常问题咨询
COPY命令pattern参数配置问题排查与解决方案
问题根因
现有配置匹配不到目标文件核心由两个问题导致:
pattern参数匹配的是文件的全路径而非单纯文件名,如果文件存放在stage子目录、或路径带有前导/,开头的20规则无法匹配到前缀后的文件名部分- 原有正则未转义
.字符,.会被识别为匹配任意字符的通配符,无法严格匹配.csv.gz后缀,同时也没有适配路径前缀的场景
正确配置方案
可根据你的存储结构二选一:
通用适配方案(支持根目录/子目录文件匹配)
无需关心文件存储层级,只要文件名以20开头、后缀为.csv.gz就会被匹配,配置如下:
copy into mytable from @mystage pattern='.*/?20.*\\.csv\\.gz'
规则说明:
.*/?适配任意长度的路径前缀,兼容根目录无前导/、子目录带路径的场景20.*限定文件名以20开头,后面可跟任意字符\\.csv\\.gz严格匹配文件后缀为.csv.gz,双反斜杠是SQL语句中的转义要求
根目录专属方案(仅匹配stage根目录下的文件)
如果确认所有目标文件都存放在stage根目录,没有嵌套子目录,可以用开头锚定的写法:
copy into mytable from @mystage pattern='^20.*\\.csv\\.gz'
规则说明:
^为正则开头锚定符,要求路径从首字符开始就匹配20- 其余规则和通用方案一致
验证方法
可先通过LIST命令测试pattern的匹配结果,确认符合预期后再执行COPY操作,避免误加载:
LIST @mystage pattern='.*/?20.*\\.csv\\.gz';
内容的提问来源于stack exchange,提问作者BalajiAWS
相关产品推荐
相关产品推荐

