2010-05-17 3 views
3

하나의 ID 필드에 3 개의 필드가있는 테이블이 있는데 다른 두 필드가있는 원본에서 새 레코드를 추가해야합니다. SSIS를 사용하고 있는데 원본 중 하나가 로컬 데이터베이스에 없기 때문에 병합 도구를 사용해야한다고 생각합니다. 그러나 병합 도구와 적절한 프로세스가 혼란 스럽습니다.SSIS에서 병합 작업을 사용하기위한 지침

나는 하나의 소스 (오라클 테이블)를 가지고 있으며 well_id와 well_name의 두 필드를 가지고 있으며, 그 다음에는 well_id로 정렬한다. 대상 테이블 (SQL Server)이 있고 원본으로 사용하고 있습니다. 여기에는 well_key (ID 필드), well_id 및 well_name이라는 세 개의 필드가 있으며 well_id를 기준으로 정렬 작업을 수행합니다. 둘 다 내 병합 작업에 입력됩니다. 임시 테이블로 출력하려고했는데 어떻게 든 새 레코드를 SQL Server 테이블로 다시 가져옵니다.

Oracle Well      SQL Well 
    |       | 
    V       V 
Sort Source      Sort Well 
    |       | 
    -------> Merge* <----------- 
       | 
       V 
       Temp well table 

그러나이 도구를 사용하는 가장 좋은 방법은 아닌 것 같습니다. 이런 병합을위한 적절한 단계는 무엇입니까?

이 방법을 묻는 나의 이유 중 하나는 "병합 입력 2"가 정렬되어야하지만 원본은 정렬 작업이므로 정렬된다는 오류가 내 병합에 있다는 것입니다. 임시 로컬 파일로 내 오라클 음을로드 한 다음 단지에 SQL 삽입 한 Statment를 사용하는

예 데이터

SQL Well (before merge) 
well_key well_id well_name 
1   123  well k 
2   292  well c 
3   344  well t 
5   439  well d 

Oracle Well 
well_id  well_name 
123   well k 
292   well c 
311   well y 
344   well t 
439   well d 
532   well j 

SQL Well (after merge) 
well_key well_id well_name 
1   123  well k 
2   292  well c 
3   344  well t 
5   439  well d 
6   311  well y 
7   532  well j 

은 더 나은 것입니까?

답변

4

우선, 병합하기 전에 정렬 변환을 제거하는 것이 좋습니다. 정렬 비동기 변환을 차단하는 매우 비싸고 ouput 열의 귀하의 ole db src advance 속성을 issorted = true로 변경하고 해당 열의 sortkeyposition 속성을 1로 변경하면 쉽게 피할 수 있습니다. 는 OLE DB를 원 이후 TSQL에 의한 주문은 자동으로이 작업을 수행하지 않습니다

Synchronous vs Asynchronous

Oledb Src IsSorted Property

그럼, 병합을 사용하여 PKG의 성능을 테스트합니다. 마치 당기고있는 들판의 크기가 그다지 크지 않은 것처럼 보입니다. 그러나 10 억 개의 레코드가있는 경우 데이터를 두 개의 스테이징 테이블에 저장 한 pkg를 작성한 다음 결합하여 위에서 설명한대로 데이터를 삽입하여 더 나은 성능을 얻을 수 있는지 확인하는 것이 좋습니다. 그 접근법.

희망이 도움이됩니다.

+0

스테이징 테이블과 결합하여 MERGE 문을 찾습니다. – IMHO

+0

정렬 작업을 제거하고 두 입력에 정렬을 추가했습니다. 나는 그것이 분류되었다는 것을 인정하는 두 번째 입력을 얻을 수 없었습니다. 길 찾기가 명확하고 첫 번째 입력에서 올바르게 작동합니다. 병합에 대해 성공적으로 싸우려고했기 때문에 완전히 다른 트랙을 시도하고 결과 세트에 대해 SQL 코드를 사용하여 병합하려고했습니다. 그것은 또한 문제를 야기하기 때문에 다시 돌아올 수 있습니다. 단지 10,000 개 정도의 레코드가 있으며 필드에 작은 데이터입니다. – thursdaysgeek

관련 문제