

 O Amazon Redshift não permitirá mais a criação de UDFs do Python a partir do Patch 198. As UDFs do Python existentes continuarão a funcionar normalmente até 30 de junho de 2026. Para ter mais informações, consulte a [publicação de blog ](https://aws.amazon.com/blogs/big-data/amazon-redshift-python-user-defined-functions-will-reach-end-of-support-after-june-30-2026/). 

# Descarregar dados no Amazon Redshift
<a name="c_unloading_data"></a>

Para descarregar dados de tabelas de banco de dados para um conjunto de arquivos em um bucket do Amazon S3, você pode usar o comando [UNLOAD](r_UNLOAD.md) com uma instrução SELECT. Você pode descarregar dados de texto em formato delimitado ou em formato de largura fixa, independente do formato de dados usado para carregá-los. Você também pode especificar se arquivos GZIP compactados devem ser criados.

Você pode limitar o acesso que os usuários têm ao seu bucket do Amazon S3 usando credenciais de segurança temporárias.

**Topics**
+ [Descarregar dados do Amazon S3](t_Unloading_tables.md)
+ [Descarregamento de arquivos de dados criptografados](t_unloading_encrypted_files.md)
+ [Descarregamento de dados em formato delimitado ou de largura fixa](t_unloading_fixed_width_data.md)
+ [Recarregamento de dados descarregados](t_Reloading_unload_files.md)

# Descarregar dados do Amazon S3
<a name="t_Unloading_tables"></a>

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](r_UNLOAD.md) 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 (\$1'). Para obter mais informações, consulte a referência do comando [SELECT](r_SELECT_synopsis.md). Para obter mais informações sobre o uso da cláusula LIMIT, consulte as [Observações de uso](r_UNLOAD.md#unload-usage-notes) 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://amzn-s3-demo-bucket/tickit/unload/`.

```
unload ('select * from venue')   
to 's3://amzn-s3-demo-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://amzn-s3-demo-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://amzn-s3-demo-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://amzn-s3-demo-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://amzn-s3-demo-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://amzn-s3-demo-bucket/tickit/venue_0000_part_00"},
    {"url":"s3://amzn-s3-demo-bucket/tickit/venue_0001_part_00"},
    {"url":"s3://amzn-s3-demo-bucket/tickit/venue_0002_part_00"},
    {"url":"s3://amzn-s3-demo-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 obter mais informações, consulte [Uso de um manifesto para especificar arquivos de dados](loading-data-files-using-manifest.md).

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:

```
amzn-s3-demo-bucket/tickit/venue_0000_part_00 
amzn-s3-demo-bucket/tickit/venue_0001_part_00 
amzn-s3-demo-bucket/tickit/venue_0002_part_00 
amzn-s3-demo-bucket/tickit/venue_0003_part_00
amzn-s3-demo-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\$1UNLOAD\$1LOG.

A consulta a seguir retorna o nome do caminho para os arquivos que foram criados por um UNLOAD: A função [PG\$1LAST\$1QUERY\$1ID](PG_LAST_QUERY_ID.md) 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://amzn-s3-demo-bucket/venue0000_part_00
  2320 | s3://amzn-s3-demo-bucket/venue0001_part_00
  2320 | s3://amzn-s3-demo-bucket/venue0002_part_00
  2320 | s3://amzn-s3-demo-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://amzn-s3-demo-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://amzn-s3-demo-bucket/venue_pipe_' 
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
manifest 
allowoverwrite;
```

# Descarregamento de arquivos de dados criptografados
<a name="t_unloading_encrypted_files"></a>

UNLOAD cria arquivos automaticamente usando a criptografia do lado do servidor do Amazon S3 (SSE-S3) com chaves de criptografia gerenciadas pela AWS. Você também pode especificar a criptografia no lado do servidor com uma chave do AWS Key Management Service (SSE-KMS) ou a criptografia do lado do cliente com uma chave gerenciada pelo cliente. Não é possível usar UNLOAD com a criptografia do lado do servidor do Amazon S3 utilizando uma chave fornecida pelo cliente. Para obter mais informações, consulte [Proteger dados usando a criptografia no lado do servidor](https://docs.aws.amazon.com/AmazonS3/latest/userguide/serv-side-encryption.html). 

Para descarregar no Amazon S3 usando criptografia do lado do servidor com uma chave AWS KMS, use o parâmetro KMS\$1KEY\$1ID para fornecer o ID da chave, conforme mostrado no exemplo a seguir.

```
unload ('select venuename, venuecity from venue')
to 's3://amzn-s3-demo-bucket/encrypted/venue_' 
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
KMS_KEY_ID '1234abcd-12ab-34cd-56ef-1234567890ab'
encrypted;
```

Se desejar fornecer sua própria chave de criptografia, você pode criar arquivos de dados criptografados do lado do cliente no Amazon S3 usando o comando UNLOAD com a opção ENCRYPTED. UNLOAD usa o mesmo processo de criptografia de envelope que a criptografia do lado do cliente do Amazon S3 usa. Você pode usar o comando COPY com a opção ENCRYPTED para carregar os arquivos criptografados.

O processo funciona deste modo:

1. Crie uma chave AES de 256 bits codificada por base64 que será usada como sua chave de criptografia privada ou *chave simétrica raiz*. 

1. Você emite um comando UNLOAD que inclua sua a chave simétrica raiz e a opção ENCRYPTED. 

1. UNLOAD gera uma chave simétrica de uso único (chamada *chave simétrica de envelope*) e um vetor de inicialização (IV), que a usa para criptografar seus dados. 

1. UNLOAD criptografa a chave simétrica de envelope usando sua chave simétrica raiz. 

1. O UNLOAD então armazena os arquivos de dados criptografados no Amazon S3 e armazena a chave do envelope criptografado e IV como metadados de objeto com cada arquivo. A chave de envelope criptografada é armazenada como metadados de objeto `x-amz-meta-x-amz-key` e o IV é armazenado como metadados de objeto `x-amz-meta-x-amz-iv`. 

Para obter mais informações sobre o processo de criptografia de envelope, consulte o artigo [Criptografia de dados do lado do cliente com o AWS SDK for Java e o Amazon S3](https://aws.amazon.com/articles/2850096021478074). 

Para descarregar arquivos de dados criptografados, adicione a chave-valor raiz à string de credenciais e inclua a opção ENCRYPTED. Se você usar a opção MANIFEST, o arquivo manifesto também será criptografado.

```
unload ('select venuename, venuecity from venue')
to 's3://amzn-s3-demo-bucket/encrypted/venue_' 
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
master_symmetric_key '<root_key>' 
manifest
encrypted;
```

Para descarregar arquivos de dados criptografados que estão compactador por GZIP, inclua a opção GZIP junto com a chave-valor raiz e a opção ENCRYPTED.

```
unload ('select venuename, venuecity from venue')
to 's3://amzn-s3-demo-bucket/encrypted/venue_' 
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
master_symmetric_key '<root_key>' 
encrypted gzip;
```

Para carregar os arquivos de dados criptografados, adicione o parâmetro de MASTER\$1SYMMETRIC\$1KEY com a mesma chave-valor raiz e inclua a opção ENCRYPTED. 

```
copy venue from 's3://amzn-s3-demo-bucket/encrypted/venue_' 
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
master_symmetric_key '<root_key>' 
encrypted;
```

# Descarregamento de dados em formato delimitado ou de largura fixa
<a name="t_unloading_fixed_width_data"></a>

Você pode descarregar dados em formato delimitado ou de largura fixa. A saída padrão é delimitada por pipe (usando o caractere '\$1').

O seguinte exemplo especifica uma vírgula como o delimitador: 

```
unload ('select * from venue')
to 's3://amzn-s3-demo-bucket/tickit/venue/comma' 
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
delimiter ',';
```

Os arquivos de saída resultantes são semelhantes a: 

```
20,Air Canada Centre,Toronto,ON,0
60,Rexall Place,Edmonton,AB,0
100,U.S. Cellular Field,Chicago,IL,40615
200,Al Hirschfeld Theatre,New York City,NY,0
240,San Jose Repertory Theatre,San Jose,CA,0
300,Kennedy Center Opera House,Washington,DC,0
...
```

Para descarregar o mesmo conjunto de resultados para um arquivo delimitado por guia, emita o seguinte comando: 

```
unload ('select * from venue') 
to 's3://amzn-s3-demo-bucket/tickit/venue/tab' 
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
delimiter as '\t';
```

Como alternativa, você pode usar uma especificação FIXEDWIDTH. Essa especificação consiste em um identificador para cada coluna da tabela e a largura da coluna (número de caracteres). O comando UNLOAD falhará em vez de truncar os dados, portanto especifica uma largura que tenha no mínimo o mesmo comprimento da entrada mais longa para aquela coluna. O descarregamento de dados de largura fixa funciona de modo similar ao descarregamento de dados delimitados, exceto que a saída resultante não contém caracteres delimitadores. Por exemplo: 

```
unload ('select * from venue')
to 's3://amzn-s3-demo-bucket/tickit/venue/fw' 
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
fixedwidth '0:3,1:100,2:30,3:2,4:6';
```

A saída de largura fixa é semelhante a: 

```
20 Air Canada Centre         Toronto      ON0
60 Rexall Place              Edmonton     AB0
100U.S. Cellular Field       Chicago      IL40615
200Al Hirschfeld Theatre     New York CityNY0
240San Jose Repertory TheatreSan Jose     CA0
300Kennedy Center Opera HouseWashington   DC0
```

Para mais detalhes sobre especificações FIXEDWIDTH, consulte o comando [UNLOAD](r_UNLOAD.md).

# Recarregamento de dados descarregados
<a name="t_Reloading_unload_files"></a>

Para recarregar os resultados de uma operação de descarregamento, você pode usar o comando COPY.

O seguinte exemplo mostra um caso simples no qual a tabela VENUE é descarregada usando um arquivo manifesto, truncada e recarregada. 

```
unload  ('select * from venue order by venueid')
to 's3://amzn-s3-demo-bucket/tickit/venue/reload_' 
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole' 
manifest 
delimiter '|';

truncate venue;

copy venue 
from 's3://amzn-s3-demo-bucket/tickit/venue/reload_manifest' 
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
manifest 
delimiter '|';
```

Após seu recarregamento, a tabela VENUE tem a seguinte aparência: 

```
select * from venue order by venueid limit 5;

 venueid |         venuename         |  venuecity  | venuestate | venueseats
---------+---------------------------+-------------+------------+-----------
       1 | Toyota Park               | Bridgeview  | IL         |          0
       2 | Columbus Crew Stadium     | Columbus    | OH         |          0
       3 | RFK Stadium               | Washington  | DC         |          0
       4 | CommunityAmerica Ballpark | Kansas City | KS         |          0
       5 | Gillette Stadium          | Foxborough  | MA         |      68756
(5 rows)
```