如何在Snowflake中使用COPY INTO避免从子文件夹复制数据

问题描述

我们正在尝试使用copY INTO将数据从S3存储桶加载到SNowflake。 效果很好。但是子文件夹中的数据也被复制了,这种情况应该不会发生。

遵循硬编码模式REGEX可以完美运行

copy into TARGETTABLE
from @SOURCESTAGE
pattern='^(?!.*subfolder/).*$'

但是我们不想对文件名称进行硬编码。当我只保留'/'时,它将不再起作用..(当我转义斜杠\ /时,也会发生同样的情况)

copy into TARGETTABLE
from @SOURCESTAGE
pattern='^(?!.*/).*$'

有人知道动态使用哪个REGEX跳过cop INTO中的任何子文件夹吗? (不对文件名称进行硬编码)

@test_stage/folder_include
@test_stage/folder_include/file_that_has_to_be_loaded.csv
@test_stage/folder_include/folder_exclude/file_that_cannot_be_loaded.csv

因此,copy into语句只能拾取folder_include中的文件。较低级别的所有内容都需要跳过。 最重要的是:不对文件夹名进行硬编码。必须忽略folder_include中的任何文件夹。

谢谢!

解决方法

此处(如评论中所述)是一种跳过硬编码的文件夹名称的解决方案:How to avoid sub folders in snowflake copy statement

我认为用main { compileClasspath += applicationTest.output runtimeClasspath += applicationTest.output } 代替硬编码部分使其通用。

亲切的问候:)

,

如果包含在 STAGE 中的 PATH 是静态的,您可以将其包含在您的模式中。

list @SOURCESTAGE PATTERN = 'full_path_to_folder_include/[^/]*'

即使您的路径包含特定于环境的文件夹(例如 DEV、PROD),您也可以考虑:

list @SOURCESTAGE PATTERN = 'static_path/[^/]+/path_to_folder/[^/]*'
or
list @SOURCESTAGE PATTERN = 'static_path/(dev|test|prod)/path_to_folder/[^/]*'