2015-08-21 4 views
2

Я создаю копию базы данных красного смещения производства на уровне разработки. Я знаю, как выгружать данные из моего производственного экземпляра/кластера в s3, а затем копировать эти данные в мой экземпляр/кластер разработки, но только если я сразу выгружу все данные. Вместо этого я хотел бы скопировать только 1000 строк из каждой из моих таблиц, чтобы сократить пространство и время передачи между моими красными смещениями.Как выгрузить только 1000 строк из таблиц красного смещения

например.

UNLOAD ('SELECT * FROM myschema.mytable LIMIT 1000') TO 's3://my-bucket' CREDENTIALS etcetcetc 

Есть ли способ сделать это LIMIT с UNLOAD, или я буду иметь, чтобы перейти к парадигме объемной вставки стиля?

EDIT: Я программно разгрузка и копирование кучи таблиц, так что я не хочу жесткий код в любых ключевых на основе ограничений в случае добавления новых таблиц или изменение структуры таблиц и т.д.

ответ

5

в то время как «LIMIT» не является частью команды фактической «Выгрузить», то Redshift documentation on UNLOAD provides a few alternatives:

Предельной Статья

SELECT, запрос не может использовать положение LIMIT во внешнем SELECT. Например, следующее утверждение UNLOAD потерпит неудачу:

unload ('select * from venue limit 10') 
to 's3://mybucket/venue_pipe_' credentials 
'aws_access_key_id=<access-key-id>;aws_secret_access_key=<secret-access-key>'; 

Вместо этого используйте вложенное условие LIMIT. Например:

unload ('select * from venue where venueid in 
(select venueid from venue order by venueid desc limit 10)') 
to 's3://mybucket/venue_pipe_' credentials 
'aws_access_key_id=<access-key-id>;aws_secret_access_key=<secret-access-key>'; 

В качестве альтернативы, вы можете заполнить таблицу с помощью SELECT ... INTO или CREATE TABLE AS, используя условие LIMIT, а затем выгрузить из этой таблицы.

+0

Ах. Я должен был упомянуть, что я ничего не знаю о таблицах, которые я копирую раньше времени, я создаю список выгружающих операторов из запроса, содержащегося в утилитах Redshift Amazon (https://github.com/awslabs/ амазонка-красное смещение-Utils). Это хорошее начало, хотя, позвольте мне посмотреть, смогу ли я это сделать ... – adavea

+3

Мне удалось выполнить то, что я делал, создав временные таблицы с только 1000 строками в них, а затем выгружая эти таблицы вместо полных таблиц. , например. CREATE TEMPORARY TABLE temp_table_for_loading_things AS SELECT * FROM schema.table_to_copy LIMIT 1000; UNLOAD ('SELECT * FROM temp_table_for_loading_things') TO 's3: // tmp_bucket' CREDENTIALS 'aws_access_key_id = KEY; aws_secret_access_key = PASS' GZIP DELIMITER '\ t'; – adavea

+0

В качестве альтернативы вы также можете «выгрузить» (выберите «temp. * From» (выберите col1, col2 из места проведения мероприятия по адресу siteid desc limit 10 as temp ') в' s3: // '... ' –

0

Если таблица создается со стилем распределения (кроме «Все» распределения стиля), то нет никакой необходимости предельного понятия.

Скажем, если вы создали таблицу со стилем распределения «даже» (который стиль распределение по умолчанию) и у вас есть 4 различных дочерний узел, то при разгрузке, полностью 4 файла будет генерироваться за столом в Amazon S3 ,