병합
병합 변환은 두 개의 입력 데이터를 병합하는 변환입니다. 입력되는 데이터는 정렬된 형태이어야 하며, 병합 변환에서는 정렬된 키를 기준으로 데이터를 병합하여 정렬된 형태로 데이터를 출력합니다. 병합 변환은 UNION ALL 변환과 상당히 유사하지만, 다음과 같은 차이점이 있습니다.
Ÿ 두 개의 입력만 가능합니다. – UNION ALL 변환은 다수의 입력을 지정할 수 있지만, 병합 변환은 두 개의 입력만 가능합니다. 만약, 여러 개의 입력을 이용하고자 한다면, UNION ALL 변환과 정렬 변환을 이용해야 합니다.
Ÿ 입력되는 데이터의 유형 및 길이 등과 같은 메타 데이터가 일치해야 합니다. – 입력 데이터의 데이터 유형이 일치해야 하는 점은 UNION ALL 변환도 마찬가지이지만, 데이터의 길이 등은 서로 다를 수 있습니다. 예를 들어, 하나의 입력은 DT_STR 10자리이고, 다른 하나의 입력은 DT_STR 30자리인 경우, UNION ALL 변환은 입력의 순서와는 상관없이 두 입력 데이터를 결합할 수 있으며, 출력되는 결과는 입력 데이터 유형 중 가장 큰 유형인 DT_STR 30자리가 됩니다. 하지만, 병합 변환의 경우에는 입력되는 데이터의 순서에 따라 변환 가능 여부가 결정됩니다. 병합의 첫 번째 입력이 두 번째 입력보다 더 큰 유형인 경우에만 변환이 가능하며, 출력 데이터는 첫 번째 입력 유형을 따릅니다. 첫 번째 입력이 DT_STR 30자리이고, 두 번째 입력이 DT_STR 10자리인 경우에는 변환이 가능하지만, 반대로 첫 번째 입력이 DT_STR 10자리이고, 두 번째 입력이 DT_STR 30자리인 경우에는 수행이 안됩니다.
Ÿ 입력되는 데이터는 반드시 정렬된 형태이어야 합니다. – 입력 데이터가 정렬되었다라는 속성을 가져야 합니다. 정렬 속성을 가진다는 것은 입력 데이터가 병합에 연결되기 전에 정렬 변환을 거쳐서 특정 열을 기준으로 정렬이 이루어지도록 하든지, 또는 입력 데이터의 고급 편집기의 출력 속성에서 강제로 정렬 속성을 지정하는 방법이 있습니다.
① 입력 데이터가 정렬 변환을 거치면 데이터는 정렬 속성을 가지게 됩니다.
② 데이터가 정렬된 것을 보장할 경우, 강제로 정렬된 속성을 지정할 수 있습니다. 위의 그림에서 MergeSource2에 대해 오른쪽 마우스를 클릭하여 나타나는 메뉴 중, 고급 편집기 표시(A)를 선택하여 고급 편집기를 엽니다.
입/출력 속성 탭에서 원본 출력 부분을 클릭하면 오른쪽에 출력에 대한 속성 창이 나타납니다. 이 중에서, IsSorted의 속성값을 True로 변경합니다. 그런 다음, 출력 열 부분을 확장하여, 정렬로 설정할 열을 선택한 후, SortKeyPosition의 값을 0에서 1 또는 -1로 설정합니다. 1은 오름차순(ASC)으로 정렬되었다라는 것을 나타내며, -1은 내림차순(DESC)으로 정렬되었다라는 것을 나타냅니다.
위의 두 가지 설정을 거치면, 정렬 변환 없이도 입력 데이터는 정렬 속성을 가지게 되며, 직접 병합 변환에 연결할 수 있습니다. IsSorted 속성은 플랫 파일 원본뿐만 아니라, 다른 모든 원본에 대해서도 존재하는 속성입니다.
Ÿ 데이터가 결합되는 순서에 차이가 있습니다. – UNION ALL 변환과 병합 변환은 입력 데이터를 하나로 합치는 기능은 동일합니다. 하지만, UNION ALL 변환은 첫 번째 입력 밑에 두 번째 입력 데이터를 덧붙이는 방식이며, 병합 변환은 두 입력에 대해 정렬 순위를 판단하여 출력하는 방식입니다.
만약 위의 그림에서와 같이 UNION ALL 변환 이후에 정렬을 수행하게 되면, 병합 변환을 수행한 결과와 동일한 결과를 얻을 수 있습니다. 상황에 따라서 UNION ALL 변환이 유리한지, 병합 변환이 유리한지 판단하여 사용해야 합니다. 만약 100만 건의 데이터 파일이 10개가 있다고 할 때, 100만 건의 데이터 10개를 각각 정렬한 후, 병합 변환을 거쳐 1000만 건의 정렬된 데이터를 얻는 것과, 100만 건의 데이터 파일 10개를 UNION ALL을 이용하여 1000만 건의 데이터로 만든 후, 이를 정렬하는 경우를 고려할 수 있습니다. 이 경우, 후자와 같이 1000만 건의 데이터를 한 번에 정렬하는 것 보다는 10개의 100만 건 데이터로 나누어서 정렬하는 것이 훨씬 더 우수한 성능을 낼 수 있습니다. 대신, 병합 변환을 9회 (5 + 2 + 1+1) 수행해야 하는 부하는 고려해야 합니다.
'연구개발 > DTS & SSIS' 카테고리의 다른 글
기본 강좌 31 - 용어 추출, 용어 조회 변환 (0) | 2009.06.20 |
---|---|
기본 강좌 30 - 병합 조인 변환 (0) | 2009.06.20 |
기본 강좌 28 - 열 가져오기, 열 내보내기 변환 (0) | 2009.06.20 |
기본 강좌 27 - 열 복사, 데이터 변환, 파생 열, 문자표 변환 (0) | 2009.06.20 |
기본 강좌 26 - 멀티캐스트, 조건부 분할 변환 (0) | 2009.06.20 |