根据逗号分隔的字符串列将一行拆分为多行

7

我有一个表格,其中包含列 A(int)B(string)

A   B
1   a,b,c
2   d,e
3   f,g,h

我想创建以下输出:
A    B
1    a
1    b
1    c
2    d
2    e
3    f
3    g
3    h

如果有帮助的话,我是在亚马逊 Athena 中进行此操作的(它基于 Presto)。我知道 Presto 提供了将字符串拆分为数组的函数。来自 Presto docs 的内容如下:

split(string, delimiter) → array
将字符串按分隔符拆分并返回一个数组。

不过我不确定接下来该怎么做。

不是答案,但通常应避免在表中存储CSV,原因正如您现在看到的那样; 它使数据变得更难处理。 - Tim Biegeleisen
1个回答

17

使用unnest函数对split返回的数组进行展开操作。

SELECT a,split_b 
FROM tbl
CROSS JOIN UNNEST(SPLIT(b,',')) AS t (split_b)

如何确保仅将'a'与存储在其对应的值连接?从查询中似乎不明显。unnest是否将列A视为数据透视表? - ishan3243
@ishan3243 请参考文档中的示例 https://prestodb.io/docs/current/sql/select.html#unnest - Piotr Findeisen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接