我正在尝试使用javascript UDF合并两个变量行,但是我的每个变量行都有大约12500个键。 我的udf定义如下:
CREATE OR REPLACE FUNCTION merge_json(EXT_ROW VARIANT, STG_ROW VARIANT)
RETURNS variant
LANGUAGE JAVASCRIPT
AS
$$
function extend(ext, stg) {
if(ext == null)ext=stg
for (var key in stg) {
if (stg.hasOwnProperty(key)) ext[key] = stg[key];
}
return ext;
}
return extend(EXT_ROW, STG_ROW)
$$;
从雪花文档中,我知道万一脚本使用过多的内存或遇到无限循环,然后udf失败,因此我尝试删除上述函数中的循环并使其如下所示:
CREATE OR REPLACE FUNCTION merge_json_v1(EXT_ROW VARIANT, STG_ROW
VARIANT)
RETURNS variant
LANGUAGE JAVASCRIPT
AS
$$
function extend(ext, stg) {
if(ext == null)ext=stg
let merged_row = Object.assign(ext, stg);
return merged_row;
}
return extend(EXT_ROW, STG_ROW)
$$;
仍然功能抛出错误。有人可以帮我吗?
答案 0 :(得分:0)
用OBJECT替换VARIANT并消除内部包装函数可能会减少一些开销。
例如:
CREATE OR REPLACE FUNCTION merge_json_v1(EXT_ROW OBJECT, STG_ROW OBJECT)
RETURNS OBJECT
LANGUAGE JAVASCRIPT
AS
$$
return EXT_ROW ? Object.assign(EXT_ROW, STG_ROW) : STG_ROW
$$;
否则,您可以增加仓库的大小。还要检查查询配置文件,以防其他原因引起问题。