Integration Services 패키지의 MERGE

적용 대상: Azure Data Factory의 SQL Server SSIS Integration Runtime

SQL Server Integration Services의 현재 릴리스에서는 Execute SQL 태스크의 SQL 문에 MERGE 문을 포함할 수 있습니다. 이 MERGE 문을 사용하면 단일 문에서 여러 INSERTUPDATE작업 및 DELETE 작업을 수행할 수 있습니다.

패키지에서 MERGE 문을 사용하려면 다음 단계를 수행합니다.

  • 원본 데이터를 로드하고 변환하여 임시 또는 준비 테이블에 저장하는 데이터 흐름 태스크를 만듭니다.

  • MERGE 문이 포함된 SQL 실행 태스크를 만듭니다.

  • Data Flow 태스크를 SQL 실행 태스크에 연결하고 준비 테이블의 데이터를 문의 입력 MERGE 으로 사용합니다.

    참고

    이 시나리오에서는 일반적으로 MERGE 문에 스테이징 테이블이 필요하지만, MERGE 문의 성능은 대개 Lookup 변환에서 수행되는 행별 조회보다 더 뛰어납니다. MERGE 은 조회 테이블의 큰 크기가 참조 테이블을 캐싱하기 위해 조회 변환에 사용할 수 있는 메모리를 테스트하는 경우에도 유용합니다.

MERGE 사용하기

일반적으로 한 테이블에서 다른 테이블로 삽입, 업데이트 및 삭제를 포함하는 변경 내용을 적용하려는 경우 이 문을 사용합니다 MERGE . SQL Server 2008(10.0.x) 전에는 이 프로세스에 조회 변환과 여러 OLE DB 명령 변환이 모두 필요했습니다. 조회 변환은 행 단위로 조회를 수행하여 각 행이 새로운 행인지 변경된 행인지를 판단했습니다. 그런 다음 OLE DB 명령 변환에서 필요한 INSERTUPDATE작업 및 DELETE 작업을 수행했습니다. SQL Server 2008(10.0.x)부터 단일 MERGE 문은 조회 변환과 해당 OLE DB 명령 변환을 모두 바꿀 수 있습니다.

MERGE 증분 로드 사용

SQL Server 2008(10.0.x)의 새로운 변경 데이터 캡처 기능을 사용하면 데이터 웨어하우스로 증분 로드를 보다 쉽게, 안정적으로 수행할 수 있습니다. 매개 변수가 있는 OLE DB 명령 변환을 사용하여 삽입 및 업데이트를 수행하는 대신 문을 사용하여 MERGE 두 작업을 결합할 수 있습니다.

자세한 내용은 대상에 변경 내용 적용을 참조하세요.

MERGE 다른 시나리오의 경우

다음 시나리오에서는 MERGE 문을 Integration Services 패키지 외부나 내부에서 모두 사용할 수 있습니다. 그러나 대부분의 경우 Integration Services 패키지는 다른 유형의 여러 원본에서 이 데이터를 로드한 후 결합하고 정리해야 합니다. 따라서 편의성과 유지 관리의 용이성을 위해 패키지에서 MERGE 문을 사용하는 것을 고려할 수 있습니다.

구매 습관 추적

데이터 웨어하우스의 FactBuyingHabits 테이블은 고객이 특정 제품을 구매한 마지막 날짜를 추적합니다. 테이블은 ProductID, CustomerID 및 PurchaseDate 열로 구성됩니다. 매주 트랜잭션 데이터베이스는 해당 주 동안 이루어진 구매를 포함하는 PurchaseRecords 테이블을 생성합니다. 목표는 단일 MERGE 문을 사용하여 PurchaseRecords 테이블의 정보를 FactBuyingHabits 테이블에 병합하는 것입니다. 제품-고객 쌍이 존재하지 않는 경우 MERGE 문은 새 행을 삽입합니다. 존재하는 제품-고객 쌍의 경우 이 MERGE 문은 가장 최근의 구매 날짜를 업데이트합니다.

가격 기록 추적

DimBook 테이블은 서점에 재고가 있는 책 목록을 나타내고 각 책의 가격 기록을 식별합니다. 이 테이블에는 ISBN, ProductID, Price, Shelf 및 IsCurrent 열이 있습니다. 또한 이 테이블에는 책의 각 가격에 대한 행이 하나씩 있습니다. 이러한 여러 행 중 하나에 현재 가격이 포함됩니다. 현재 가격이 포함된 행을 나타내기 위해 해당 행에 대한 IsCurrent 열의 값이 1로 설정됩니다.

매주 데이터베이스는 해당 주의 가격 변동과 주 동안 추가된 새 책을 포함하는 WeeklyChanges 테이블을 생성합니다. 단일 MERGE 문을 사용하면 WeeklyChanges 테이블의 변경 내용을 DimBook 테이블에 적용할 수 있습니다. 이 문은 MERGE 새로 추가된 책의 새 행을 삽입하고 가격이 변경된 기존 책의 행에 대해 IsCurrent 열을 0으로 업데이트합니다. 또한 이 문은 MERGE 가격이 변경된 책의 새 행을 삽입하고, 이러한 새 행의 경우 IsCurrent 열의 값을 1로 설정합니다.

새 데이터가 있는 테이블을 기존 테이블에 병합

데이터베이스는 "개방형 스키마", 즉 각 속성에 대한 이름-값 쌍을 포함하는 테이블을 사용하여 개체의 속성을 모델링합니다. 속성 테이블에는 EntityID, PropertyID 및 Value의 3개 열이 있습니다. 이 테이블의 새로운 버전인 NewProperties 테이블은 Properties 테이블과 동기화되어야 합니다. 이러한 두 테이블을 동기화하려면 단일 MERGE 문을 사용하여 다음 작업을 수행할 수 있습니다.

  • NewProperties 테이블에 없는 속성을 Properties 테이블에서 삭제합니다.

  • Properties 테이블의 속성 값을 NewProperties 테이블의 새 값으로 업데이트합니다.

  • NewProperties 테이블에는 있지만 Properties 테이블에는 없는 속성에 대한 새 속성을 삽입합니다.

이 방식은 서버 두 대에 있는 두 테이블의 데이터를 동기화된 상태로 유지하는 것이 목적인 복제 시나리오와 비슷한 시나리오에서 유용합니다.

재고 추적

Inventory 데이터베이스의 ProductsInventory 테이블에는 ProductID와 StockOnHand 열이 있습니다. ProductID, CustomerID 및 Quantity 열이 있는 Shipments 테이블은 고객에게 보내는 제품 배송을 추적합니다. ProductInventory 테이블은 Shipments 테이블의 정보를 바탕으로 매일 업데이트되어야 합니다. 단일 MERGE 문은 배송에 따라 ProductInventory 테이블의 재고를 줄일 수 있습니다. 제품의 인벤토리가 0으로 줄어든 경우 해당 MERGE 문은 ProductInventory 테이블에서 해당 제품 행을 삭제할 수도 있습니다.