Есть ли какой-нибудь лучший вариант для экспорта данных в локальный режим, чем Redshift unload через s3? - PullRequest
0 голосов
/ 25 мая 2018

Я работаю над проектом Spring, который нуждается в экспорте данных таблицы Redshift в локальный файл CSV.Текущий подход заключается в следующем:

  1. Выполнение Redshift UNLOAD для записи данных в несколько файлов в S3 через JDBC
  2. Загрузка указанных файлов из S3 в локальное
  3. Объединение их вместев один CSV-файл
UNLOAD (
  'SELECT DISTINCT #{#TYPE_ID} 
  FROM target_audience 
  WHERE #{#TYPE_ID} is not null 
  AND #{#TYPE_ID} != \'\' 
  GROUP BY #{#TYPE_ID}'
) 
TO '#{#s3basepath}#{#s3jobpath}target_audience#{#unique}_' 
credentials 'aws_access_key_id=#{#accesskey};aws_secret_access_key=#{#secretkey}' 
DELIMITER AS ',' ESCAPE GZIP ;

Вышеуказанный подход хорош и все.Но я думаю, что общую производительность можно улучшить, например, пропустив часть S3 и получая данные непосредственно из Redshift на локальный компьютер.

После поиска по онлайн-ресурсам я обнаружил, что вы можете экспортировать данные из красного смещения напрямую через psql или , чтобы выполнять запросы SELECT и самостоятельно перемещать данные результата .Но ни один из вариантов не может повысить производительность Redshift UNLOAD при параллельной записи.

Так есть ли способ, которым я могу имитировать UNLOAD параллельной записи для достижения той же производительности без необходимости проходить через S3?

Ответы [ 2 ]

0 голосов
/ 25 мая 2018

Мы делаем то же самое, что вы пытаетесь сделать здесь.В нашем сравнении производительности, в нашем случае это было почти то же самое или даже лучше в некоторых случаях.Следовательно, программирование и отладка очень просты.Поскольку есть практически один шаг.

//replace user/password,host,region,dbname appropriately in given command
psql postgresql://user:password@xxx1.xxxx.us-region-1.redshift.amazonaws.com:5439/dbname?sslmode=require -c "select C1,C2 from sch1.tab1" > ABC.csv

Это позволяет нам избежать 3 шагов:

  1. Выгрузка с использованием JDBC
  2. Загрузка экспортированных данных из S3
  3. Распакуйте gzip-файл (это мы использовали для сохранения сетевого ввода / вывода).

С другой стороны, также экономим некоторую стоимость (хранение S3, хотя и незначительное).Кстати, pgsql (9.0+), sslcompression по умолчанию on.

0 голосов
/ 25 мая 2018

Вы можете избежать необходимости объединять файлы, используя UNLOAD с параметром PARALLEL OFF.Он будет выводить только один файл.

Однако он будет создавать несколько файлов, если размер файла превышает 6,2 ГБ.

См .: UNLOAD - Amazon Redshift

Сомнительно, что вы добились бы лучшей производительности, запустив psql, но если производительность важна для вас, то вы, безусловно, можете протестировать различные методы.

...