雪花图案的正则表达式
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\.csv
、ts-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);
我在 s3
存储桶中有一个文件列表,如下所示。我只想加载当前日期文件,例如,
我想得到 2020/06/09 下的所有 file_a.csv,同样地得到 2020/06/09
我尝试了语法,但这让我得到了所有日期的所有文件
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\.csv
、ts-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);