Преобразование перекрестного применения T-SQL в Redshift

Я преобразовываю следующий оператор 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, об этом варианте, их ответ был категоричным: «Нет, не могу этого сделать.») Я даже не знаю, куда идти в этот момент, поэтому любая помощь будет очень признательна!

Спасибо!


person user3254527    schedule 31.08.2017    source источник
comment
Это не ответ, но, как новичок в Redshift, обратите внимание, что он имеет архитектуру MPP, ориентированную на столбцы, которая полностью отличается от SQL Server, который вы использовали ранее. Количество ресурсов, которые ваш запрос получает при его выполнении, определяется конфигурацией очереди Redshift, а также распределением памяти и слотов этой очереди. В зависимости от этой конфигурации вашему запросу может быть выделено только небольшое подмножество доступных ресурсов, например. 5%. Вам следует обсудить с вашими администраторами баз данных, как настроена очередь и есть ли лучшая очередь для выполнения вашего запроса.   -  person Nathan Griffiths    schedule 02.09.2017