You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Snowflake中合并去重排序日期数组的JS UDF报错问题咨询

报错根因

传入ARRAY_MERGE函数的其中一个数组参数为NULL,对应到JS代码中变量值为undefined,调用concat方法时触发类型错误。你的现有代码还存在冗余逻辑,可同步优化。

修复方案

方案1:优化自定义UDF

调整UDF逻辑先对入参做非空兜底,同时简化冗余代码:

CREATE OR REPLACE FUNCTION array_merge(old_date_list ARRAY, new_date_list ARRAY)
RETURNS ARRAY
LANGUAGE JAVASCRIPT
AS 
$$
    // 入参为NULL时兜底为空数组
    const oldList = OLD_DATE_LIST || [];
    const newList = NEW_DATE_LIST || [];
    // 合并、去重、排序、过滤空值
    return [...new Set([...oldList, ...newList])]
      .filter(date => date && date !== '')
      .sort();
$$
;

调用时可加一层空值兜底更稳妥:

SELECT 
   ARRAY_MERGE(
     IFNULL(ARRAY_COMPACT(c.array_visit_dates), ARRAY_CONSTRUCT()),
     IFNULL(ARRAY_COMPACT(d.array_visit_dates), ARRAY_CONSTRUCT())
   ) AS array_visit_dates
FROM myTable

方案2:使用原生SQL函数实现(性能更优)

不需要自定义UDF,直接用数据库内置数组函数即可完成需求,执行效率更高,也不会出现JS类型错误:

SELECT 
  ARRAY_SORT(
    ARRAY_DISTINCT(
      ARRAY_CAT(
        IFNULL(ARRAY_COMPACT(c.array_visit_dates), ARRAY_CONSTRUCT()),
        IFNULL(ARRAY_COMPACT(d.array_visit_dates), ARRAY_CONSTRUCT())
      )
    )
  ) AS array_visit_dates
FROM myTable

用到的内置函数说明:

  • ARRAY_CAT:合并两个数组
  • ARRAY_DISTINCT:数组元素去重
  • ARRAY_SORT:数组升序排序
  • IFNULL:NULL值兜底为空数组
补充说明

如果你的日期不是ISO标准字符串格式,JS默认的字典序排序会出现异常,优先使用原生SQL方案,内置排序会自动识别日期类型完成正确排序。

内容的提问来源于stack exchange,提问作者RagePwn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 01:45:03