【发布时间】:2015-07-07 09:47:47
【问题描述】:
如何将字段(例如 CSV 字符串)拆分为多行的问题已经得到解答: Split values over multiple rows.
但是,这个问题涉及 MSSQL,并且答案使用了没有 RedShift 等效项的各种功能。
为了完整起见,这是我想做的一个例子:
当前数据:
| Key | Data |
+-----+----------+
| 1 | 18,20,22 |
| 2 | 17,19 |
所需数据:
| Key | Data |
+-----+----------+
| 1 | 18 |
| 1 | 20 |
| 1 | 22 |
| 2 | 17 |
| 2 | 19 |
现在,对于 CSV 字段中元素数量有限且数量有限的情况,我可以建议一种解决方法:在所有可能的数组位置上使用 split_part 和 union,如下所示:
SELECT Key, split_part(Data, ',', 1)
FROM mytable
WHERE split_part(Data, ',', 1) != ""
UNION
SELECT Key, split_part(Data, ',', 2)
FROM mytable
WHERE split_part(Data, ',', 2) != ""
-- etc. etc.
但是,这显然是非常低效的,并且不适用于更长的列表。
关于如何做到这一点的任何更好的想法?
编辑:
还有一个关于行乘法的类似问题:splitting rows in Redshift。但是我看不出如何在这里应用这种方法。
编辑2:
可能重复:Redshift. Convert comma delimited values into rows。但没有什么新鲜的 - @Masashi Miyazaki 的回答与我上面的建议相似,并且遇到了同样的问题。
【问题讨论】:
-
@JonScott,这看起来不错。你会把它作为一个答案,以便我解决吗?
-
@etov 我已将其添加为针对您的问题量身定制的答案
标签: sql split amazon-redshift