2013-08-08 1 views
3

Amazon RedShift의 경우 일반적으로 'copy'명령을 사용하여 S3에서 데이터가로드됩니다. 명령이 원자인지 아닌지 알고 싶습니다. 예 : 일부 예외적 인 경우 데이터 파일의 일부만 RedShift 테이블에로드 할 수 있습니까?Amazon RedShift의 'copy'명령은 원 자성입니까?

답변

5

복사 명령이 원자이다. 파일에로드 실패를 유발할 수있는 유효하지 않은 행이 포함되어 있으면 COPY 트랜잭션이 롤백되고 데이터를 가져 오지 않습니다.

유효하지 않은 행을 생략하고 트랜잭션을 중지하지 않으려면 유효하지 않은 행을 무시하는 COPY 명령에 MAXERROR 옵션을 사용할 수 있습니다. 다음은 최대 100 개의 유효하지 않은 행을 무시하는 예제입니다.

COPY table_name from 's3://[bucket-name]/[file-path or prefix]' CREDENTIALS 'aws_access_key_id=xxxx;aws_secret_access_key=xxxx' DELIMITER '\t' MAXERROR 100; 

유효하지 않은 행 수가 MAXERROR 오류 개수 (100)보다 많으면 트랜잭션이 롤백됩니다.

COPY 명령에 대한 자세한 내용은 다음 링크를 참조하십시오. http://docs.aws.amazon.com/redshift/latest/dg/r_COPY.html

2

NOLOAD 플래그를 사용하여 데이터를로드하기 전에 오류를 확인할 수 있습니다. 이것은 데이터를로드하려고 시도하지 않고 데이터 형식을 검증하는 더 빠른 방법이며, 파싱 만합니다.

당신은 당신이 MAXERROR 수보다 더 많은 경우 MAXERROR 플래그

으로 허용하고자하는 얼마나 많은 오류를 정의 할 수 있습니다, 당신의 부하가 실패하고 더 레코드가 추가되지 않습니다.

여기에서 자세한 내용을 참조하십시오 : 기본 옵션으로 http://docs.aws.amazon.com/redshift/latest/dg/r_COPY.html

+0

오류가 발생해도 레코드의 일부를로드 할 수 없다는 것을 의미합니까? – ciphor

+1

오류 수가 MAXERROR보다 작은 경우 나머지는 올바르게 복사됩니다 – Guy