本文介绍了如何避免雪花复制报表中的子文件夹的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我要求从前缀中排除某个文件夹,并在Snowflake(复制语句)中处理数据
在下面的示例中,我需要处理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
是否有任何关于模式的建议来处理此问题?
推荐答案
使用pattern
关键字可以尝试排除某些文件。但是,在使用与NOT语法匹配的模式时,您将排除包含任何字符的任何文件。
假设舞台URL定义为s3://bucket1/emp/
LS @MY_STAGE pattern = '[^abc].*';
- 排除以a、b或c开头的所有内容
LS @MY_STAGE pattern = '[^a][^b][^c][^\/].*';
- 排除符合以下条件的任何内容:
- 第一个字符是a,OR
- 第二个字符是b,或者
- 第三个字符是c,或
- 第四个字符是正向劈开/
编辑
在使用Sharvan的示例进行测试之后。以下是我发现的情况:
不起作用:ls @my_stage PATTERN='^((?!/abc/).)*$';
因为第一个转发劈开被复制为舞台网址的一部分(如果不存在,它会自动追加到舞台网址中)
工作:ls @my_stage PATTERN='^((?!abc/).)*$';
因为删除了第一个转发劈开
Snowflake不支持反向引用(根据他们的文档),但没有提到lookahead或lookbehinds,我认为这是不受支持的。
https://docs.snowflake.net/manuals/sql-reference/functions-regexp.html#backreferences
这篇关于如何避免雪花复制报表中的子文件夹的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!