从雪花外部阶段选择行时如何使用正则表达式?

Posted

技术标签:

【中文标题】从雪花外部阶段选择行时如何使用正则表达式?【英文标题】:How to use regex while selecting rows from snowflake external stage? 【发布时间】:2020-07-07 08:11:51 【问题描述】:

我创建了以下内容:

    外部阶段(指向 Data Lake Gen2 中的文件夹) 文件格式(拼花)

我想从一个阶段进行选择,但我只想读取那些文件名中包含 .part. 的文件。使用 copy into 命令我可以在模式中提到这一点,但我不想在表中复制数据。我只想选择 .part. 文件。目前我已经尝试过:

SELECT 
    $1:Country::String as Country,
    $1:FeatureStr::String as FeatureStr,
    $1:Machineid::String as Machineid,
    $1:ProductId::number as ProductId
FROM @DB.RAW_SCHEMA.FEATURE_STAGE/ClientDetails/2020.03.ClientDetails/ (file_format => DB.RAW_SCHEMA.PARQUET_FORMAT);

但它也会查找其中没有“part”的文件,因此它会失败。于是我尝试了模式功能:

SELECT 
    $1:Country::String as Country,
    $1:FeatureStr::String as FeatureStr,
    $1:Machineid::String as Machineid,
    $1:ProductId::number as ProductId
FROM @DB.RAW_SCHEMA.FEATURE_STAGE/ClientDetails/2020.03.ClientDetails/ (file_format => DB.RAW_SCHEMA.PARQUET_FORMAT)
pattern => '.*part.*';

但它给了我语法错误。任何指导将不胜感激。 :)

【问题讨论】:

【参考方案1】:

你所追求的语法是:

select * 
from @STAGE_NAME/PATH
(FILE_FORMAT => PARQUET_FORMAT, PATTERN => '.*[.]part[.].*' )

正则表达式中的方括号也可以匹配 .part. 中的点。您使用的正则表达式将用于匹配所有带有单词 part

的文件

【讨论】:

谢谢,是的,这就是我想要的。你能不能也看看这个问题:***.com/questions/62823080/…

以上是关于从雪花外部阶段选择行时如何使用正则表达式?的主要内容,如果未能解决你的问题,请参考以下文章

雪花和正则表达式 - 在 SF 中实现已知良好表达式时的问题

如何使用正则表达式过滤元素[重复]

使用正则表达式匹配日志文件行时的可选字段

我需要使用正则表达式从以下阶段获取金额值[关闭]

正则表达式 - 如何从列表中选择第一项

如何从 Redshift 的正则表达式组中选择第一个结果?