Usando o comando COPY para carregar do Amazon S3 - Amazon Redshift

Usando o comando COPY para carregar do Amazon S3

Use o comando COPY 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 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. O método preferido de autenticação é especificar o parâmetro IAM_ROLE 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.

Para autenticação usando o parâmetro IAM_ROLE, 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

Se você quiser validar seus dados sem realmente carregar a tabela, use a opção NOLOAD com o comando COPY.

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 ter mais informações, consulte Carregar dados de arquivos compactados e não compactados.

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 amzn-s3-demo-bucket do Amazon S3.

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.

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á.