

 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/). 

# Usando o comando COPY para carregar do Amazon S3
<a name="t_loading-tables-from-s3"></a>

Use o comando [COPY](r_COPY.md) para carregar uma tabela em paralelo a partir de arquivos de dados no Amazon S3. Você pode especificar os arquivos a serem carregados usando um prefixo de objeto do Amazon S3 ou usando um arquivo manifesto.

A sintaxe para especificar os arquivos a serem carregados usando um prefixo é a seguinte:

```
COPY <table_name> FROM 's3://<bucket_name>/<object_prefix>'
authorization;
```

 O arquivo manifesto é um arquivo em formato JSON que lista os arquivos de dados a serem carregados. A sintaxe para especificar os arquivos a serem carregados usando um arquivo manifesto é a seguinte:

```
COPY <table_name> FROM 's3://<bucket_name>/<manifest_file>'
authorization
MANIFEST;
```

A tabela a ser carregada já deve existir no banco de dados. Para obter informações sobre como criar uma tabela, consulte [CRIAR TABELA](r_CREATE_TABLE_NEW.md) na referência do SQL. 

Os valores para *autorização* fornecem a autorização da AWS de que o Amazon Redshift precisa para acessar objetos do Amazon S3. Para obter informações sobre as permissões necessárias, consulte [Permissões do IAM para COPY, UNLOAD e CREATE LIBRARY](copy-usage_notes-access-permissions.md#copy-usage_notes-iam-permissions). O método preferido de autenticação é especificar o parâmetro IAM\$1ROLE e fornecer o nome de recurso da Amazon (ARN) para uma função do IAM com as permissões necessárias. Para obter mais informações, consulte [Controle de acesso com base em função](copy-usage_notes-access-permissions.md#copy-usage_notes-access-role-based) . 

Para autenticação usando o parâmetro IAM\$1ROLE, substitua *<aws-account-id>* e *<role-name>* conforme exibido na sintaxe a seguir. 

```
IAM_ROLE 'arn:aws:iam::<aws-account-id>:role/<role-name>'
```

O seguinte exemplo mostra a autenticação usando uma função do IAM.

```
COPY customer 
FROM 's3://amzn-s3-demo-bucket/mydata' 
IAM_ROLE 'arn:aws:iam::0123456789012:role/MyRedshiftRole';
```

Para obter mais informações sobre outras opções de autorização, consulte [Parâmetros de autorização](copy-parameters-authorization.md)

Se você quiser validar seus dados sem realmente carregar a tabela, use a opção NOLOAD com o comando [COPY](r_COPY.md).

O seguinte exemplo mostra as primeiras linhas de dados delimitados por pipe em um arquivo chamado `venue.txt`.

```
1|Toyota Park|Bridgeview|IL|0
2|Columbus Crew Stadium|Columbus|OH|0
3|RFK Stadium|Washington|DC|0
```

Antes de enviar o arquivo para o Amazon S3, divida o arquivo em vários arquivos para que o comando COPY possa carregá-lo usando o processamento paralelo. O número de arquivos deve ser um múltiplo do número de fatias em seu cluster. Divida seus arquivos de dados de carregamento para que os arquivos tenham o mesmo tamanho aproximado, entre 1 MB e 1 GB após a compactação. Para obter mais informações, consulte [Carregar dados de arquivos compactados e não compactados](t_splitting-data-files.md).

Por exemplo, o arquivo `venue.txt` pode ser dividido em quatro arquivos, da seguinte forma:

```
venue.txt.1
venue.txt.2
venue.txt.3
venue.txt.4
```

O seguinte comando COPY carrega a tabela VENUE usando os dados delimitados por pipe nos arquivos de dados com o prefixo “local” no bucket do Amazon S3 `amzn-s3-demo-bucket`. 

**nota**  
O bucket `amzn-s3-demo-bucket` do Amazon S3 nos exemplos a seguir não existe. Para uma amostra dos comandos COPY que usam dados reais em um bucket existente do Amazon S3, consulte [Carregar dados de amostra](https://docs.aws.amazon.com/redshift/latest/gsg/cm-dev-t-load-sample-data.html).

```
COPY venue FROM 's3://amzn-s3-demo-bucket/venue'
IAM_ROLE 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
DELIMITER '|';
```

Se nenhum objeto Amazon S3 com o prefixo “local” existir, o carregamento falhará.

**Topics**
+ [Uso de um manifesto para especificar arquivos de dados](loading-data-files-using-manifest.md)
+ [Carregar arquivos de dados compactados do Amazon S3](t_loading-gzip-compressed-data-files-from-S3.md)
+ [Carregar dados de largura fixa do Amazon S3](t_loading_fixed_width_data.md)
+ [Carregar dados multibyte do Amazon S3](t_loading_unicode_data.md)
+ [Carregar arquivos de dados criptografados do Amazon S3](c_loading-encrypted-files.md)

# Uso de um manifesto para especificar arquivos de dados
<a name="loading-data-files-using-manifest"></a>

Você pode usar um manifesto para garantir que o comando COPY carregue todos os arquivos necessários, e somente os arquivos necessários, para um carregamento de dados. Você pode usar um manifesto para carregar vários arquivos de buckets diferentes ou arquivos que não compartilham o mesmo prefixo. Em vez de fornecer um caminho de objeto para o comando COPY, você fornece o nome de um arquivo de texto em formato JSON que lista explicitamente os arquivos a serem carregados. O URL no manifesto deve especificar o nome de bucket e o caminho de objeto completo para o arquivo, e não apenas um prefixo.

Para obter mais informações sobre arquivos manifesto, consulte o exemplo de COPY [Usar um manifesto para especificar arquivos de dados](r_COPY_command_examples.md#copy-command-examples-manifest).

O seguinte exemplo mostra o JSON para carregar arquivos de diferentes buckets e com nomes de arquivos que começam com carimbos de data.

```
{
  "entries": [
    {"url":"s3://amzn-s3-demo-bucket1/2013-10-04-custdata", "mandatory":true},
    {"url":"s3://amzn-s3-demo-bucket1/2013-10-05-custdata", "mandatory":true},
    {"url":"s3://amzn-s3-demo-bucket2/2013-10-04-custdata", "mandatory":true},
    {"url":"s3://amzn-s3-demo-bucket2/2013-10-05-custdata", "mandatory":true}
  ]
}
```

O sinalizador opcional `mandatory` especifica se COPY deve retornar um erro se o arquivo não for localizado. O padrão de `mandatory` é `false`. Independentemente de qualquer configuração obrigatória, COPY será encerrado se nenhum arquivo for encontrado. 

O exemplo a seguir executa o comando COPY com o manifesto do exemplo anterior, chamado `cust.manifest`. 

```
COPY customer
FROM 's3://amzn-s3-demo-bucket/cust.manifest' 
IAM_ROLE 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
MANIFEST;
```

## Uso de um manifesto criado por UNLOAD
<a name="loading-data-files-using-unload-manifest"></a>

Um manifesto criado por uma operação [UNLOAD](r_UNLOAD.md) usando o parâmetro MANIFEST pode ter chaves que não são necessárias para a operação COPY. Por exemplo, o manifesto `UNLOAD` a seguir inclui uma chave `meta` que é necessária para uma tabela externa do Amazon Redshift Spectrum e para o carregamento de arquivos de dados em um formato de arquivo `ORC` ou `Parquet`. A chave `meta` contém uma chave `content_length` com um valor que é o tamanho real do arquivo em bytes. A operação COPY requer somente a chave `url` uma chave `mandatory` opcional.

```
{
  "entries": [
    {"url":"s3://amzn-s3-demo-bucket/unload/manifest_0000_part_00", "meta": { "content_length": 5956875 }},
    {"url":"s3://amzn-s3-demo-bucket/unload/unload/manifest_0001_part_00", "meta": { "content_length": 5997091 }}
 ]
}
```

Para obter mais informações sobre arquivos manifesto, consulte [Uso de um manifesto para especificar arquivos de dados](r_COPY_command_examples.md#copy-command-examples-manifest).

# Carregar arquivos de dados compactados do Amazon S3
<a name="t_loading-gzip-compressed-data-files-from-S3"></a>

Para carregar arquivos de dados compactados usando gzip, lzop, ou bzip2, inclua a opção correspondente: GZIP, LZOP ou BZIP2.

Por exemplo, o seguinte comando carrega a partir de arquivos que foram compactados usando lzop.

```
COPY customer FROM 's3://amzn-s3-demo-bucket/customer.lzo' 
IAM_ROLE 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
DELIMITER '|' LZOP;
```

**nota**  
Quando você compacta um arquivo de dados com compactação lzop e usa a opção *--filter*, não é possível usar o comando COPY.

# Carregar dados de largura fixa do Amazon S3
<a name="t_loading_fixed_width_data"></a>

Arquivos de dados de largura fixa têm comprimentos uniformes para cada coluna de dados. Cada campo em um arquivo de dados de largura fixa tem exatamente o mesmo comprimento e posição. Para dados de caracteres (CHAR e VARCHAR) em um arquivo de dados de largura fixa, você deve incluir espaços em branco iniciais ou finais como espaços reservados para manter a largura uniforme. Para números inteiros, você deve usar zeros iniciais como espaços reservados. Um arquivo de dados de largura fixa não tem qualquer delimitador para separar colunas.

Para carregar um arquivo de dados de largura fixa em uma tabela existente, USE o parâmetro FIXEDWIDTH no comando COPY. As especificações de sua tabela devem corresponder ao valor de fixedwidth\$1spec para que os dados sejam carregados corretamente.

Para carregar dados de largura fixa de um arquivo para uma tabela, emita o seguinte comando:

```
COPY table_name FROM 's3://amzn-s3-demo-bucket/prefix' 
IAM_ROLE 'arn:aws:iam::0123456789012:role/MyRedshiftRole' 
FIXEDWIDTH 'fixedwidth_spec';
```

O parâmetro *fixedwidth\$1spec* é uma string que contém um identificador para cada coluna e a largura de cada coluna, separados por um sinal de dois pontos. Os pares de **column:width** são delimitados por vírgulas. O identificador pode ser o que você escolher: números, letras ou uma combinação dos dois. O identificador não tem qualquer relação com a própria tabela, portanto a especificação deve conter as colunas na mesma ordem que a tabela.

Os dois exemplos a seguir mostram a mesma especificação, a primeira usando identificadores numéricos e a segunda usando identificadores de string:

```
'0:3,1:25,2:12,3:2,4:6'
```

```
'venueid:3,venuename:25,venuecity:12,venuestate:2,venueseats:6'
```

O seguinte exemplo exibe dados de amostra de largura fixa que poderiam ser carregados na tabela VENUE usando as especificações precedentes:

```
1  Toyota Park               Bridgeview  IL0
2  Columbus Crew Stadium     Columbus    OH0
3  RFK Stadium               Washington  DC0
4  CommunityAmerica Ballpark Kansas City KS0
5  Gillette Stadium          Foxborough  MA68756
```

O seguinte comando COPY carrega este conjunto de dados na tabela VENUE:

```
COPY venue
FROM 's3://amzn-s3-demo-bucket/data/venue_fw.txt' 
IAM_ROLE 'arn:aws:iam::0123456789012:role/MyRedshiftRole' 
FIXEDWIDTH 'venueid:3,venuename:25,venuecity:12,venuestate:2,venueseats:6';
```

# Carregar dados multibyte do Amazon S3
<a name="t_loading_unicode_data"></a>

Se seus dados incluem caracteres multibyte não ASCII (tal como caracteres chineses ou cirílicos), você deve carregar os dados em colunas VARCHAR. O tipo de dados VARCHAR é compatível com caracteres UTF-8 de quatro bytes, mas o tipo de dados CHAR aceita apenas caracteres ASCII de único byte. Você não pode carregar caracteres de cinco bytes ou mais nas tabelas do Amazon Redshift. Para obter mais informações sobre CHAR e VARCHAR, consulte [Tipos de dados](c_Supported_data_types.md).

Para verificar qual codificação um arquivo de entrada usa, use o comando * `file` * do Linux: 

```
$ file ordersdata.txt
ordersdata.txt: ASCII English text
$ file uni_ordersdata.dat
uni_ordersdata.dat: UTF-8 Unicode text
```

# Carregar arquivos de dados criptografados do Amazon S3
<a name="c_loading-encrypted-files"></a>

Você pode usar o comando COPY para carregar arquivos de dados que foram carregados no Amazon S3 usando criptografia do lado do servidor, criptografia do lado do cliente ou ambos. 

O comando COPY é compatível com os seguintes tipos de criptografia do Amazon S3:
+ Criptografia do lado do servidor com chaves gerenciadas pelo Amazon S3 (SSE-S3)
+ Criptografia do lado do servidor com o AWS KMS keys (SSE-KMS)
+ Criptografia do lado do cliente usando uma chave raiz simétrica do lado do cliente

O comando COPY não é compatível com os seguintes tipos de criptografia do Amazon S3:
+ Criptografia do lado do servidor com chaves fornecidas pelo cliente (SSE-C)
+ Criptografia do lado do cliente usando uma AWS KMS key
+ Criptografia do lado do cliente usando uma chave raiz assimétrica fornecida pelo cliente

Para obter mais informações sobre a criptografia do Amazon S3, consulte [ Proteger dados usando criptografia do lado do servidor](https://docs.aws.amazon.com/AmazonS3/latest/userguide/serv-side-encryption.html) e [Proteger dados usando criptografia do lado do cliente](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingClientSideEncryption.html) no Guia do usuário do Amazon Simple Storage Service.

O comando [UNLOAD](r_UNLOAD.md) criptografa arquivos automaticamente usando SSE-S3. Você também pode descarregar usando SSE-KMS ou criptografia do lado do cliente com uma chave simétrica gerenciada pelo cliente. Para obter mais informações, consulte . [Descarregamento de arquivos de dados criptografados](t_unloading_encrypted_files.md)

O comando COPY automaticamente reconhece e carrega arquivos de dados criptografados usando SSE-S3 e SSE-KMS. Você pode carregar arquivos criptografados usando uma chave raiz simétrica do lado do cliente, especificando a opção ENCRYPTED e fornecendo a chave-valor. Para obter mais informações, consulte [Carregamento de dados criptografados para Amazon S3](t_uploading-encrypted-data.md).

Para carregar arquivos de dados criptografados do lado do cliente, forneça a chave-valor raiz usando o parâmetro MASTER\$1SYMMETRIC\$1KEY e inclua a opção ENCRYPTED.

```
COPY customer FROM 's3://amzn-s3-demo-bucket/encrypted/customer' 
IAM_ROLE 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
MASTER_SYMMETRIC_KEY '<root_key>' 
ENCRYPTED
DELIMITER '|';
```

Para carregar arquivos de dados criptografados que estão compactados por gzip, lzop ou bzip2, inclua a opção GZIP, LZOP ou BZIP2 com a chave-valor raiz e a opção ENCRYPTED.

```
COPY customer FROM 's3://amzn-s3-demo-bucket/encrypted/customer' 
IAM_ROLE 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
MASTER_SYMMETRIC_KEY '<root_key>'
ENCRYPTED 
DELIMITER '|' 
GZIP;
```