Descarregar dados do Amazon S3
O Amazon Redshift divide os resultados de uma instrução selecionada em um conjunto de arquivos, um ou mais arquivos por fatia de nó, para simplificar o recarregamento paralelo dos dados. Como alternativa, você pode especificar que UNLOAD deve gravar os resultados em série para um ou mais arquivos adicionando a opção PARALLEL OFF. Você pode limitar o tamanho dos arquivos no Amazon S3 especificando o parâmetro MAXFILESIZE. O UNLOAD criptografa automaticamente os arquivos de dados usando a criptografia do lado do servidor Amazon S3 (SSE-S3).
Você pode usar qualquer instrução select no comando UNLOAD que o Amazon Redshift suporta, exceto para um select que usa uma cláusula LIMIT no select externo. Por exemplo, você pode usar uma instrução de seleção que inclua colunas específicas ou que use uma cláusula where para junção de várias tabelas. Se sua consulta contiver aspas (delimitando valores literais, por exemplo), você precisa escapá-las no texto da consulta (\'). Para obter mais informações, consulte a referência do comando SELECT. Para obter mais informações sobre o uso da cláusula LIMIT, consulte as Observações de uso para o comando UNLOAD.
Por exemplo, o comando UNLOAD a seguir envia o conteúdo da tabela VENUE para o bucket do Amazon S3 s3://DOC-EXAMPLE-BUCKET/tickit/unload/
.
unload ('select * from venue') to 's3://DOC-EXAMPLE-BUCKET/tickit/unload/venue_' iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole';
Os nomes dos arquivos criados pelo exemplo anterior incluem o prefixo ''venue_
.
venue_0000_part_00 venue_0001_part_00 venue_0002_part_00 venue_0003_part_00
Por padrão, UNLOAD grava dados em paralelo a vários arquivos, de acordo com o número de fatias no cluster. Para gravar dados em um único arquivo, especifique a PARALLEL OFF. UNLOAD grava os dados em série, classificados absolutamente de acordo com a cláusula ORDER BY, se ela for usada. O tamanho máximo de um arquivo de dados é 6,2 GB. Se o tamanho dos dados for maior que o máximo, UNLOAD criará arquivos adicionais, de até 6,2 GB cada.
O seguinte exemplo grava os conteúdos de VENUE em um único arquivo. Somente um arquivo for necessário, pois o tamanho do arquivo é menor que 6,2 GB.
unload ('select * from venue') to 's3://DOC-EXAMPLE-BUCKET/tickit/unload/venue_' iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole' parallel off;
nota
O comando UNLOAD é projetado para usar processamento paralelo. Recomendamos deixar PARALLEL habilitado na maioria dos casos, especialmente se os arquivos serão usados para carregar tabelas usando um comando COPY.
Supondo que o tamanho total dos dados de VENUE seja 5 GB, o seguinte exemplo grava os conteúdos de VENUE em 50 arquivos, cada um com 100 MB de tamanho.
unload ('select * from venue') to 's3://DOC-EXAMPLE-BUCKET/tickit/unload/venue_' iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole' parallel off maxfilesize 100 mb;
Se você incluir um prefixo na string do caminho do Amazon S3, UNLOAD usará esse prefixo para os nomes dos arquivos.
unload ('select * from venue') to 's3://DOC-EXAMPLE-BUCKET/tickit/unload/venue_' iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole';
Você pode criar um arquivo manifesto que liste os arquivos para descarregamento especificando a opção MANIFEST no comando UNLOAD. O manifesto é um arquivo de texto no formato JSON que lista explicitamente a URL de cada arquivo que foi gravado no Amazon S3.
O seguinte exemplo inclui a opção de manifesto:
unload ('select * from venue') to 's3://DOC-EXAMPLE-BUCKET/tickit/venue_' iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole' manifest;
O seguinte exemplo mostra um manifesto para quatro arquivos de descarregamento.
{ "entries": [ {"url":"s3://DOC-EXAMPLE-BUCKET/tickit/venue_0000_part_00"}, {"url":"s3://DOC-EXAMPLE-BUCKET/tickit/venue_0001_part_00"}, {"url":"s3://DOC-EXAMPLE-BUCKET/tickit/venue_0002_part_00"}, {"url":"s3://DOC-EXAMPLE-BUCKET/tickit/venue_0003_part_00"} ] }
O arquivo manifesto pode ser usado para carregar os mesmos arquivos usando COPY com a opção MANIFEST. Para ter mais informações, consulte Uso de um manifesto para especificar arquivos de dados.
Após a conclusão de uma operação UNLOAD, confirme se os dados foram descarregados corretamente navegando até o bucket do Amazon S3 onde UNLOAD gravou os arquivos. Você verá um ou mais arquivos numerados por fatia, começando com o número zero. Se você especificou a opção MANIFEST, você também verá um arquivo que termina com ''manifest
". Por exemplo:
DOC-EXAMPLE-BUCKET/tickit/venue_0000_part_00 DOC-EXAMPLE-BUCKET/tickit/venue_0001_part_00 DOC-EXAMPLE-BUCKET/tickit/venue_0002_part_00 DOC-EXAMPLE-BUCKET/tickit/venue_0003_part_00 DOC-EXAMPLE-BUCKET/tickit/venue_manifest
Você pode obter programaticamente uma lista dos arquivos que foram gravados no Amazon S3 chamando uma operação de listagem do Amazon S3 após a conclusão do UNLOAD. Você também pode consultar STL_UNLOAD_LOG.
A consulta a seguir retorna o nome do caminho para os arquivos que foram criados por um UNLOAD: A função PG_LAST_QUERY_ID retorna a consulta mais recente.
select query, substring(path,0,40) as path from stl_unload_log where query=2320 order by path; query | path -------+-------------------------------------- 2320 | s3://DOC-EXAMPLE-BUCKET/venue0000_part_00 2320 | s3://DOC-EXAMPLE-BUCKET/venue0001_part_00 2320 | s3://DOC-EXAMPLE-BUCKET/venue0002_part_00 2320 | s3://DOC-EXAMPLE-BUCKET/venue0003_part_00 (4 rows)
Se a quantidade de dados for muito grande, o Amazon Redshift pode dividir os arquivos em várias partes por fatia. Por exemplo:
venue_0000_part_00 venue_0000_part_01 venue_0000_part_02 venue_0001_part_00 venue_0001_part_01 venue_0001_part_02 ...
O comando UNLOAD a seguir inclui uma string entre aspas na instrução select, portanto, as aspas são escapadas (=\'OH\'
'
).
unload ('select venuename, venuecity from venue where venuestate=\'OH\' ') to 's3://DOC-EXAMPLE-BUCKET/tickit/venue/ ' iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole';
Por padrão, UNLOAD falhará em vez de substituir arquivos existentes no bucket de destino. Para substituir arquivos existentes, incluindo o arquivo manifesto, especifique a opção ALLOWOVERWRITE.
unload ('select * from venue') to 's3://DOC-EXAMPLE-BUCKET/venue_pipe_' iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole' manifest allowoverwrite;