我正在尝试在雪花中的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: +
答案 0 :(得分:2)
使用
REGEXP_SUBSTR(metadata$filename, '_([0-9]+)[.]', 1, 1, 'c', 1)
模式匹配_
,然后捕获组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]+)?).)/
这是我相信你想要的。
您收到的错误是来自正则表达式(-|+)
; +
运算符需要一个实参...