1

I'm trying to extract date (20200222) from filename while copyinto command in snowflake.

File Name

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

snowflake query

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

I tried this regex but its not supporting in snowflake. Getting below error

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

2 回答 2

2

利用

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

这是正则表达式演示

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

于 2020-02-24T14:22:19.487 回答
0

您需要对 Snowflake 使用双重转义。如果您只选择您的正则表达式字符串,您将获得:

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

这正是正则表达式函数将作为输入参数得到的内容。
使用双重转义,您可以获得:

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

这就是我相信你想要的。

您得到的错误来自 regexp (-|+);运营商需要一个真正的+论点......

于 2020-02-24T17:03:25.620 回答