我需要从前缀中排除某些文件夹并处理雪花中的数据(复制语句)
在下面的示例中,我需要处理 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
有没有关于模式的建议来处理这个问题?
我需要从前缀中排除某些文件夹并处理雪花中的数据(复制语句)
在下面的示例中,我需要处理 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].*';
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
使用它来排除前缀模式
ls @stage PATTERN='^((?!/abc/).)*$'