当我在雪花中奔跑时,我有以下功能:
CREATE OR REPLACE FUNCTION dfp.extract_vcode(NAME VARCHAR)
RETURNS string
LANGUAGE javascript
STRICT
AS '
const regex = /[[]v=([0-9]+)/ig;
let s = NAME.match(regex);
if (s != null) {
return s[0].split('=')[1];
} else {
return null;
}
';但当我在气流中测试时:
common.snowflake.exceptions.SQLCompilationSnowflakeException:
001003 (42000):019eb4f7-0603-05d7-0000-01b529072596: SQL编译错误:解析错误行6,位置35,近‘。语法错误第6行在位置4意外的'const‘。
处理查询时出错(019eb4f7-0603-05d7-0000-01b529072596):
创建或替换函数dfp.extract_vcode(名称VARCHAR)返回字符串语言javascript严格AS‘const = /[[]v=(0-9+)/ig
CREATE OR REPLACE FUNCTION dfp.parse_metadata(DATA varchar)
RETURNS OBJECT
LANGUAGE javascript
STRICT
AS '
if (!DATA) {
return {}
}
let dict = {}
const parts = DATA.split("|")
parts.forEach((p) => {
const split = p.split("=")
dict[split[0]] = split[1]
})
return dict
';发布于 2021-09-03 18:57:22
问题是,雪花将尝试将传递给它的SQL拆分为多个语句,这些语句由';‘隔开,而在那里使用的解析器不理解javascript语法。
解决方案是用[]包装sql查询。如果将单元素数组传递给雪花运算符,它将假设数组的每个元素都是一个语句,它甚至不会尝试拆分它。
https://stackoverflow.com/questions/69049321
复制相似问题