Troubleshooting bulk data loads (벌크 데이터 로드 문제 해결)
이 주제는 벌크 데이터 로드 문제를 해결하는 체계적인 접근 방식을 설명해요.
출처: Snowflake Documentation
본문
데이터 로드 실패
Step 1: 테이블의 COPY 기록 보기
테이블의 로드 활동 기록을 쿼리해요. 정보는 COPY_HISTORY를 참고해요. STATUS 컬럼은 특정 파일 집합이 로드되었는지, 부분적으로 로드되었는지, 로드에 실패했는지를 나타내요. FIRST_ERROR_MESSAGE 컬럼은 부분 로드나 실패 시 그 이유를 제공해요.
파일 집합에 여러 문제가 있으면 FIRST_ERROR_MESSAGE 컬럼은 마주친 첫 번째 오류만 나타내요. 파일의 모든 오류를 보려면 Step 2: 데이터 로드 검증을 참고해요.
Step 2: 데이터 로드 검증
VALIDATION_MODE 복사 옵션은 COPY 문에 로드할 데이터를 검증하고 지정된 검증 옵션에 따라 결과를 반환하도록 지시해요. 이 복사 옵션을 지정하면 데이터가 로드되지 않아요. 이 복사 옵션에 대한 자세한 내용은 COPY INTO
을 참고해요.
VALIDATION_MODE 복사 옵션을 RETURN_ALL_ERRORS로 설정한 COPY 문을 실행해요. 문에서 로드하려고 시도했던 파일 집합을 참조해요.
다음 예는 오류가 포함된 파일 집합을 검증해요. 오류 분석을 돕기 위해 COPY INTO 문이 문제 레코드를 텍스트 파일로 언로드해 원래 데이터 파일에서 분석·수정될 수 있게 해요. 문은 RESULT_SCAN 테이블 함수를 쿼리해 레코드를 검색해요. 이 섹션의 문은 LAST_QUERY_ID 함수로 해당 레코드를 검색하려면 연속으로 실행해야 한다는 점에 주의해요.
COPY INTO mytable
FROM @mystage/myfile.csv.gz
VALIDATION_MODE=RETURN_ALL_ERRORS;
SET qid=last_query_id();
COPY INTO @mystage/errors/load_errors.txt FROM (SELECT rejected_record FROM TABLE(result_scan($qid)));
기타 문제
오류: 스테이지 {1}와 연결된 통합 {0}을(를) 찾을 수 없음
003139=SQL compilation error:\nIntegration ''{0}'' associated with the stage ''{1}'' cannot be found.
이 오류는 외부 스테이지와 스테이지에 연결된 저장 통합 사이의 연결이 끊어졌을 때 발생할 수 있어요. 저장 통합 객체가 (CREATE OR REPLACE STORAGE INTEGRATION을 사용해) 다시 생성되었을 때 이런 일이 발생해요. 스테이지는 저장 통합의 이름이 아니라 숨겨진 ID를 사용해 저장 통합에 연결돼요. 내부적으로 CREATE OR REPLACE 구문은 객체를 드롭하고 다른 숨겨진 ID로 다시 생성해요.
하나 이상의 스테이지에 연결된 후 저장 통합을 다시 생성해야 한다면, 각 스테이지와 저장 통합 사이의 연결을 ALTER STAGE stage_name SET STORAGE_INTEGRATION = storage_integration_name을 실행해 재설정해야 해요. 여기서:
stage_name은 스테이지의 이름이에요.
storage_integration_name은 저장 통합의 이름이에요.
COPY_HISTORY 뷰의 LOAD_TIME 값보다 일찍 CURRENT_TIMESTAMP로 삽입된 로드 시간
테이블 설계자는 레코드가 테이블에 로드될 때 현재 타임스탬프를 기본값으로 삽입하는 타임스탬프 컬럼을 추가할 수 있어요. 의도는 각 레코드가 테이블에 로드된 시점을 캡처하는 것이지만, 타임스탬프는 COPY_HISTORY 함수(Information Schema) 또는 COPY_HISTORY 뷰(Account Usage)가 반환하는 LOAD_TIME 컬럼 값보다 일찍입니다. 이유는 CURRENT_TIMESTAMP가 레코드가 테이블에 삽입될 때(즉, 로드 작업의 트랜잭션이 커밋될 때)가 아니라 로드 작업이 클라우드 서비스에서 컴파일될 때 평가되기 때문이에요.
기록 로딩을 더 정확하게 나타내는 METADATA$START_SCAN_TIME를 포함하고 쿼리하는 것이 권장돼요.
더 알아보기 (Learn more)