2015-10-18 3 views
0

Я использую AWS Redshift для загрузки нескольких файлов S3 с помощью команды COPY. Я делаю это через манифест. У нас может быть несколько файлов манифеста, которые нужно будет загружать в Redshift в любой момент времени. Каков наилучший способ загрузки нескольких файлов манифеста в Redshift?Redshift - копирование нескольких файлов манифеста

Возможно ли выполнить команду копирования, передающую список/массив файлов манифеста, как показано ниже?

copy schema.table_name 
from 's3://my-bucket/manifest1.manifest', 's3://my-bucket/manifest2.manifest', 's3://my-bucket/manifest3.manifest' 
credentials 'aws_access_key_id=XXXX;aws_secret_access_key=YYYY' 
manifest gzip format as json 'auto'; 

Или можно выполнить несколько команд копирования из разных приложений, не влияя на общую производительность Redshift слишком много? Моя проблема с одновременным выполнением нескольких команд копирования заключается в том, что она будет вводить конкуренцию ресурсов при выполнении копии.

ответ

1

То, что я закончил, заключалось в объединении содержимого нескольких файлов манифеста в манифест щика. Таким образом, вместо того, чтобы выполнять 500 отдельных команд COPY для 500 файлов манифеста, я конкатенировал содержимое 500 манифестов в манифест щика, а затем выполнил копию Redshift COPY.

Повышение производительности было значительным. Redshift COPY одного манифеста занимает около 3 минут. Конкатенация 500 в 1 uber манифест занимает 45-90 минут.

0

Вы можете запускать несколько команд копирования, и, конечно же, это повлияет на производительность. Вам просто нужно сделать некоторые тесты, чтобы оценить уровень замедления, который вы можете принять.

Если вы хотите ограничить количество копий, которые могут запускаться одновременно, вы можете создать нового пользователя и следовать Tutorial: Configuring Workload Management (WLM) Queues to Improve Query Processing. Предположим, вы установили параллелизм в 1, тогда вы можете запустить несколько команд, и только 1 из них будет запущен.

0

Проблема с выполнением одной большой COPY для большого количества данных заключается в том, что Redshift будет выделять максимальный размер ожидаемой таблицы на диске, что может привести к исключению DISK FULL, которое можно избежать, если вы разделите COPY на несколько COPY (* Это будет работать один за другим. NOT одновременно). Также важно учитывать количество ядер, которые у вас есть в вашем кластере Redshift, чтобы максимизировать параллелизм.

+0

Существует уже решение, и даже более ОП решила свою проблему самостоятельно. –

+0

Я знаю, но я думал, что важно упомянуть, что его решение может не работать для всех случаев, и важно, чтобы люди, которые сюда попали (как и я), знали, что заранее – JustinCase

+0

Хорошо, поскольку вы убеждены в своих решение это нормально. Пусть он останется здесь. :-) –

Смежные вопросы