Я преобразовываю следующий оператор 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 это обрабатывает 10 миллионов записей менее чем за 1 час, что подходит для моих целей. Очевидно, что прямой разговор с Redshift невозможен из-за того, что Redshift не имеет функций перекрестного применения или разделения строк, поэтому я создал решение, используя описанный здесь процесс (Redshift. Преобразование значений, разделенных запятыми, в строки), который использует split_part() для разделения строки с разделителями-запятыми на несколько столбцов. Затем еще один запрос, который объединяет все, чтобы получить окончательный вывод в один столбец. Но обычный запуск занимает более 6 часов для обработки того же объема данных.
Я не ожидал, что столкнусь с этой проблемой, просто зная разницу в мощности между машинами. SQL Server, который я использовал для сравнительного теста, представлял собой простой сервер с 12 процессорами и 32 ГБ оперативной памяти, тогда как сервер Redshift основан на узлах dc1.8xlarge (общее количество мне неизвестно). Экземпляр используется совместно с другими командами, но когда я смотрю на информацию о производительности, я вижу множество доступных ресурсов.
Я относительно новичок в Redshift, поэтому я все еще предполагаю, что чего-то не понимаю. Но я понятия не имею, что мне не хватает. Есть ли что-то, что мне нужно проверить, чтобы убедиться, что данные загружаются оптимальным образом (я не адим, поэтому мои возможности проверить это ограничены)? Существуют ли другие параметры запроса Redshift, которые лучше, чем пример, который я нашел? Я искал другие методы и оптимизации, но если я не начну изучать перекрестные соединения, чего я хотел бы избежать (плюс, когда я попытался поговорить с администраторами баз данных, управляющими кластером Redshift, об этом варианте, их ответ был категоричным: «Нет, не могу этого сделать.») Я даже не знаю, куда идти в этот момент, поэтому любая помощь будет очень признательна!
Спасибо!