如何将字段(例如 CSV 字符串)拆分为多行的问题已经得到解答:将值拆分为多行 https://stackoverflow.com/questions/13159526/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.
然而,这显然效率很低,并且不适用于较长的列表。
关于如何做到这一点有更好的想法吗?
EDIT:
关于行相乘还有一个有点类似的问题:在 Redshift 中拆分行 https://stackoverflow.com/questions/22779150/splitting-rows-in-redshift。但是我不知道如何在这里应用这种方法。
EDIT 2:
可能的重复:红移。将逗号分隔的值转换为行 https://stackoverflow.com/questions/25112389/redshift-convert-comma-delimited-values-into-rows。但没什么新鲜的 - @Masashi Miyazaki 的答案与我上面的建议类似,并且遇到了同样的问题。