【问题标题】:How to concatenate arrays in Snowflake with distinct values?如何连接具有不同值的雪花中的数组?
【发布时间】:2021-12-09 12:55:44
【问题描述】:

我有一个 MERGE 场景,主脚本中有一个 ARRAY_AGG() 函数。一旦我有匹配项,我想组合源表和目标表中的数组,但不想添加现有值。我看过使用ARRAY_CAT(),但它没有返回预期的输出

这是查询:

SELECT
  ARRAY_CAT(ARRAY_CONSTRUCT('VALUE 1', 'VALUE 2'), ARRAY_CONSTRUCT('VALUE 1', 'VALUE 3')) arr_col

但这会返回:

ARR_COL
[ "VALUE 1", "VALUE 2", "VALUE 1", "VALUE 3" ]

而我需要的是:

ARR_COL
[ "VALUE 1", "VALUE 2", "VALUE 3" ]

除了转换为字符串,使用正则表达式删除重复然后拆分为数组之外,是否有一种简单的方法来实现这一点?

【问题讨论】:

    标签: sql snowflake-cloud-data-platform


    【解决方案1】:

    使用FLATTENARRAY_AGG(DISTINCT)

    SELECT ARRAY_AGG(DISTINCT F."VALUE") AS ARR_COL
    FROM TABLE(FLATTEN(
         ARRAY_CAT(ARRAY_CONSTRUCT('VALUE 1', 'VALUE 2'), 
                   ARRAY_CONSTRUCT('VALUE 1', 'VALUE 3'))
        )) f
    

    【讨论】:

      【解决方案2】:

      我最终创建了一个 UDF,它允许我将其作为标量函数来执行

      // Distinct Concatenate
      create or replace function array_dcat(array1 variant, array2 variant)
          returns variant
          language javascript
          comment = 'Returns a distinct concatenation of two arrays'
      as
      $$
           return Array.from(new Set([...ARRAY1,...ARRAY2]));
      $$
      ;
      

      我用if如下

      SELECT
        ARRAY_CONSTRUCT('VALUE 1', 'VALUE 2') arr1,
        ARRAY_CONSTRUCT('VALUE 1', 'VALUE 3') arr2,
        ARRAY_CAT(arr1, arr2) sn_array_cat,
        ARRAY_DCAT(arr1, arr2) udf_array_dcat;
      

      然后返回

      ARR1 ARR2 SN_ARRAY_CAT UDF_ARRAY_CAT
      [ "VALUE 1", "VALUE 2" ] [ "VALUE 1", "VALUE 3" ] [ "VALUE 1", "VALUE 2", "VALUE 1", "VALUE 3" ] [ "VALUE 1", "VALUE 2", "VALUE 3" ]

      【讨论】:

        猜你喜欢
        • 2021-07-22
        • 1970-01-01
        • 1970-01-01
        • 2019-06-18
        • 2020-08-11
        • 2023-03-22
        • 2023-04-09
        • 2023-02-21
        • 1970-01-01
        相关资源
        最近更新 更多