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

时间:2020-02-24 14:17:36

标签: regex snowflake-cloud-data-platform snowsql

我正在尝试在雪花中的copyinto命令中从文件名中提取日期(20200222)。

文件名

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: +

2 个答案:

答案 0 :(得分:2)

使用

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

这是regex demo

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

答案 1 :(得分:0)

您需要对Snowflake使用两次转义符。如果仅选择正则表达式字符串,则会得到:

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

这正是regexp函数也将作为输入参数得到的结果。
通过两次转义,您可以获得:

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

这是我相信你想要的。

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