Complete a 3 Question Survey and Earn a re:Post Badge
Help improve AWS Support Official channel in re:Post and share your experience - complete a quick three-question survey to earn a re:Post badge!
Como posso solucionar os problemas com o comando UNLOAD no Amazon Redshift?
Eu gostaria de utilizar o comando UNLOAD para extrair dados do meu cluster no Amazon Redshift para o Amazon Simple Storage Service (Amazon S3). Entretanto, eu recebo uma mensagem de erro.
Breve descrição
Ao executar o comando UNLOAD, você poderá receber uma mensagem de erro semelhante a uma das seguintes:
- “error: User arn:aws:redshift:us-west-2:account-id:dbuser:cluster-identifier/dbuser username is not authorized to assume IAM Role arn:aws:iam::account-id:role/Role name”
- “[Amazon](500310) Invalid operation: S3ServiceException:Access Denied,Status 403,Error AccessDenied,”
- “ERROR: Specified unload destination on S3 is not empty. Consider using a different bucket / prefix, manually removing the target files in S3, or using the ALLOWOVERWRITE option.”
Para resolver o problema, execute uma das seguintes ações com base na mensagem de erro recebida:
- Autorize o banco de dados a assumir o perfil do AWS Identity and Access Management (AWS IAM).
- Conceda às suas operações do Amazon S3 as permissões adequadas.
- Remova ou sobrescreva os objetos no bucket de destino. Altere o prefixo da chave S3. Ou utilize um bucket diferente.
Resolução
Dê autorização para banco de dados assumir o perfil do IAM
Para resolver esse problema, relacione o perfil do IAM com o cluster no Amazon Redshift. Ao incluir o perfil do IAM no comando UNLOAD, certifique-se de que não haja espaços em branco. Além disso, não se esqueça de utilizar a relação de confiança correta para o perfil do IAM, na qual você atribui ao cluster no Amazon Redshift.
Conceda às suas operações do Amazon S3 as permissões adequadas
Caso receba um erro de 403 Access Denied no bucket do S3, conceda às operações da API do S3 as permissões adequadas.
Exemplo de política:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:Get*", "s3:List*", "s3:PutObject" ], "Resource": [ "arn:aws:s3:::your_bucket", "arn:aws:s3:::your_bucket/*" ] } ] }
Caso estiver utilizando criptografia do lado do servidor, com chaves de criptografia gerenciadas do Amazon S3 (SSE-S3), seu bucket do S3 criptografará cada objeto com uma chave única.
Para criptografar os dados extraídos em repouso, execute o seguinte comando para definir o parâmetro s3:x-amz-server-side-encryption em sua política de bucket do S3 como true:
"Condition": { "Null": { "s3:x-amz-server-side-encryption": "true" }
Execute o comando a seguir para confirmar se você criptografou KMS\ _KEY\ _ID, assim você poderá extrair os dados criptografados para o bucket do S3:
unload ('select * from a') to 's3://mybucket/test/varchar/' iam_role 'arn:aws:iam::xxxxxx:role/RedshiftS3Access' ALLOWOVERWRITE CSV KMS_KEY_ID '11111111111111111111111111' encrypted;
Para buckets S3 que você criptografou com uma chave-raiz do AWS Key Management Service (AWS KMS), adicione as seguintes permissões de política do IAM:
"Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:DescribeKey" ]
Resolver problemas de bucket
Quando estiver tentando extrair arquivos em uma pasta onde o mesmo nome de arquivo já existe, você receberá uma mensagem de erro.
Para resolver esse erro, realize uma das ações a seguir:
- Crie um novo bucket do S3 ou utilize um bucket do S3 diferente.
- Altere o prefixo da chave S3.
- Remova os arquivos que estão no bucket do S3 de destino.
- Inclua a opção ALLOWOVERWRITE no comando UNLOAD.
Crie um novo bucket do S3 ou utilize um bucket do S3 diferente
- Crie um novo bucket do S3 ou escolha um bucket S3 diferente.
- Atualize a política de bucket do novo bucket do S3 ou de um diferente para incluir as seguintes permissões:
{ "Version": "2012-10-17", "Id": "ExamplePolicy01", "Statement": [ { "Sid": "ExampleStatement01", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::0123456789:user/<UserName>" }, "Action": [ "s3:GetObject", "s3:GetBucketLocation", "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::testbucket/*", "arn:aws:s3:::testbucket", "arn:aws:s3:::testbucket2/*", --> Additional permission for new bucket "arn:aws:s3:::testbucket2" ] } ] }
3. Utilize o novo caminho para o bucket a partir do comando UNLOAD.
Exemplo de comando:
unload ('select * from test_unload') to 's3://testbucket2/unload/test_unload_file1' iam_role 'arn:aws:iam::0123456789:role/redshift_role';
Altere o prefixo da chave S3
Ao executar o comando UNLOAD, altere o prefixo da chave do bucket do S3 no caminho do S3.
Exemplo de comando que inclui unload2 como prefixo alterado:
unload ('select * from test_unload') to 's3://testbucket/unload2/test_unload_file1' iam_role 'arn:aws:iam::0123456789:role/redshift_role';
Para mais informações, consulte Como organizar objetos utilizando prefixos.
Remova os arquivos que estão no bucket do S3 de destino
Importante: Ao utilizar a opção CLEANPATH para remover arquivos, você os exclui permanentemente e não será capaz de recuperá-los. Além disso, se você especificar a opção ALLOWOVERWRITE, você não poderá especificar a opção CLEANPATH.
Para utilizar a opção CLEANPATH, você precisará ter a permissão s3:DeleteObject no bucket do S3.
Exemplo de política de permissões:
{ "Version": "2012-10-17", "Id": "ExamplePolicy01", "Statement": [ { "Sid": "ExampleStatement01", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::0123456789:user/<UserName>" }, "Action": [ "s3:GetObject", "s3:GetBucketLocation", "s3:ListBucket", "s3:DeleteObject" --> Additional Action added for delete object ], "Resource": [ "arn:aws:s3:::testbucket/*", "arn:aws:s3:::testbucket" ] } ] }
Para remover arquivos existentes apenas das pastas de partição, inclua PARTITION BY.
Exemplo de comando UNLOAD que inclui CLEANPATH e PARTITION BY:
unload ('select * from test_unload') to 's3://testbucket/unload/test_unload_file1 iam_role 'arn:aws:iam::0123456789:role/redshift_role' partition by (col1,col2) include CLEANPATH;
Observação: Caso não queira remover as colunas de partição dos arquivos extraídos, especifique PARTITION BY com a opção INCLUDE.
Utilize a opção ALLOWOVERWRITE
Caso o comando UNLOAD encontre arquivos que possam ser sobrescritos, a operação de extração falhará. Quando incluir ALLOWOVERWRITE no comando, UNLOAD irá sobrescrever os arquivos existentes, incluindo o arquivo de manifesto.
Para utilizar a opção ALLOWOVERWRITE, você precisará ter a permissão s3:PutObject no bucket do S3.
Exemplo de política de permissões:
{ "Version": "2012-10-17", "Id": "ExamplePolicy01", "Statement": [ { "Sid": "ExampleStatement01", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::0123456789:user/<UserName>" }, "Action": [ "s3:GetObject", "s3:GetBucketLocation", "s3:ListBucket", "s3:PutObject" --> Additional Action added for overwriting objects ], "Resource": [ "arn:aws:s3:::testbucket/*", "arn:aws:s3:::testbucket" ] } ] }
Exemplo de comando UNLOAD que inclui a opção ALLOWOVERWRITE:
unload ('select * from test_unload') to 's3://testbucket/unload/test_unload_file1 iam_role 'arn:aws:iam::0123456789:role/redshift_role' allowoverwrite;
Informações relacionadas
Autorização ao Amazon Redshift para acessar os serviços da AWS em seu nome
Como evitar o upload de objetos não criptografados para o Amazon S3
As consultas parecem travar e, às vezes, não conseguem acessar o cluster

Conteúdo relevante
- feita há 15 horaslg...
- Resposta aceitafeita há 3 meseslg...
- feita há 2 meseslg...
- feita há 2 meseslg...