我需要从前缀中排除某些文件夹并处理雪花中的数据(复制语句)
在下面的示例中,我需要处理emp /下的文件,并从abc /中排除文件
输入:
s3:// bucket1 / emp /
E1.CSV
E2.CSV
/abc/E11.csv
s3:// bucket1 / emp / abc /-E11.csv
输出:
s3:// bucket1 / emp /
E1.CSV
E2.CSV
围绕模式是否有任何建议可以解决这个问题?
答案 0 :(得分:2)
使用pattern
关键字,您可以尝试排除某些文件。但是,当使用与NOT语法匹配的模式时,您将排除任何包含 any 个字符的文件。
假设您的阶段URL被定义为s3://bucket1/emp/
LS @MY_STAGE pattern = '[^abc].*';
LS @MY_STAGE pattern = '[^a][^b][^c][^\\/].*';
使用Sharvan的示例进行测试之后。这是我发现的东西:
不起作用:
ls @my_stage PATTERN='^((?!/abc/).)*$';
,因为第一个正斜杠是作为阶段URL的一部分重复的(如果不存在,则会自动附加到阶段URL上)
作品: ls @my_stage PATTERN='^((?!abc/).)*$';
,因为第一个正斜杠已删除
已更新,因为不需要转义正斜杠
Snowflake不支持反向引用(根据他们的文档),但是没有提及我认为不支持的超前或后退。
https://docs.snowflake.net/manuals/sql-reference/functions-regexp.html#backreferences
答案 1 :(得分:1)
使用此选项排除前缀模式
ls @stage PATTERN='^((?!/abc/).)*$'