【发布时间】:2021-11-27 18:37:45
【问题描述】:
由于某种原因,Snowflake 正在从我的正则表达式函数中删除反斜杠,但仅当我在创建 Javascript 过程时将函数放在“$$”之间时。
这里是我的正则表达式函数:
CREATE OR REPLACE FUNCTION "REGEX_REPLACE_ME"("SUBJECT" VARCHAR(16777216), "PATTERN" VARCHAR(16777216), "REPLACEMENT" VARCHAR(16777216))
RETURNS VARCHAR(16777216)
LANGUAGE JAVASCRIPT
AS '
const p = SUBJECT;
let regex = new RegExp(PATTERN, ''i'')
return p.replace(regex, REPLACEMENT);
';
当我简单地在 SQL 中运行它时,它可以工作;它会将“APPLE.com”更改为“APPLE”。
SELECT REXP_REPLACE_ME('APPLE.COM','\\.[A-Z]{2,3}',' ') -- the regex pattern \\.[A-Z]{2,3} is meant to remove domains i.e. ".com",".org", etc..
但是,当我在存储过程的 $$ 中运行它时,它会从我的正则表达式模式中删除反斜杠,从而完全改变正则表达式模式。
我的正则表达式从 \\.[A-Z]{2,3} 更改为 -> .[A-Z]{2,3}
CREATE or replace PROCEDURE TESTING_FUNC_1_THIS_CAN_BE_DELETED()
RETURNS VARCHAR
LANGUAGE javascript
AS
$$
var rs = snowflake.execute( { sqlText:
`
CREATE OR REPLACE VIEW Database.Schema.Table AS
SELECT REXP_REPLACE_ME('APPLE.COM','\\.[A-Z]{2,3}',' ') as column_cleaned
-- ,REXP_REPLACE_ME_WTF('APPLE.COM','\\.[A-Z]{2,3}',' ') AS WHAT_PATTERN_IS_BEING_OUTPUTTED -- function logic in code block below
`
} );
$$;
call TESTING_FUNC_1_THIS_CAN_BE_DELETED();
select * from Database.Schema.Table
在这里挠头,我创建了这个函数来显示它输出的模式,这就是我得出结论的方式(我在这里可能是错的......)当 Snowflake 编译时它正在删除反斜杠......
CREATE OR REPLACE FUNCTION "REXP_REPLACE_ME_WTF"("SUBJECT" VARCHAR(16777216), "PATTERN" VARCHAR(16777216), "REPLACEMENT" VARCHAR(16777216))
RETURNS VARCHAR(16777216)
LANGUAGE JAVASCRIPT
AS '
const p = SUBJECT;
let regex = new RegExp(PATTERN, ''i'');
//return p.replace(regex, REPLACEMENT);
return PATTERN;
';
有什么想法吗?
【问题讨论】:
标签: javascript sql snowflake-cloud-data-platform