2017-01-20 16 views
0

Я столкнулся с задачей, которая из-за моего отсутствия опыта с компонентами Informatica, в частности преобразования SQL, я еще не реализовал. Так что было бы лучше Approch в PowerCenter для реализации такого рода подзапроса: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 

Так что я пробовал разные Approch с небольшими В случае успешного. Первым было «разложить» SQL в его маленькой части (я буду ссылаться при необходимости или отредактировать вопрос). Я также попытался поместить весь запрос (после того, как он адаптировал его к языку «Informatica SQL», но безуспешно.

Это самое близкое решение, которое я получил для репликации такого запроса, не считая важности производительности (я сделал используйте SQL Override в SQ), но, как из результата таблицы, соединение не было обработано, поэтому я полагаю, что мне нужно добавить еще один конвейер, чтобы выполнить соединение в правильном порядке:

Мое решение для сопоставления :

enter image description here

ответ

0

Вы могли бы помещаем подзапрос в преобразование поиска, а затем сопоставляем записи, поступающие из внешнего запроса (который, как я полагаю, будет тем, что вы помещаете в свой классификатор источника на A.ID = B.ID из исходного запроса, а затем фильтруете nulls later)

Или вы могли бы аналогичным образом использовать 2 квалификатора источника (один для родительского запроса и другой для подзапроса), за которым следует преобразование столяра с обычным типом соединения. Этот способ будет фильтровать исходные данные раньше, чем мой первый вариант, так что производительность должна быть лучше.

Окончательный вариант заключается в том, чтобы использовать квалификатор источника с sql переопределить то же, что и ваш текущий запрос ... фильтры записываются прямо в базе данных, так что плюс там (пока сам запрос является оптимальным), но переопределения sql не проверяются в более широком контексте отображения и может вызвать неожиданные сюрпризы, поэтому следует использовать с большой осторожностью.

+0

Спасибо за ваш ответ. Я до сих пор не понял, как можно достичь «BETWEEN A.VON_ID AND A.BIS_ID» в состоянии столяра, то есть для второго подзапроса, который я собирался для SQL Trasformation, но тогда невозможно отправить ввод с 2 SQ (получение «конкатенации, запрещенной на ошибку trasformation SQL») –

+0

Я нашел обходное решение для логики «между». В основном я использовал переопределение SQL в квалификаторе Source. У непостоянства, с которым я сталкиваюсь, по-прежнему есть что-то другое в таблице целевых таблиц, в которой в строке SQL есть временные таблицы (в конце концов для SQL-кода это подкара). Действительно, я создаю таблицу для хранения значения, поступающего из внутреннего подзапроса, где указаны значения из ведущей функции. Затем мне нужно создать другую таблицу для значения «store» для второго подзапроса. –

+0

Для меня это не выглядит реально, без учета того, что мне нужно иметь эти дополнительные таблицы, которые обычно не имеют в схеме. Любая помощь здесь? –