Amazon Redshift에서 UNLOAD 명령을 실행하면 오류가 발생합니다.
간략한 설명
Amazon Redshift에서 UNLOAD 명령을 실행할 때 다음과 같은 이유로 오류가 발생할 수 있습니다.
- 대상 Amazon Simple Storage Service(Amazon S3) 버킷 또는 접두사에 기존 객체가 포함되어 있습니다.
- AWS Identity and Access Management(IAM) 역할을 Amazon Redshift 클러스터에 연결하지 않았습니다.
- IAM 역할에 필요한 S3 버킷 권한이 없습니다.
- 데이터베이스 사용자에게 필요한 테이블 또는 스키마 권한이 없습니다.
해결 방법
참고: AWS Command Line Interface(AWS CLI) 명령을 실행할 때 오류가 발생하면 AWS CLI의 오류 해결을 참조하십시오. 또한 최신 AWS CLI 버전을 사용하고 있는지 확인하십시오.
S3 버킷 또는 접두사에 객체가 있음
대상 S3 버킷 또는 접두사에 객체가 이미 있는 경우 다음과 같은 오류 메시지가 표시될 수 있습니다.
"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."
이 오류를 해결하려면 ALLOWOVERWRITE 파라미터와 함께 다음 UNLOAD 명령을 실행합니다.
UNLOAD ('<SELECT query>')
TO 's3://S3 bucket or prefix'
IAM_ROLE 'IAM Role'
ALLOWOVERWRITE;
참고: S3 bucket 또는 prefix를 S3 버킷 또는 접두사로, IAM Role을 IAM 역할로 바꾸십시오.
자세한 내용은 파라미터를 참조하십시오.
IAM 역할을 클러스터와 연결하지 않았음
UNLOAD 명령에 지정된 IAM 역할을 Amazon Redshift 클러스터와 연결하지 않은 경우 다음과 같은 오류 메시지를 받습니다.
"UnauthorizedException, error type : 138, message: The requested role is not associated to cluster".
이 문제를 해결하려면 IAM 역할을 Amazon Redshift 클러스터와 연결하십시오.
다음 단계를 완료하십시오.
-
Amazon Redshift 콘솔 또는 AWS CLI를 엽니다.
-
다음 명령 중 하나를 실행합니다.
Amazon Redshift Provisioned의 경우 modify-cluster-iam-roles AWS CLI 명령을 실행합니다.
## Redshift Provisioned
aws redshift modify-cluster-iam-roles \
--cluster-identifier "Cluster Name" \
--add-iam-roles "IAM Role ARN"
참고: Cluster Name을 클러스터 이름으로 바꾸고 IAM Role ARN을 IAM 역할의 Amazon 리소스 이름(ARN)으로 바꾸십시오.
Amazon Redshift Serverless의 경우 update-namespace AWS CLI 명령을 실행합니다.
## Redshift Serverless
aws redshift-serverless update-namespace \
--namespace-name Namespace Name \
--iam-roles "IAM Role ARN"
참고: Namespace Name을 네임스페이스 이름으로 바꾸고 IAM Role ARN을 IAM 역할의 ARN으로 바꾸십시오.
자세한 내용은 클러스터와 IAM 역할 연결 관리를 참조하십시오.
IAM 역할에 필요한 S3 권한이 없음
IAM 역할에 필요한 S3 권한이 없는 경우 UNLOAD 명령이 실패하고 다음과 같은 오류 메시지가 표시됩니다.
"S3ServiceException:User: arn:aws:sts::<Account ID>:assumed-role/<IAM Role Name>/RedshiftIamRoleSession is not authorized to perform: s3:PutObject on resource: "<S3 Object Path>" because no identity-based policy".
IAM 역할에 대상 S3 버킷으로 데이터를 성공적으로 언로드하는 데 필요한 IAM 권한이 있는지 확인하십시오.
데이터베이스 사용자에게 필요한 테이블 또는 스키마 권한이 없음
데이터베이스 사용자에게 테이블 또는 스키마에 대한 필수 권한이 없는 경우 사용자는 다음 오류 메시지 중 하나를 받을 수 있습니다.
- "ERROR: permission denied for schema <Schema Name>".
- "ERROR: permission denied for relation <Table Name>".
데이터베이스 사용자에게 스키마에 대한 USAGE 권한과 테이블에 대한 SELECT 권한을 부여하려면 다음 GRANT 명령 중 하나를 실행합니다.
GRANT USAGE ON SCHEMA Schema Name TO DB User Name;
GRANT SELECT ON TABLE Table Name TO DB User Name;
참고: 위 명령에서 Schema Name을 스키마 이름으로, Table name을 테이블 이름으로, User Name을 사용자 이름으로 바꾸십시오.
추가 문제 해결
쿼리 ID와 오류 메시지를 식별하려면 STL_QUERY 또는 SYS_QUERY_HISTORY를 참조하십시오.
자세한 내용은 STL_ERROR 또는 SYS_UNLOAD_HISTORY를 참조하십시오.