如何避免雪花复制报表中的子文件夹

如何避免雪花复制报表中的子文件夹

本文介绍了如何避免雪花复制报表中的子文件夹的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我要求从前缀中排除某个文件夹,并在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

这篇关于如何避免雪花复制报表中的子文件夹的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

07-31 13:32