如何在 Amazon Redshift 的列中取消嵌套/展开/展平逗号分隔值?

Posted

技术标签:

【中文标题】如何在 Amazon Redshift 的列中取消嵌套/展开/展平逗号分隔值?【英文标题】:How to unnest/explode/flatten the comma separated value in a column in Amazon Redshift? 【发布时间】:2019-05-22 17:39:04 【问题描述】:

我正在尝试为 col2 中的每个值生成一个新行。由于该值是字符串格式,因此在对其使用任何 Redshift json 函数之前,我需要将其用双引号括起来。

输入:

col1(int)       col2(varchar)
1               ab,cd,ef
2               gh
3               jk,lm,kn,ut,zx

输出:

col1(int)       col2(varchar)
1               ab
1               cd
1               ef
2               gh
3               jk
3               lm
3               kn
3               ut
3               zx

【问题讨论】:

【参考方案1】:
    with NS AS (
      select 1 as n union all
      select 2 union all
      select 3 union all
      select 4 union all
      select 5 union all
      select 6 union all
      select 7 union all
      select 8 union all
      select 9 union all
      select 10
    )
    select
      TRIM(SPLIT_PART(B.col2, ',', NS.n)) AS col2
    from NS
    inner join table B ON NS.n <= REGEXP_COUNT(B.col2, ',') + 1

这里的 NS(数字序列)是一个 CTE,它返回一个从 1 到 N 的数字列表,这里我们必须确保我们的最大数字大于我们最大标签的大小,所以你可以尝试添加更多数字取决于您的上下文。

【讨论】:

这个答案似乎取自here。

以上是关于如何在 Amazon Redshift 的列中取消嵌套/展开/展平逗号分隔值?的主要内容,如果未能解决你的问题,请参考以下文章

Amazon Redshift:根据表中存在的列列表选择列

使用大表连接更新 Amazon Redshift 中的列

如何从SQL中的列值中提取特定部分(Redshift平台)

如何在 Amazon Redshift 中获取电子邮件地址的第二部分或第一部分?

为啥 Amazon Redshift UNLOAD 性能对于新数据要好得多?

R Shiny DataTable如何防止包含超链接的列中的行选择/取消选择