Неверная ошибка регулярного выражения в снежинке - PullRequest
1 голос
/ 24 февраля 2020

Я пытаюсь извлечь дату (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 ]

2 голосов
/ 24 февраля 2020

Использование

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

Это демо regex

Шаблон соответствует _, затем захватывает одну или несколько цифр в группе 1 и затем соответствует .. Поскольку аргумент group_num равен 1, возвращаемое значение равно значению группы 1.

0 голосов
/ 24 февраля 2020

Вам нужно использовать двойные побеги со Снежинкой. Если вы просто выберете свою строку регулярного выражения, вы получите:

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

, что в точности соответствует функции регулярного выражения в качестве входного аргумента.
С двойным экранированием вы получите:

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

что, как я полагаю, вам нужно.

Ошибка, которую вы получаете от регулярного выражения (-|+); оператору + нужен реальный аргумент ...

...