首页 > 解决方案 > 从雪花外部阶段选择行时如何使用正则表达式?

问题描述

我创建了以下内容:

  1. 外部阶段(指向 Data Lake Gen2 中的文件夹)
  2. 文件格式(镶木地板)

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

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);

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

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.*';

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

标签: sqlregexselectsnowflake-cloud-data-platformsnowflake-schema

解决方案


您所追求的语法是:

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

正则表达式中的方括号也用于匹配.part 中的点。. 您使用的正则表达式将仅将所有文件与单词部分匹配


推荐阅读