적용 대상: 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 테이블에서 해당 제품 행을 삭제할 수도 있습니다.