雪花中无效的正则表达式错误

Invalid regular expression error in snowflake

我正在尝试从文件名中提取日期 (20200222),同时在 snowflake 中执行 copyinto 命令。

文件名

s3://hadoop/2020002/dbo.DOSSIER_TRANSPORT_20200222.csv.gz

雪花查询

SELECT regexp_substr(metadata$filename, '/(_((\-|\+)?[0-9]+(\.[0-9]+)?).)/' as data FROM '@PRD.OPE_STG
                                                _CMD.SPX_PRD_CMD/' (file_format => 'OTS_TEST.OPA_STG_BENE.OTD_FORMAT', pattern => '.*dbo.DOSSIER_TRANSPORT.*') ;

我试过这个 regex 但它不支持雪花。低于错误

100048 (2201B): Invalid regular expression: '/(_((-|+)?[0-9]+(.[0-9]+)?).)/', no argument for repetition operator: +

使用

REGEXP_SUBSTR(metadata$filename, '_([0-9]+)[.]', 1, 1, 'c', 1)

这是regex demo

该模式匹配 _,然后捕获第 1 组中的一个或多个数字,然后匹配 .。由于 group_num 参数是 1,因此 return 值是第 1 组值。

您需要对 Snowflake 使用双重转义。如果你只是 select 你的正则表达式字符串你会得到:

SELECT '/(_((\-|\+)?[0-9]+(\.[0-9]+)?).)/';
=>   /(_((-|+)?[0-9]+(.[0-9]+)?).)/

这也正是 regexp 函数将作为输入参数获得的内容。
使用双重转义你会得到:

SELECT '/(_((\-|\+)?[0-9]+(\.[0-9]+)?).)/';
=>   /(_((\-|\+)?[0-9]+(\.[0-9]+)?).)/

这就是我相信你想要的。

您得到的错误来自正则表达式 (-|+)+ 运算符需要一个实参...