2017-01-20 1 views
0

저는 Informatica Components에 대한 경험 부족, 특히 SQL 변환으로 인해 아직 구현되지 않은 과제에 직면하고 있습니다. informatica 다중 상관 서브 쿼리 구현

SELECT 
    A.ID, 
    NVL2(A.SACHKONTO, B.KLAMMER, A.ID) AS KLAMMER 
FROM 
Table1 A, 
    (SELECT 
     A.ID AS KLAMMER, 
     B.ID 
FROM 
    (SELECT 
     ID, 
     ID AS VON_ID, 
     LEAD(ID,1) OVER (ORDER BY ID) - 1 AS BIS_ID 
    FROM 
     Table1 
    WHERE 
     SACHKONTO IS NULL) A, 
    Table1 B 
WHERE 
    B.ID BETWEEN A.VON_ID AND A.BIS_ID 
) B 
WHERE 
    A.ID = B.ID 

그래서 나는 작은 successed 서로 다른 approch을 시도 : 그래서 PowerCenter를 최고의 approch가 하위 쿼리의이 종류를 구현하는 것입니다 무슨. 첫 번째 부분은 SQL을 "분해"하는 것입니다. 필요한 경우 참조하거나 질문을 편집합니다. 또한 모든 쿼리를 Informatica SQL "언어"에 적용했지만 성공하지 못했습니다.

성능을 중요하게 고려하지 않고 이러한 쿼리를 복제 할 수있는 가장 가까운 솔루션입니다 SQ에서 SQL Override를 사용합니다.) 그러나 테이블 결과에서 조인은 적절하게 처리되지 않았으므로 올바른 순서로 조인을 실행하기 위해 다른 파이프 라인을 추가해야한다고 생각합니다.

내 매핑 솔루션 :

enter image description here

답변

0

당신은 할 수 조회 변환에 하위 쿼리를 넣은 다음 외부 쿼리에서 오는 레코드를 일치시킵니다 (원본 쿼리의 A.ID = B.ID에 따라 zource 한정자에 넣은 것으로 가정합니다). nulls later)

비슷하게 2 개의 소스 한정자 (하나는 상위 쿼리 용이고 다른 하나는 하위 쿼리 용)를 사용하여 일반 조인 유형으로 결합 자 변환을 수행 할 수 있습니다. 이 방법은 소스 데이터를 첫 번째 옵션보다 빨리 필터링하므로 성능이 향상되어야합니다.

마지막 옵션은 현재 쿼리와 동일한 SQL 재정의를 사용하는 소스 한정자를 사용하는 것입니다. 데이터베이스에서 바로 레코드를 필터링하므로 거기에 더하기 (쿼리 자체가 최적 인 한) 있지만 SQL 재정의는 유효하지 않습니다 더 넓은 매핑 컨텍스트에서 예기치 않은 놀라움이 생길 수 있으므로주의해서 사용해야합니다.

+0

답변 해 주셔서 감사합니다. 나는 여전히 "BETWEEN A.VON_ID AND A.BIS_ID"를 소목 조건으로 유지하는 방법을 이해하지 못했다. 두 번째 하위 쿼리에서 SQL Trasformation을 사용하려고했으나 2에서 입력을 보낼 수 없다. SQ ("변환을 SQL에서 오류가 발생했습니다"오류) –

+0

"사이"의 논리에 대한 해결책을 찾았습니다. 기본적으로 Source 한정자에서 SQL 재정의를 사용했습니다. 내가 직면하고있는 불편 함은 여전히 ​​다른 SQL 테이블에 대한 임시 테이블 (SQL 엔진의 마지막 하위 쿼리에있는)입니다. 사실, 내부 하위 쿼리에서 오는 값을 저장하기위한 테이블을 만듭니다. 즉, lead 함수의 값이 있습니다. 그런 다음 두 번째 하위 쿼리의 "저장소"값에 대한 다른 테이블을 만들어야합니다. –

+0

이것은 실제로 스키마에없는 추가 테이블을 필요로하지 않고도 실제로 나에게 잘 어울리지 않습니다. 도움이 필요 하신가요? –