雪花图案的正则表达式

Regex Expression for Snowflake Pattern

我在 s3 存储桶中有一个文件列表,如下所示。我只想加载当前日期文件,例如, 我想得到 2020/06/09 下的所有 file_a.csv,同样地得到 2020/06/09

下的所有 file_b.csv

我尝试了语法,但这让我得到了所有日期的所有文件 select metadata$filename from @stage/snflk/ts/(file_format=>CSV_SKIP_HEADER,pattern=>'.*/file_a.*[.]csv')

snflk/ts/ts-prod/2020/06/08/file_a.csv
snflk/ts/ts-prod/2020/06/09/file_a.csv
snflk/ts/ts-prod3/2020/06/08/file_a.csv
snflk/ts/ts-prod3/2020/06/09/file_a.csv
snflk/ts/ts-prod2/2020/06/08/file_a.csv
snflk/ts/ts-prod2/2020/06/09/file_a.csv
snflk/ts/ts-prod/2020/06/08/file_b.csv
snflk/ts/ts-prod/2020/06/09/file_b.csv
snflk/ts/ts-prod3/2020/06/08/file_b.csv
snflk/ts/ts-prod3/2020/06/09/file_b.csv
snflk/ts/ts-prod2/2020/06/08/file_b.csv
snflk/ts/ts-prod2/2020/06/09/file_b.csv

I want to load only the current date files

.*/file_a.*[.]csv

this gets me all files from all dates

此处开头提供的模式 (.*) 是一个通配符,将匹配所有可用的内容。

如果您需要将日期限制为常数值,请在 regular expression pattern 中指定常数值(即 ts-prod.*/2020/06/09/file_a\.csvts-prod.*/2020/06/09/file_b\.csv 等):

select
  metadata$filename
from @stage/snflk/ts/
(pattern=>'ts-prod.*/2020/06/09/file_a\.csv');

要反复测试和编写正则表达式模式,您可以使用 Regex101, RegExr 等网络工具

P.s. 您也可以将模式构造为 use the current date dynamically,如果您尝试自动执行此操作:

-- Produces 'ts-prod.*/2020/06/11/file_a\.csv'
SET curr_dt_a=(
  SELECT 
    'ts-prod.*/' || 
    TO_VARCHAR(CURRENT_DATE(), 'YYYY/MM/DD') || 
    '/file_a\.csv'
)

-- Referenced as a SQL variable in the PATTERN option
SELECT
  metadata$filename
FROM @stage/snflk/ts/
(PATTERN=>$curr_dt_a);