我正在将以下T-SQL语句转换为Redshift。查询的目的是将表中的列转换为包含逗号分隔字符串的值(最多60个值)到多行,每行1个值。
SELECT
id_1
, id_2
, value
into dbo.myResultsTable
FROM myTable
CROSS APPLY STRING_SPLIT([comma_delimited_string], ',')
WHERE [comma_delimited_string] is not null;
在SQL中,这将在不到1小时的时间内处理1000万条记录,这对我来说很好。显然,由于Redshift没有交叉应用或字符串拆分功能,因此无法与Redshift直接对话,因此我使用此处详述的过程(Redshift. Convert comma delimited values into rows)构建了一个解决方案,该过程利用split_part()来拆分逗号分隔的字符串分成多列。然后是另一个查询,它将所有内容联合起来以将最终输出转换为单个列。但典型的运行需要6个多小时来处理相同数量的数据。
我不希望知道机器之间的功率差异而遇到这个问题。我用于比较测试的SQL Server是一个简单的服务器,有12个处理器和32 GB RAM,而Redshift服务器基于dc1.8xlarge节点(我不知道总计数)。该实例与其他团队共享,但是当我查看性能信息时,有大量可用资源。
我对Redshift相对较新,所以我仍然认为我不理解某些东西。但我不知道我错过了什么。有没有我需要检查的东西,以确保以最佳方式加载数据(我不是一个adim所以我的检查能力是有限的)?是否有其他Redshift查询选项比我找到的示例更好?我已经搜索了其他方法和优化,但除非我开始研究Cross Joins,我想避免的事情(另外,当我试图与DBA讨论运行Redshift集群关于此选项时,他们的反应是平的“不,不能那样做。“)我甚至不确定在这一点上去哪里,所以任何帮助都会非常感激!
谢谢!