JavaScript内存不足错误:超出UDF线程内存限制-雪花

问题描述 投票:1回答:1

我正在尝试使用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)
     $$;

仍然功能抛出错误。有人可以帮我这个忙吗?

javascript user-defined-functions snowflake-data-warehouse variant
1个回答
0
投票

用对象替换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
$$;

否则,您可以增加仓库的大小。另外,请检查查询配置文件,以防其他原因引起问题。

© www.soinside.com 2019 - 2024. All rights reserved.