데이터 오류 처리
적용 대상: SQL Server Azure Data Factory의 SSIS Integration Runtime
데이터 흐름 구성 요소가 열 데이터에 변환을 적용하거나, 원본에서 데이터를 추출하거나, 데이터를 대상으로 로드하는 경우 오류가 발생할 수 있습니다. 예기치 않은 데이터 값으로 인해 오류가 자주 발생합니다. 예를 들어 열에 숫자 대신 문자열이 포함되었기 때문에 데이터 변환이 실패하거나, 열의 데이터 형식은 숫자인데 데이터가 날짜여서 데이터베이스 열에 대한 삽입 작업이 실패하거나, 열 값이 0이어서 식 계산이 실패하고 잘못된 수치 연산이 발생할 수 있습니다.
오류는 일반적으로 다음 범주 중 하나에 속합니다.
데이터 변환 오류는 변환으로 인해 유효 자릿수 손실, 중요하지 않은 자릿수 손실 및 문자열 잘림이 발생하는 경우 발생합니다. 요청된 변환이 지원되지 않는 경우에도 데이터 변환 오류가 발생합니다.
런타임에 계산되는 식이 잘못된 작업을 수행하거나 누락되거나 잘못된 데이터 값으로 인해 구문적으로 올바르지 않은 경우 발생하는 식 평가 오류입니다.
조회 작업에서 조회 테이블에서 일치 항목을 찾지 못하는 경우 발생하는 조회 오류입니다.
Integration Services 오류, 경고 및 기타 메시지 목록은 Integration Services 오류 및 메시지 참조를 참조하세요.
오류 출력을 사용하여 행 수준 오류 캡처
많은 데이터 흐름 구성 요소는 오류 출력을 지원하므로 들어오는 데이터와 나가는 데이터 모두에서 구성 요소가 행 수준 오류를 처리하는 방법을 제어할 수 있습니다. 입력 또는 출력의 개별 열에 대해 옵션을 설정하여 잘림이나 오류가 발생할 경우 구성 요소에서 작동하는 방법을 지정합니다. 예를 들어 고객 이름 데이터가 잘리는 경우 구성 요소가 실패해야 함을 지정할 수 있지만 덜 중요한 데이터가 포함된 다른 열의 오류는 무시합니다.
오류 출력은 다른 변환의 입력에 연결되거나 오류가 아닌 출력과 다른 대상으로 로드될 수 있습니다. 예를 들어 오류 출력은 비어 있는 열에 대한 문자열을 제공하는 파생 열 변환에 연결될 수 있습니다.
다음 다이어그램에서는 오류 출력을 포함한 간단한 데이터 흐름을 보여 집니다.
자세한 내용은 데이터 흐름 및 Integration Services 경로를 참조하세요.
오류 출력 구성 대화 상자
오류 출력 구성 대화 상자를 사용하여 오류 출력을 지원하는 데이터 흐름 변환에 대한 오류 처리 옵션을 구성합니다.
오류 출력 작업에 대한 자세한 내용은 데이터에서 오류 처리를 참조 하세요.
옵션
입력 또는 출력
출력의 이름을 봅니다.
열
변환 편집기 대화 상자에서 선택한 출력 열을 봅니다.
오류
오류가 발생할 경우 수행할 동작을 지정합니다. 실패를 무시, 행 리디렉션, 또는 컴포넌트 실패를 지정정할 수 있습니다.
관련 항목: 데이터에서 오류 처리
잘림
잘림이 발생할 경우 수행할 동작을 지정합니다. 오류 무시, 행 리디렉션 또는 구성 요소 실패를 지정할 수 있습니다.
관련 항목: 데이터에서 오류 처리
설명
작업에 대한 설명을 봅니다.
이 값을 선택한 셀로 설정
오류나 잘림 발생 시 선택한 모든 셀에 수행할 동작을 지정합니다. 오류 무시, 행 리디렉션 또는 구성 요소 실패를 지정할 수 있습니다.
적용
선택된 셀에 오류 처리 옵션을 적용합니다.
오류는 실패 또는 잘림입니다.
오류는 오류 또는 잘림의 두 가지 범주 중 하나에 속합니다.
오류. 오류는 명백한 오류를 나타내고 NULL 결과를 생성합니다. 이러한 오류에는 데이터 변환 오류 또는 식 평가 오류가 포함될 수 있습니다. 예를 들어 알파벳 순 문자가 포함된 문자열을 숫자로 변환하려고 하면 오류가 발생합니다. 캐스트가 잘못되거나 호환되지 않는 데이터 형식을 사용하는 경우 데이터 변환, 식 평가, 변수와 속성 및 데이터 열에 식 결과를 할당하는 작업이 실패할 수 있습니다. 자세한 내용은 캐스트(SSIS 식), 식에서의 Integration Services 데이터 형식 및 Integration Services 데이터 형식을 참조하세요.
잘림. 잘림은 오류보다 덜 심각합니다. 잘림은 사용 가능하거나 바람직할 수 있는 결과를 생성합니다. 잘림을 오류 또는 허용 가능한 조건으로 처리하도록 선택할 수 있습니다. 예를 들어 한 자만 수용할 수 있는 열에 15자의 문자열을 삽입하는 경우 해당 문자열을 잘라내도록 할 수 있습니다.
오류 처리 옵션 선택
원본, 변환 및 대상에서 오류 및 잘림이 처리되는 방법을 구성할 수 있습니다. 다음 테이블에서는 옵션을 설명합니다.
옵션 | 설명 |
---|---|
구성 요소 실패 | 오류 또는 잘림이 발생하면 데이터 흐름 태스크가 실패합니다. 오류는 오류 및 잘림에 대한 기본 옵션입니다. |
오류 무시 | 오류 또는 잘림은 무시되고 데이터 행은 변환 또는 원본의 출력으로 이동합니다. |
행 리디렉션 | 오류 또는 잘림이 발생한 데이터 행이 원본, 변환 또는 대상의 오류 출력으로 전달됩니다. |
오류에 대한 자세한 정보 가져오기
오류 출력에는 데이터 열 외에도 ErrorCode 및 ErrorColumn 열이 포함됩니다. ErrorCode 열은 오류를 식별하고 ErrorColumn에는 오류 열의 계보 식별자가 포함됩니다.
경우에 따라 ErrorColumn 열의 값이 0으로 설정됩니다. 이 오류 조건은 단일 열 대신 전체 행에 영향을 줄 때 발생합니다. 조회 변환에서 조회가 실패하는 경우를 예로 들면 다음과 같습니다.
이러한 2가지 숫자 값은 해당 오류 설명과 열 이름이 없으므로 사용이 제한될 수 있습니다. 다음은 오류 설명 및 열 이름을 가져오는 몇 가지 방법입니다.
오류 출력에 데이터 뷰어를 연결하면 오류 설명과 열 이름을 모두 확인할 수 있습니다. SSIS 디자이너에서 오류 출력으로 이어지는 빨간색 화살표를 마우스 오른쪽 단추로 클릭하고 데이터 뷰어 사용을 선택합니다.
로깅을 사용하도록 설정하고 DiagnosticEx 이벤트를 선택하여 열 이름을 찾을 수 있습니다. 이 이벤트는 로그에 데이터 흐름 열 맵을 씁니다. 그런 다음 이 열 맵의 식별자에서 열 이름을 조회할 수 있습니다. DiagnosticEx 이벤트는 로그 크기를 줄이기 위해 XML 출력에 공백을 유지하지 않습니다. 가독성을 높이기 위해 XML 서식 지정 및 구문 강조를 지원하는 XML 편집기(예: Visual Studio)로 로그를 복사합니다. 로깅에 대한 자세한 내용은 Integration Services(SSIS) 로깅을 참조하세요.
다음은 데이터 흐름 열 맵의 예입니다.
\<DTS:PipelineColumnMap xmlns:DTS="www.microsoft.com/SqlServer/Dts"> \<DTS:Pipeline DTS:Path="\Package\Data Flow Task"> \<DTS:Column DTS:ID="11" DTS:IdentificationString="ADO NET Source.Outputs[ADO NET Source Output].Columns[Customer]"/> \<DTS:Column DTS:ID="12" DTS:IdentificationString="ADO NET Source.Outputs[ADO NET Source Output].Columns[Product]"/> \<DTS:Column DTS:ID="13" DTS:IdentificationString="ADO NET Source.Outputs[ADO NET Source Output].Columns[Price]"/> \<DTS:Column DTS:ID="14" DTS:IdentificationString="ADO NET Source.Outputs[ADO NET Source Output].Columns[Timestamp]"/> \<DTS:Column DTS:ID="20" DTS:IdentificationString="ADO NET Source.Outputs[ADO NET Source Error Output].Columns[Customer]"/> \<DTS:Column DTS:ID="21" DTS:IdentificationString="ADO NET Source.Outputs[ADO NET Source Error Output].Columns[Product]"/> \<DTS:Column DTS:ID="22" DTS:IdentificationString="ADO NET Source.Outputs[ADO NET Source Error Output].Columns[Price]"/> \<DTS:Column DTS:ID="23" DTS:IdentificationString="ADO NET Source.Outputs[ADO NET Source Error Output].Columns[Timestamp]"/> \<DTS:Column DTS:ID="24" DTS:IdentificationString="ADO NET Source.Outputs[ADO NET Source Error Output].Columns[ErrorCode]"/> \<DTS:Column DTS:ID="25" DTS:IdentificationString="ADO NET Source.Outputs[ADO NET Source Error Output].Columns[ErrorColumn]"/> \<DTS:Column DTS:ID="31" DTS:IdentificationString="Flat File Destination.Inputs[Flat File Destination Input].Columns[Customer]"/> \<DTS:Column DTS:ID="32" DTS:IdentificationString="Flat File Destination.Inputs[Flat File Destination Input].Columns[Product]"/> \<DTS:Column DTS:ID="33" DTS:IdentificationString="Flat File Destination.Inputs[Flat File Destination Input].Columns[Price]"/> \<DTS:Column DTS:ID="34" DTS:IdentificationString="Flat File Destination.Inputs[Flat File Destination Input].Columns[Timestamp]"/> \</DTS:Pipeline> \</DTS:PipelineColumnMap>
스크립트 구성 요소를 사용하여 오류 출력의 추가 열에 오류 설명과 열 이름을 포함할 수도 있습니다. 예제는 스크립트 구성 요소를 사용하여 오류 출력 향상을 참조하세요.
한 줄의 스크립트를 사용하여 IDTSComponentMetaData100 인터페이스의 GetErrorDescription 메서드를 호출하여 추가 열에 오류 설명을 포함합니다.
IDTSComponentMetaData100 인터페이스의 [Microsoft.SqlServer.Dts.Pipeline.Wrapper.IDTSComponentMetaData100.GetIdentificationStringByID*](/previous-versions/sql/sql-server-2016/mt657629(v=sql.130)) 메서드를 호출하는 스크립트 한 줄을 사용하여 추가 열에 열 이름을 포함합니다.
스크립트 구성 요소를 캡처하려는 오류가 있는 데이터 흐름 구성 요소의 모든 다운스트림에서 데이터 흐름의 오류 세그먼트에 추가할 수 있습니다. 일반적으로는 오류 행이 대상에 기록되기 직전에 Script 구성 요소를 배치합니다. 이렇게 하면 스크립트가 작성된 오류 행에 대한 설명만 조회합니다. 데이터 흐름의 오류 세그먼트가 일부 오류를 수정하고 해당 행을 오류 대상에 기록하지 않을 수도 있습니다.