큰 데이터 마이그레이션 작업에 SSIS 2012를 사용하고 있습니다.2 백만 레코드를 루프하고 각 행의 특정 조건에 따라 업데이트 또는 삽입 집합을 생성하는 최상의 성능
나는 최선의 접근 방법을 모르고 완료해야만한다.
표 A는210 만 레코드입니다.
나는 각 행을 반복해야합니다
1 단계 업데이트 일부 텍스트 조작을하고 복잡한 서브 쿼리의 결과와 특정 분야를
2 단계 잡아 TableA의 행의 이메일 필드에서 이메일 주소
2a. 사용자 표 검색
2b. 이메일이 있으면 ID를 얻고 TableA 행에 UserId를 업데이트하십시오.
2c. 이메일이 존재하지 않는 경우 - User 테이블에 새 레코드를 INSERT하고 ID를 가져 와서 TableA 행의 UserId를 업데이트하십시오.
1 단계와 2 단계를 동시에 수행 할 필요는 없습니다. 이러한 작업은 별도의 관련이 없으므로 데이터 흐름.
커서를 사용하여이 모든 것을 작성할 수 있습니다. 커서를 사용하는 일반적인 규칙은 싫은 일입니다.
새로운 MERGE 함수를 사용하여 위의 1 단계에서 순수한 SQL 스크립트를 작성했습니다. 이 서브 쿼리는 뷰를 호출하여 Scale 함수를 사용하여 복잡한 텍스트 조작을 수행합니다. SSIS를 통해 1 시간 12 분 동안 실행 된 후 SSIS는 디스크 공간이 부족한 tembDB.log 때문에 폭탄을 터뜨렸습니다.
내 쿼리가 이전에 실행 한 SSIS 패키지에서 tembDB 또는 다른 것을 벗어나는 원인인지 확실하지 않습니까? 어떻게 알 수 있습니까?
위의 1 단계와 2 단계를 모두 달성하기 위해 SSIS에서 최상의 도구에 대한 정보를 얻은 사람이 있습니까?
데이터를 표시해야하고 1 단계를 실행하려고하는 쿼리 (쿼리)가 필요하다고 생각합니다. – Justin
큰 MERGE 문을 수행 할 때 중요한 것은 수정중인 열에 인덱스가 있는지 확인하는 것입니다. 그렇다면 업데이트/삽입 속도가 느려질 것입니다. 열에 인덱스를 놓고 MERGE를 실행 한 다음 인덱스를 다시 만듭니다. – tranceporter