Snowflake 中 COPY INTO 命令中的正则表达式

Mad*_*ham 3 regex sql azure snowflake-schema snowflake-cloud-data-platform

我在 azure blob 存储中只有几个 CSV 文件,我们正在使用 COPY INTO 命令加载雪花表中的文件。问题是:文件系统是:容器>>文件夹(例如:帐户)>>类似2011-09.csv 2011-10.csv的文件数量,帐户文件夹也有一个子文件夹“快照”,其中也有具有相似数据但名称不同的文件,例如 2019-11_1654478715.csv 因此,在使用 COPY INTO 命令时,Snowflake 中的目标表会填充重复的行。

我正在使用这个:

从 'azure://abc.blob.core.windows.net/abc-abc/account' 复制到 BINGO_DWH_DEV.LANDING.CRM_ACCOUNT_TEMP 凭证=(azure_sas_token= 'abc') ON_ERROR='CONTINUE' FILE_FORMAT=(type=csv field_delimiter) =','FIELD_OPTIONALLY_ENCLOSED_BY='"');

我可以使用带有正则表达式的 COPY INTO 命令的任何想法,该命令只能选择“2011-09.csv”等文件,而不是快照文件夹中的文件。

感谢你的帮助

小智 8

您可以使用pattern关键字作为正则表达式来根据模式插入文件。

\n

请参考雪花文档

\n

例子:

\n
copy into emp_basic\n  from @%emp_basic\n  file_format = (type = csv field_optionally_enclosed_by=\'"\')\n  pattern = \'.*2011-19.*.csv.gz\'\n  on_error = \'continue\';\n
Run Code Online (Sandbox Code Playgroud)\n

这取决于您设置阶段位置的方式(Azure blob、S3 或 GCP)。让\xe2\x80\x99s 表示您的文件已放置在“文件夹”中s3://yourbucket/folder1/[filename],gz。并且你已经设置了指向的舞台s3://yourbucket使用的模式:

\n
pattern=\'.*2011-09*.csv.*.gz\'\n
Run Code Online (Sandbox Code Playgroud)\n

然后它会扫描下面的所有文件s3://yourbucket

\n

但是,如果您的舞台已设置为指向该文件夹s3://yourbucket/folder1/并且使用的模式为:

\n
pattern=\'.*2011-09.*csv.*.gz\'\n
Run Code Online (Sandbox Code Playgroud)\n

然后它只会在s3://yourbucket/folder1/

\n