如何将一个字段(例如CSV字符串)拆分为多行的问题已经有了答案:Split values over multiple rows。但是,该问题涉及MSSQL,而回答中使用了各种RedShift没有对应功能的特性。为了完整起见,这里举个例子:当前数据:
然而,这显然非常低效,并且不适用于更长的列表。
有更好的想法吗?
编辑:
关于乘以行数的问题也有一个类似的问题:在Redshift中拆分行。然而,我不知道如何将此方法应用于此处。
编辑2:
可能是重复问题:Redshift. 将逗号分隔的值转换为行。但没有什么新的 - @Masashi Miyazaki的答案与我上面的建议类似,并且存在相同的问题。
| 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.
然而,这显然非常低效,并且不适用于更长的列表。
有更好的想法吗?
编辑:
关于乘以行数的问题也有一个类似的问题:在Redshift中拆分行。然而,我不知道如何将此方法应用于此处。
编辑2:
可能是重复问题:Redshift. 将逗号分隔的值转换为行。但没有什么新的 - @Masashi Miyazaki的答案与我上面的建议类似,并且存在相同的问题。