데이터 흐름 디버깅
적용 대상: SQL Server Azure Data Factory의 SSIS Integration Runtime
Microsoft Integration Services 및 SSIS 디자이너에는 Integration Services 패키지의 데이터 흐름 문제를 해결하는 데 사용할 수 있는 기능과 도구가 포함되어 있습니다.
SSIS 디자이너는 데이터 뷰어를 제공합니다.
SSIS 디자이너와 Integration Services 변환은 행 개수를 제공합니다.
SSIS 디자이너는 런타임 시 진행률 보고를 제공합니다.
데이터 뷰어
데이터 뷰어는 데이터 흐름의 두 구성 요소 간에 데이터를 표시합니다. 데이터 뷰어는 데이터가 데이터 원본에서 추출되고 데이터 흐름에 처음 들어갈 때, 변환이 데이터를 업데이트하기 전과 후에, 데이터가 대상에 로드되기 전과 후에 데이터를 표시할 수 있습니다.
데이터를 보려면 데이터 뷰어를 두 데이터 흐름 구성 요소를 연결하는 경로에 연결합니다. 데이터 흐름 구성 요소 간의 데이터를 보는 기능을 사용하면 예기치 않은 데이터 값을 보다 쉽게 식별하고, 변환이 열 값을 변경하는 방식을 확인하고, 변환이 실패하는 이유를 찾을 수 있습니다. 예를 들어 참조 테이블에서 실패한 조회를 확인하고 이를 수정하기 위해 빈 열에 대해 기본 데이터를 제공하는 변환을 추가할 수 있습니다.
데이터 뷰어는 그리드에 데이터를 표시할 수 있습니다. 그리드를 사용하여 표시할 열을 선택합니다. 선택한 열의 값이 테이블 형식으로 표시됩니다.
경로에 여러 데이터 뷰어를 포함할 수도 있습니다. 동일한 데이터를 다른 형식으로 표시할 수 있으며(예: 데이터의 차트 보기와 그리드 보기 만들기) 데이터의 다른 열에 대해 서로 다른 데이터 뷰어를 만들 수 있습니다.
경로에 데이터 뷰어를 추가하면 SSIS 디자이너는 데이터 흐름 탭의 디자인 화면에서 경로 옆에 데이터 뷰어 아이콘을 추가합니다. 조건부 분할 변환과 같이 여러 출력이 있을 수 있는 변환에는 각 경로에 데이터 뷰어가 포함될 수 있습니다.
런타임 시, 데이터 뷰어 창이 열리고 데이터 뷰어 형식으로 지정된 정보가 표시됩니다. 예를 들어 표 형식을 사용하는 데이터 뷰어는 선택된 열, 데이터 흐름 구성 요소로 전달된 출력 행의 수 및 표시된 행의 수에 대한 데이터를 표시합니다. 정보는 버퍼별로 버퍼를 표시하고 데이터 흐름의 행 너비에 따라 버퍼에 더 많거나 적은 행이 포함될 수 있습니다.
데이터 뷰어 대화 상자에서 데이터를 클립보드에 복사하고, 테이블에서 모든 데이터를 지우고, 데이터 뷰어를 다시 구성하고, 데이터 흐름을 다시 시작하고, 데이터 뷰어를 분리하거나 연결할 수 있습니다.
데이터 뷰어 추가 방법
행 개수
경로를 통과한 행 수는 경로 옆에 있는 SSIS 디자이너의 데이터 흐름 탭의 디자인 화면에 표시됩니다. 이 숫자는 데이터가 경로를 통과하는 동안 주기적으로 업데이트됩니다.
데이터 흐름에 행 개수 변환을 추가하여 변수의 최종 행 개수를 캡처할 수도 있습니다. 자세한 내용은 행 개수 변환을 참조하세요.
진행률 보고
패키지를 실행할 때 SSIS 디자이너는 상태를 나타내는 색으로 각 데이터 흐름 구성 요소를 표시하여 데이터 흐름 탭의 디자인 화면에 진행률을 표시합니다. 각 구성 요소가 작업을 수행하기 시작하면 색이 없는 상태에서 노란색으로 변경되고 성공적으로 완료되면 녹색으로 변경됩니다. 빨간색은 구성 요소가 실패했음을 나타냅니다.
다음 표는 색상 코딩에 대해 설명합니다.
색 | 설명 |
---|---|
색 없음 | 데이터 흐름 엔진의 호출을 기다리는 중입니다. |
노란색 | 변환 수행, 데이터 추출 또는 데이터 로드 중입니다. |
녹색 | 성공적으로 실행되었습니다. |
red | 실행 후 오류가 발생했습니다. |
데이터 흐름 분석
catalog.execution_data_statisticsSSISDB데이터베이스 뷰를 사용하여 패키지의 데이터 흐름을 분석할 수 있습니다. 이 뷰는 데이터 흐름 구성 요소가 다운스트림 구성 요소에 데이터를 전송할 때마다 행을 표시합니다. 이 정보를 사용하여 각 구성 요소로 전송되는 행을 더 자세히 이해할 수 있습니다.
참고 항목
catalog.execution_data_statistics 보기로 정보를 캡처하려면 로깅 수준을 Verbose로 설정해야 합니다.
다음 예에서는 패키지의 구성 요소 간에 보내진 행 수를 표시합니다.
use SSISDB
select package_name, task_name, source_component_name, destination_component_name, rows_sent
from catalog.execution_data_statistics
where execution_id = 132
order by source_component_name, destination_component_name
다음 예제에서는 특정 실행을 위해 각 구성 요소에서 보낸 밀리초당 행 수를 계산합니다. 계산된 값은 다음과 같습니다.
total_rows - 구성 요소가 보낸 모든 행의 합계
wall_clock_time_ms - 각 구성 요소에 대한 총 실행 경과 시간(밀리초)
num_rows_per_millisecond - 각 구성 요소가 보낸 밀리초당 행 수
HAVING 절은 계산에서 0으로 나누기 오류를 방지하기 위해 사용됩니다.
use SSISDB
select source_component_name, destination_component_name,
sum(rows_sent) as total_rows,
DATEDIFF(ms,min(created_time),max(created_time)) as wall_clock_time_ms,
((0.0+sum(rows_sent)) / (datediff(ms,min(created_time),max(created_time)))) as [num_rows_per_millisecond]
from [catalog].[execution_data_statistics]
where execution_id = 132
group by source_component_name, destination_component_name
having (datediff(ms,min(created_time),max(created_time))) > 0
order by source_component_name desc
데이터 흐름 구성 요소에서 오류 출력 구성
많은 데이터 흐름 구성 요소는 오류 출력을 지원하며, 구성 요소에 따라 SSIS 디자이너는 오류 출력을 구성하는 다양한 방법을 제공합니다. 오류 출력을 구성하는 것뿐만 아니라 오류 출력의 열을 구성할 수도 있습니다. 여기에는 구성 요소에 의해 추가되는 ErrorCode 및 ErrorColumn 열 구성이 포함됩니다.
오류 출력 구성
다음 두 가지 옵션을 사용하여 오류 출력을 구성할 수 있습니다.
오류 출력 구성 대화 상자를 사용합니다. 이 대화 상자를 사용하여 오류 출력을 지원하는 모든 데이터 흐름 구성 요소에서 오류 출력을 구성할 수 있습니다.
구성 요소의 편집기 대화 상자를 사용합니다. 일부 구성 요소에서는 편집기 대화 상자에서 직접 오류 출력을 구성할 수 있습니다. 그러나 편집기 대화 상자에서 ADO.NET 원본, 열 가져오기 변환, OLE DB 명령 변환 또는 SQL Server Compact 대상에 대한 오류 출력을 구성할 수는 없습니다.
다음 절차에서는 이러한 대화 상자를 사용하여 오류 출력을 구성하는 방법을 설명합니다.
오류 출력 구성 대화 상자를 사용하여 오류 출력 구성 방법
SSDT(SQL Server Data Tools)에서 원하는 패키지가 들어 있는 Integration Services 프로젝트를 엽니다.
솔루션 탐색기에서 패키지를 두 번 클릭하여 엽니다.
SSIS 디자이너에서 데이터 흐름 탭을 클릭합니다.
오류의 원본에 해당하는 구성 요소에서 빨간 색 화살표로 표시된 오류 출력을 데이터 흐름의 다른 구성 요소로 끌어다 놓습니다.
오류 출력 구성 대화 상자에서 구성 요소 입력의 각 열에 대한 오류 및 잘림 열에서 작업을 선택합니다.
업데이트된 패키지를 저장하려면 파일 메뉴에서 선택한 항목 저장을 클릭합니다.
구성 요소의 편집기 대화 상자를 사용하여 오류 출력 추가 방법
SSDT(SQL Server Data Tools)에서 원하는 패키지가 들어 있는 Integration Services 프로젝트를 엽니다.
솔루션 탐색기에서 패키지를 두 번 클릭하여 엽니다.
SSIS 디자이너에서 데이터 흐름 탭을 클릭합니다.
오류 출력을 구성하려는 데이터 흐름 구성 요소를 두 번 클릭하고 구성 요소에 따라 다음 단계 중 하나를 수행합니다.
오류 출력 구성을 클릭합니다.
오류 출력을 클릭합니다.
각 열에 대해 오류 옵션을 설정합니다.
각 열에 대해 잘림 옵션을 설정합니다.
확인을 클릭합니다.
업데이트된 패키지를 저장하려면 파일 메뉴에서 선택한 항목 저장을 클릭합니다.
오류 출력 열 구성
오류 출력 열을 구성하려면 고급 편집기 대화 상자의 입력 및 출력 속성 탭을 사용해야 합니다.
오류 출력 열 구성 방법
SSDT(SQL Server Data Tools)에서 원하는 패키지가 들어 있는 Integration Services 프로젝트를 엽니다.
솔루션 탐색기에서 패키지를 두 번 클릭하여 엽니다.
SSIS 디자이너에서 데이터 흐름 탭을 클릭합니다.
구성하려는 오류 출력 열이 있는 구성 요소를 마우스 오른쪽 단추로 클릭하고 고급 편집기 표시를 클릭합니다.
입력 및 출력 속성 탭을 클릭하고, <구성 요소 이름> 오류 출력을 확장한 다음, 출력 열을 확장합니다.
열을 클릭하고 해당 속성을 업데이트합니다.
참고 항목
열 목록은 구성 요소 입력 내의 열, 이전 오류 출력에서 추가한 ErrorCode 및 ErrorColumn 열, 현재 구성 요소에서 추가한 ErrorCode 및 ErrorColumn 열을 포함합니다.
확인을 클릭합니다.
업데이트된 패키지를 저장하려면 파일 메뉴에서 선택한 항목 저장을 클릭합니다.
데이터 흐름에 데이터 뷰어 추가
이 항목에서는 데이터 흐름에 데이터 뷰어를 추가 및 구성하는 방법에 대해 설명합니다. 데이터 뷰어는 두 데이터 흐름 구성 요소 간에 이동하는 데이터를 표시합니다. 예를 들어 데이터 뷰어는 데이터 흐름의 변환이 데이터를 수정하기 전에 데이터 원본에서 추출된 데이터를 표시할 수 있습니다.
경로는 하나의 데이터 흐름 구성 요소의 출력을 다른 구성 요소의 입력에 연결함으로써 데이터 흐름의 구성 요소를 연결합니다.
패키지에 데이터 뷰어를 추가하려면 먼저 패키지에 데이터 흐름 태스크와 연결된 두 개 이상의 데이터 흐름 구성 요소가 포함되어야 합니다.
오류 출력에 데이터 뷰어를 추가하여 오류에 대한 설명과 오류가 발생한 열의 이름을 확인합니다. 기본적으로 오류 출력에는 오류 및 열에 대한 숫자 식별자만 포함됩니다.
데이터 흐름에 데이터 뷰어 추가 방법
SSDT(SQL Server Data Tools)에서 원하는 패키지가 들어 있는 Integration Services 프로젝트를 엽니다.
솔루션 탐색기에서 패키지를 두 번 클릭하여 엽니다.
아직 활성화되어 있지 않은 경우 제어 흐름 탭을 클릭합니다.
데이터 뷰어를 연결하려는 데이터 흐름의 데이터 흐름 태스크를 클릭한 다음 데이터 흐름 탭을 클릭합니다.
두 데이터 흐름 구성 요소 간 경로를 마우스 오른쪽 단추로 클릭하고 편집을 클릭합니다.
일반 페이지에서 경로 속성을 보고 편집할 수 있습니다. 예를 들어 PathAnnotation 드롭다운 목록에서 경로 옆에 표시되는 주석을 선택할 수 있습니다.
메타데이터 페이지에서 열 메타데이터를 보고 메타데이터를 클립보드로 복사할 수 있습니다.
데이터 뷰어 페이지에서 데이터 뷰어 사용을 클릭합니다.
표시할 열 영역에서 데이터 뷰어에 표시할 열을 선택합니다. 기본적으로 사용 가능한 모든 열이 선택되어 표시된 열 목록에 나열됩니다. 사용하지 않으려는 열을 선택한 다음 왼쪽 화살표를 클릭하여 사용하지 않는 열 목록으로 이동합니다.
참고 항목
표에서 DT_DATE, DT_DBTIME2, DT_FILETIME, DT_DBTIMESTAMP, DT_DBTIMESTAMP2 및 DT_DBTIMESTAMPOFFSET 데이터 형식을 나타내는 값은 ISO 8601 형식 문자열로 표시되고 T 구분 기호는 공백 구분 기호로 대체됩니다. DT_DATE 및 DT_FILETIME 데이터 형식을 나타내는 값에는 일곱 자리 소수 자릿수 초가 포함됩니다. DT_FILETIME 데이터 형식은 세 자리 소수 자릿수 초만 저장하기 때문에 그리드에는 나머지 네 자리가 0으로 표시됩니다. DT_DBTIMESTAMP 데이터 형식을 나타내는 값은 3자리의 소수 자릿수 초를 갖습니다. DT_DBTIME2, DT_DBTIMESTAMP2, DT_DBTIMESTAMPOFFSET 데이터 형식을 나타내는 값의 경우 소수 자릿수 초의 자릿수는 열의 데이터 형식에 지정된 소수 자릿수에 해당합니다. ISO 8601 형식에 대한 자세한 내용은 Date and Time Formats을 참조하십시오. 데이터 형식에 대한 자세한 내용은 Integration Services 데이터 형식을 참조하세요.
확인을 클릭합니다.
데이터 흐름 탭
런타임 시 패키지의 데이터 흐름 경로에 데이터 탭을 추가하고 데이터 탭의 출력을 외부 파일에 전달할 수 있습니다. 이 기능을 사용하려면 프로젝트 배포 모델을 사용하여 SSIS 프로젝트를 SSIS 서버에 배포해야 합니다. 서버에 패키지를 배포한 후 패키지를 실행하기 전에 SSISDB 데이터베이스에 대해 T-SQL 스크립트를 실행하여 데이터 탭을 추가해야 합니다. 다음은 예제 시나리오입니다.
catalog.create_execution(SSISDB 데이터베이스) 저장 프로시저를 사용하여 패키지의 실행 인스턴스를 만듭니다.
catalog.add_data_tap 또는 catalog.add_data_tap_by_guid 저장 프로시저를 사용하여 데이터 탭을 추가합니다.
catalog.start_execution(SSISDB 데이터베이스)을 사용하여 패키지의 실행 인스턴스를 시작합니다.
다음은 위의 시나리오에 설명된 단계를 수행하는 샘플 SQL 스크립트입니다.
Declare @execid bigint
EXEC [SSISDB].[catalog].[create_execution] @folder_name=N'ETL Folder', @project_name=N'ETL Project', @package_name=N'Package.dtsx', @execution_id=@execid OUTPUT
EXEC [SSISDB].[catalog].add_data_tap @execution_id = @execid, @task_package_path = '\Package\Data Flow Task', @dataflow_path_id_string = 'Paths[Flat File Source.Flat File Source Output]', @data_filename = 'output.txt'
EXEC [SSISDB].[catalog].[start_execution] @execid
create_execution 저장 프로시저의 폴더 이름, 프로젝트 이름, 패키지 이름 매개 변수는 Integration Services 카탈로그의 폴더, 프로젝트, 패키지 이름에 해당합니다. 다음 이미지와 같이 SQL Server Management Studio에서 create_execution 호출에 사용할 폴더, 프로젝트, 패키지 이름을 가져올 수 있습니다. 여기에 SSIS 프로젝트가 표시되지 않는다면 프로젝트를 SSIS 서버에 아직 배포하지 않았을 수 있습니다. Visual Studio에서 SSIS 프로젝트를 마우스 오른쪽 단추로 클릭하고 배포를 클릭하여 예상 SSIS 서버에 프로젝트를 배포합니다.
SQL 문을 입력하는 대신 다음 단계를 수행하여 패키지 실행 스크립트를 생성할 수 있습니다.
Package.dtsx를 마우스 오른쪽 단추로 클릭하고 실행을 클릭합니다.
스크립트 도구 모음 단추를 클릭하여 스크립트를 생성합니다.
이제 start_execution을 호출하기 전에 add_data_tap 문을 추가합니다.
add_data_tap 저장 프로시저의 task_package_path 매개 변수는 Visual Studio에서 데이터 흐름 태스크의 PackagePath 속성에 해당합니다. Visual Studio에서 데이터 흐름 태스크를 마우스 오른쪽 단추로 클릭하고 속성을 클릭하여 속성 창을 시작합니다. PackagePath 속성의 값을 add_data_tap 저장 프로시저 호출의 task_package_path 매개 변수에 대한 값으로 사용하려면 해당 속성의 값을 기록해 두세요.
add_data_tap 저장 프로시저의 dataflow_path_id_string 매개 변수는 데이터 탭을 추가할 데이터 흐름 경로의 IdentificationString 속성에 해당합니다. dataflow_path_id_string을 가져오려면 데이터 흐름 경로(데이터 흐름에서 작업 사이의 화살표)를 클릭하고 속성 창에서 IdentificationString 속성의 값을 확인합니다.
스크립트를 실행하면 출력 파일은 <Program Files>\Microsoft SQL Server\110\DTS\DataDumps에 저장됩니다. 해당 이름을 가진 파일이 이미 있으면 접미사(예: output[1].txt)가 있는 새 파일이 만들어집니다.
앞에서 언급한 대로 add_data_tap 저장 프로시저를 사용하는 대신 catalog.add_data_tap_by_guid 저장 프로시저를 사용할 수도 있습니다. 이 저장 프로시저는 task_package_path 대신 데이터 흐름 태스크의 ID를 매개 변수로 사용합니다. 데이터 흐름 태스크의 ID는 Visual Studio의 속성 창에서 가져올 수 있습니다.
데이터 탭 제거
catalog.remove_data_tap 저장 프로시저를 사용하여 실행을 시작하기 전에 데이터 탭을 제거할 수 있습니다. 이 저장 프로시저는 데이터 탭의 ID를 매개 변수로 사용하며, 이는 add_data_tap 저장 프로시저의 출력으로 가져올 수 있습니다.
DECLARE @tap_id bigint
EXEC [SSISDB].[catalog].add_data_tap @execution_id = @execid, @task_package_path = '\Package\Data Flow Task', @dataflow_path_id_string = 'Paths[Flat File Source.Flat File Source Output]', @data_filename = 'output.txt' @data_tap_id=@tap_id OUTPUT
EXEC [SSISDB].[catalog].remove_data_tap @tap_id
모든 데이터 탭 나열
catalog.execution_data_taps 보기를 사용하여 모든 데이터 탭을 나열할 수도 있습니다. 다음 예에서는 사양 실행 인스턴스(ID: 54)의 데이터 탭을 추출합니다.
select * from [SSISDB].[catalog].execution_data_taps where execution_id=@execid
성능 고려 사항
자세한 정보 표시 로깅 수준을 사용하도록 설정하고 데이터 탭을 추가하면 데이터 통합 솔루션에서 수행하는 I/O 작업이 증가합니다. 따라서 문제 해결을 위해서만 데이터 탭을 추가하는 것이 좋습니다.
동영상
TechNet의 이 동영상에서는 프로그래밍 방식으로 패키지를 디버깅하고 런타임에 부분 결과를 캡처하는 데 도움이 되는 SQL Server 2012 SSISDB 카탈로그에서 데이터 탭을 추가/사용하는 방법을 보여 줍니다. 또한 이러한 데이터 탭을 나열/제거하는 방법 및 SSIS 패키지에서 데이터 탭을 사용하는 모범 사례에 대해서도 설명합니다.