首页 > 解决方案 > 雪花中的 ARRAY_REMOVE()?

问题描述

Postgresql 具有 ARRAY_REMOVE 函数来从数组中删除元素。我怎样才能在雪花中做到这一点?

标签: javascriptsqlsnowflake-cloud-data-platformuser-defined-functions

解决方案


UDF 方法效果很好,如果您愿意,可以使用另一种方法:

  • 如果您使用 UDF,则使用无法使用的令人敬畏的雪花缓存
  • 只写简单的 SQL
  • 不保证数组的顺序

取决于用例......如果您不太可能从缓存中受益并且想要“更干净”的代码,那么 UDF 可能是最好的 - 但是如果您可能从缓存中受益,那么只喜欢 SQL 那么这种方法可能有用。

展平数组->谓词数据->通过 ARRAY_AGG 返回

SELECT 
    ARRAY_AGG(VALUE) REMOVED
FROM 
    CTE, LATERAL FLATTEN(AN_ARRAY) 
WHERE 
    VALUE!='A'

在此处输入图像描述

同样的例子工作得很好。

    select 
        array_agg(value) 
    from 
        table(flatten(input => parse_json('["a", "b", "c", "a"]'))) 
    where 
       value not in ('a');
    select 
        array_agg(value) 
    from 
        table(flatten(input => parse_json('[4, 1, 4, 2, 3, 4]'))) 
    where 
        value not in (4);
    select 
       array_agg(value) 
    from 
       table(flatten(input => parse_json('[4.3, 1.1, 4.2, 0.1, 3.3, 0.2]'))) 
    where 
       value not in (0.2);

推荐阅读