Вставьте заархивированный файл в RedShift

У меня есть файл в s3, который заархивирован. Я хотел бы вставить его в базу данных RedShift. Единственный способ, которым мои исследования нашли это, — запуск экземпляра ec2. Переместите файл туда, разархивируйте его и отправьте обратно на S3. Затем вставить его в мою таблицу RedShift. Но я пытаюсь сделать все это из JavaSDK с внешней машины и не хочу использовать экземпляр Ec2. Есть ли способ просто распаковать файл с помощью задания EMR? Или вставить заархивированный файл прямо в RedShift?

Файлы .zip, а не .gzip


person Dan Ciborowski - MSFT    schedule 19.07.2013    source источник
comment
Redshift поддерживает GZIP как способ сжатия входных данных (более низкие затраты на S3 и более быстрое время загрузки). Используйте флаг GZIP в вашей команде COPY.   -  person Guy    schedule 21.07.2013
comment
В одном случае файл заархивирован (не под моим контролем), а не gzip. Есть ли опция заархивирования?   -  person Dan Ciborowski - MSFT    schedule 21.07.2013
comment
Насколько я знаю, пока нет. Вам нужно будет разархивировать его и gzip. Вы можете сделать это с помощью Java и вернуть его обратно в S3 с правильным сжатием.   -  person Guy    schedule 21.07.2013


Ответы (3)


Вы не можете напрямую вставить заархивированный файл в Redshift согласно комментарию Гая.

Предполагая, что это не разовая задача, я бы предложил использовать AWS Data Pipeline для выполнения этой работы. Посмотрите этот пример копирования данных между сегментами S3. Измените пример, чтобы разархивируйте, а затем заархивируйте ваши данные, а не просто копируйте их.

Используйте ShellCommandActivity для выполнения сценария оболочки, который выполняет работу. Я предполагаю, что этот сценарий может вызывать Java, если вы выберете и укажете AMI в качестве своего ресурса EC2 (YMMV).

Конвейер данных очень эффективен для этого типа работы, поскольку он автоматически запускает и завершает ресурс EC2, а вам не нужно беспокоиться об обнаружении имени нового экземпляра в ваших сценариях.

person Joe Harris    schedule 23.07.2013

добавьте параметр gzip, см.: http://docs.aws.amazon.com/redshift/latest/dg/c_loading-encrypted-files.html мы можем использовать клиент Java для выполнения SQL

person coderz    schedule 13.06.2014

если ваш файл gzip, попробуйте выполнить команду ниже

скопировать изменяемый из 's3://abc/def/yourfilename.gz' CREDENTIALS 'aws_access_key_id=xxxxx;aws_secret_access_key=yyyyyy' delimiter ',' gzip

person Sandesh Deshmane    schedule 13.06.2014
comment
Я специально сказал, что мои файлы не в GZIP, а в ZIP - person Dan Ciborowski - MSFT; 23.04.2015