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