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

标签 sql regex azure snowflake-cloud-data-platform snowflake-schema

我在 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”等文件,而不是快照文件夹中的文件。

感谢您的帮助

最佳答案

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

请引用the Snowflake documentation .

示例:

copy into emp_basic
  from @%emp_basic
  file_format = (type = csv field_optionally_enclosed_by='"')
  pattern = '.*2011-19.*.csv.gz'
  on_error = 'continue';

这取决于您设置阶段位置的方式(Azure blob、S3 或 GCP)。假设您的文件位于“文件夹”s3://yourbucket/folder1/[filename],gz 中。并且您已将阶段设置为指向 s3://yourbucket 使用的模式:

pattern='.*2011-09*.csv.*.gz'

然后它将扫描 s3://yourbucket 下的所有文件。

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

pattern='.*2011-09.*csv.*.gz'

然后它只会在 s3://yourbucket/folder1/ 中查找。

关于sql - Snowflake 中 COPY INTO 命令中的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72653461/

相关文章:

asp.net - asmx 到 WCF 或 Web API

mysql - 更新后触发 - 复制到另一个表

mysql - 为什么MySQL中DISTINCT必须放在第一位?

java - 从字符串中删除正则表达式

azure - 归档 Azure VM 的最佳方式?

适用于媒体的 Azure 视频分析器 - ARM_ACCOUNT_MUST_BE_MANAGED_BY_ARM

MYSQL 计数空值;

mysql - SQL SELECT LIKE(不区分大小写)

regex - 使用 dplyr 在选定的列上添加具有行均值的列

c# - 不在正则表达式中