Amazon Redshift에서 COPY 명령을 사용할 때 발생하는 데이터 로드 오류 문제를 해결하려면 어떻게 해야 하나요?

3분 분량
0

COPY 명령을 사용하여 플랫 파일을 로드했습니다. 하지만 Amazon Redshift에서 데이터 로드 문제 또는 오류가 발생합니다.

간략한 설명

STL_LOAD_ERRORS 테이블을 사용하여 플랫 파일 로드 중에 발생하는 데이터 로드 오류를 식별할 수 있습니다. STL_LOAD_ERRORS 테이블을 사용하면 데이터 로드 진행 상황을 추적하고 실패 또는 오류를 기록할 수 있습니다. 문제를 해결한 후 COPY 명령을 사용하여 플랫 파일의 데이터를 다시 로드합니다.

참고: COPY 명령을 사용하여 Parquet 형식의 플랫 파일을 로드하는 경우, SVL_S3LOG 테이블을 사용하여 오류를 식별할 수도 있습니다.

해결 방법

참고: 다음 단계에서는 도시 및 장소의 예제 데이터세트를 사용합니다.

STL_LOAD_ERRORS 테이블을 사용하여 데이터 로드 오류를 식별하려면 다음 단계를 완료합니다.

  1. 샘플 플랫 파일의 데이터를 확인하고 소스 데이터가 유효한지 확인합니다.

    7|BMO Field|Toronto|ON|016|TD Garden|Boston|MA|0  
    23|The Palace of Auburn Hills|Auburn Hills|MI|0  
    28|American Airlines Arena|Miami|FL|0  
    37|Staples Center|Los Angeles|CA|0  
    42|FedExForum|Memphis|TN|0  
    52|PNC Arena|Raleigh|NC  ,25   |0  
    59|Scotiabank Saddledome|Calgary|AB|0  
    66|SAP Center|San Jose|CA|0  
    73|Heinz Field|Pittsburgh|PA|65050

    위의 예제 **demo.txt ** 파일에서는 파이프 문자로 사용되는 5개의 필드를 구분하고 있습니다. 자세한 내용을 보려면 파이프(기본 구분 기호)로 구분된 파일에서 LISTING 로드를 참조하세요.

  2. Amazon Redshift 콘솔을 엽니다.

  3. 다음 DDL(데이터 정의 언어)을 사용하여 샘플 테이블을 만드세요.

    CREATE TABLE VENUE1(VENUEID SMALLINT,  
    VENUENAME VARCHAR(100),  
    VENUECITY VARCHAR(30),  
    VENUESTATE CHAR(2),  
    VENUESEATS INTEGER  
    ) DISTSTYLE EVEN;
  4. 데이터 로드 오류의 원인을 확인하려면 STL_LOAD_ERRORS 테이블에서 관련 열을 미리 볼 수 있는 보기를 만듭니다.

    create view loadview as(select distinct tbl, trim(name) as table_name, query, starttime,  
    trim(filename) as input, line_number, colname, err_code,  
    trim(err_reason) as reason  
    from stl_load_errors sl, stv_tbl_perm sp  
    where sl.tbl = sp.id);
  5. 데이터를 로드하려면 COPY 명령을 실행합니다.

    copy Demofrom 's3://your_S3_bucket/venue/'  
    iam_role 'arn:aws:iam::123456789012:role/redshiftcopyfroms3'  
    delimiter '|' ;

    참고: your_S3_bucket을 S3 버킷의 이름으로 바꾸고, arn:aws:iam::123456789012:role/redshiftcopyfroms3를 AWS Identity and Access Management(IAM) 역할의 ARN으로 바꿉니다. IAM 역할에는 S3 버킷의 데이터에 액세스할 수 있는 권한이 있어야 합니다. 자세한 내용을 보려면 파라미터를 참조하세요.

  6. 테이블의 오류 로드 세부 정보를 표시하고 검토하려면 로드 뷰를 쿼리합니다.

    testdb=# select * from loadview where table_name='venue1';tbl | 265190  
    table_name | venue1  
    query | 5790  
    starttime | 2017-07-03 11:54:22.864584  
    input | s3://  
    your_S3_bucket/venue/venue_pipe0000_part_00  
    line_number | 7  
    colname | venuestate  
    err_code | 1204  
    reason | Char length exceeds DDL length

    위 예제에서는 길이 값 때문에 예외가 발생했으며 이를 venustate 열에 추가해야 합니다. (NC ,25 |) 값이 VENUESTATE CHAR(2) DDL에 정의된 길이보다 깁니다.
    이 문제를 해결하려면 다음 작업 중 하나를 완료하세요.
    데이터가 정의된 열 길이를 초과할 것으로 예상되는 경우 테이블 정의를 업데이트하여 열 길이를 수정하세요.
    -또는-
    데이터의 형식이 올바르지 않거나 변환되지 않은 경우, 올바른 값을 사용하도록 파일의 데이터를 수정합니다.
    쿼리의 출력에는 다음 정보가 포함됩니다.
    오류의 원인이 되는 파일
    오류의 원인이 되는 열
    입력 파일의 줄 번호
    예외가 발생한 이유

  7. 로드 파일의 데이터를 수정하여 올바른 값을 사용합니다.

    7|BMO Field|Toronto|ON|016|TD Garden|Boston|MA|0  
    23|The Palace of Auburn Hills|Auburn Hills|MI|0  
    28|American Airlines Arena|Miami|FL|0  
    37|Staples Center|Los Angeles|CA|0  
    42|FedExForum|Memphis|TN|0  
    52|PNC Arena|Raleigh|NC|0  
    59|Scotiabank Saddledome|Calgary|AB|0  
    66|SAP Center|San Jose|CA|0  
    73|Heinz Field|Pittsburgh|PA|65050

    참고: 길이는 정의된 열 길이와 일치해야 합니다.

  8. 데이터 로드를 다시 로드합니다.

    testdb=# copy Demofrom 's3://your_S3_bucket/sales/'  
    iam_role 'arn:aws:iam::123456789012:role/redshiftcopyfroms3' delimiter '|' ;  
    INFO:  Load into table 'venue1' completed, 808 record(s) loaded successfully.

    **참고:**STL_LOAD_ERRORS 테이블은 제한된 수의 로그만 약 4~5일 동안 보관할 수 있습니다. 표준 사용자는 STL_LOAD_ERRORS 테이블을 쿼리할 때 자신의 데이터만 볼 수 있습니다. 모든 테이블 데이터를 보려면 슈퍼 사용자여야 합니다.

관련 정보

테이블 설계를 위한 Amazon Redshift 모범 사례

데이터 로드를 위한 Amazon Redshift 모범 사례

데이터 로드 문제 해결을 위한 시스템 테이블

Amazon Redshift Advisor의 권장 사항 활용

AWS 공식
AWS 공식업데이트됨 5달 전