【问题标题】:How to output SQL arrays in simplified format?如何以简化格式输出 SQL 数组?
【发布时间】:2020-07-17 01:19:45
【问题描述】:

在 BigQuery 上使用标准 SQL,我将多个电子邮件列组合成一组独特的电子邮件。

输出(通过 Excel 上的 PowerQuery 查询)显示为

{"v":[{"v":"joe@fakemail.com"},{"v":"joe.bro@someemail.com"}]}

我第一次看到这个。

  1. 这看起来像一个键值对象,其中一个数组作为值,然后每个数组值又是一个键值对象。这是正常输出吗? (我在下面粘贴相关代码sn-p)。

  2. 如何输出 [joe@fakemail.com , joe.bro@someemail.com] 或 ["joe@fakemail.com" , "joe.bro@someemail.com"]。

以下是导致此输出的一段 SQL:

WITH emails AS (
    select 'Joe' as name, 'joe@hotmail.com,joe@someemail.com' as email1, 'joe@hotmail.com' as email2
    UNION ALL
    select 'Brenda', 'brenda@mail.com', 'Brenda81@TEST.com'
)

select name, 
ARRAY(
    SELECT DISTINCT REPLACE(TRIM(LOWER(EMAIL))," ","") from UNNEST(
        ARRAY_CONCAT(
            SPLIT(email1, ","),
            SPLIT(email2, ",")
        )
    ) AS EMAIL WHERE EMAIL like '%@%'
) AS UNIQUE_EMAILS,  
FROM emails

【问题讨论】:

标签: sql arrays google-bigquery


【解决方案1】:

改用下面不那么冗长的版本(也用更少的字符串到数组到字符串来回 - 所以应该更好地执行)

select name, 
  (select string_agg(distinct lower(email))
  from unnest(split(concat(email1, ',', email2))) email
  ) unique_emails
from emails   

如果应用于您问题的样本数据 - 输出是

【讨论】:

    【解决方案2】:

    解决方案是使用ARRAY_TO_STRING() 将数组转换为字符串。

    WITH emails AS (
        select 'Joe' as name, 'joe@hotmail.com,joe@someemail.com' as email1, 'joe@hotmail.com' as email2
        UNION ALL
        select 'Brenda', 'brenda@mail.com', 'Brenda81@TEST.com'
    )
    
    select name,
           ARRAY_TO_STRING(
                ARRAY(
                    SELECT DISTINCT REPLACE(TRIM(LOWER(EMAIL))," ","") from UNNEST(
                        ARRAY_CONCAT(
                            SPLIT(email1, ","),
                            SPLIT(email2, ",")
                            )
                        ) AS EMAIL WHERE EMAIL like '%@%'
                    ),
               ','
               ) AS UNIQUE_EMAILS,
    FROM emails
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-26
      • 2021-12-22
      • 1970-01-01
      相关资源
      最近更新 更多