@ydaetskcoR의 대답은 디오 메트릭 관점 (삽입을 필요로하는 행을 업데이트해야 함)으로 완벽하고 작은 데이터 집합 (수천 행)에 유용한 작업 ETL 솔루션을 제공한다고 생각합니다.
Talend 시스템과 DB 서버간에 모든 데이터가 이동하기 때문에 행을 업데이트해야하는지 결정할 수있는 조회를 수행하는 데 비용이 많이 듭니다.
ETL에서 ELT로 전달해야하는 레코드가 수십만 개 또는 수백만 개에 이르면 @Balazs Gunics에서 제안한대로 임시 (준비) 테이블에 데이터를로드 한 다음 SQL을 사용하여 그것을 조작하십시오.
이 경우 데이터를로드 한 후 (대량로드 구성 요소를 사용하는 경우 INSERT = 빠름, 더 빨라짐) 임시 테이블과 대상 테이블간에 LEFT OUTER JOIN을 실행하여 이미있는 행을 나눕니다) 및 기타. 이 빠른 ETL 이상의 크기 순서가 될 것
SELECT staging.* FROM staging
LEFT OUTER JOIN destination ON (destination.PK = staging.PK)
WHERE destination.PK IS NOT NULL
: 업데이트 할 필요가
SELECT staging.* FROM staging
LEFT OUTER JOIN destination ON (destination.PK = staging.PK)
WHERE destination.PK IS NULL
이 다른 하나의 행을 :
이 쿼리는 당신에게 당신이 삽입해야 행을 줄 것이다 하지만 SQL을 사용하여 데이터를 조작해야합니다. ETL에서는 Java를 모두 사용할 수 있기 때문에 Talend 서버로 데이터를 가져옵니다. 따라서 로컬 시스템에서 Java의 데이터를 사전 처리하는 첫 번째 단계가 자주 있습니다. (그것을 청소하고 유효성을 검사하기 위해) 그리고 나서 그것을로드하기 위해 join을 사용하는 DB에서 실행 시켜라. 옳은 길.
다음은 ELT JOB 스크린 샷입니다.
Talend에 "대량로드", "대량 삽입"또는 "대량 복사"기능이 있습니까? – RBarryYoung
그리고 하드웨어를 확인하십시오. 단일 스레드 SQL 문에 대해서조차도 불쌍합니다. 어쩌면 서버가 휴대 전화 나 노트북과 같을 수도 있습니다. 앱과 서버 사이의 대기 시간은 얼마입니까? – TomTom
느려짐은 talend와 DB 사이의 네트워크 속도, talend에서 쓰는 작업 방식, talend에 SQL Server의 대량로드 구성 요소가있는 것과 같은 요인으로 인해 발생할 수 있지만 일반적인 SQL Server 구성 요소의 경우 성능은 매우 좋지 않습니다 . 나는 당신이 실행중인 SQL과 같은 세부 사항을 언급 할 것을 제안한다. 어떤 종류의 처리가 talend 측면에서 수행되고 있는가, 어떤 talend 구성 요소를 사용하고 있는가 등을 말하면된다. – garpitmzn