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

Snowflake Stage中COPY INTO语句的PATTERN匹配异常问题

问题根源与解决方案

问题原因

Snowflake的PATTERN参数匹配的是文件的完整相对路径(相对于Stage根目录),而非仅文件名。如果你的用户私有Stage(@~)的路径中包含user字符串(例如用户名是xxx_user,Stage完整路径会包含该用户名),那么.*user.*这种宽泛的正则会匹配到路径中的user,导致该路径下所有文件(包括manager文件)都被选中。而.*manager.*仅能匹配文件名中的manager,因此只会选中目标文件,不会出现误匹配。

修正后的查询语句

要避免误匹配,需要让正则仅针对文件名部分进行匹配,以下两种方案都可行:

方案1:精确匹配文件名前缀与后缀

COPY INTO sch_stg_support.test_user 
FROM ( 
  SELECT METADATA$FILENAME, METADATA$FILE_ROW_NUMBER, METADATA$FILE_LAST_MODIFIED::TIMESTAMP_LTZ, $1 
  FROM '@~/SCH_DTM_TEST/TEST/'
) 
PATTERN => '.*\/microsoft_graph_api_user.*\.json.gz$' 
FILE_FORMAT = (TYPE=JSON STRIP_OUTER_ARRAY= TRUE);
  • .*\/:匹配路径中最后一个/之前的所有内容
  • microsoft_graph_api_user.*:匹配文件名中包含目标前缀的部分
  • \.json.gz$:匹配文件后缀,确保仅选中目标格式的文件

方案2:仅匹配文件名中的user

COPY INTO sch_stg_support.test_user 
FROM ( 
  SELECT METADATA$FILENAME, METADATA$FILE_ROW_NUMBER, METADATA$FILE_LAST_MODIFIED::TIMESTAMP_LTZ, $1 
  FROM '@~/SCH_DTM_TEST/TEST/' (PATTERN => '[^\/]*user[^\/]*\.json.gz$')
) 
FILE_FORMAT = (TYPE=JSON STRIP_OUTER_ARRAY= TRUE);
  • [^\/]*:匹配任意不含/的字符(即仅针对文件名部分)
  • user:精准匹配文件名中的目标字符串
  • \.json.gz$:限定文件后缀

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 13:43:10