#informatica #informatica-powercenter #joiner
Вопрос:
У меня есть плоский Файл1 (F1) с этими столбцами — key1, col1, col2 Плоский Файл2 (F2) с этими столбцами — key2, col1, col2 и одна таблица (T1) с этими столбцами — key3, col1, col2
Требование состоит в том, чтобы получить данные из всех 3 источников на основе приведенных ниже проверок — когда key1 в плоском файле (F1) совпадает с key2 в плоском файле(F2) — верните все совпадающие строки в F1 и F2, когда key1 в плоском файле (F1) не совпадает с key2 в плоском файле(F2) — Только тогда следует выполнить проверку между плоским файлом F1 и таблицей T1 на основе условия — key1 = key3 и если найдено совпадение — затем верните все совпадающие строки в T1 и F1
Для решения вышеуказанной задачи
- Я создал преобразование столяра между этими 2 источниками — F1 (Мастер) и F2 (Деталь) и получил соответствующие строки, а тип соединения, который я выбрал, был «Детальное внешнее соединение».
- Я застрял на том, как выполнить оставшиеся проверки? кто-нибудь может, пожалуйста, помочь?
Ответ №1:
Вы можете выполнить следующие действия
- Сначала соедините FF1 и FF2 (внешнее соединение FF2, чтобы поступали все данные из FF1).
- Затем используйте маршрутизатор для группировки данных, которых нет в FF2. Вы можете отправить соответствующие записи в целевую группу (группа 1).
- Несоответствующие записи могут быть выбраны, когда ff1.ключ не равен нулю, но ff2.ключ2 равен нулю. Выберите эти записи и сопоставьте их с таблицей T1 с помощью JNR.
- Вы можете отправить эти соответствующие записи в target.
Вся карта должна выглядеть так —
sq_FF1 (master) |Grp 1 = ff1.key and ff2.key2 both NOT NULL (Matching)-------------------------------------------------> To TGT
| JNR ( ff1.key=ff2.key2) (Detail outer join) --> ROUTER -(2 groups) |Grp 2 = ff1.key is NOT NULL and ff2.key2 IS NULL (NonMatching) --> |
sq_FF2 (Detail) | JNR key1 = key3 (inner join) ---> To TGT
sq_T1 -----------------------------------------------------------------------------------------------------------------------------------------> |
Ответ №2:
Не можем ли мы привести результирующий результат обоих наборов данных к одному общему преобразованию (например, объединению) -> и оттуда мы должны реализовать общую логику. т. е.
- верните все совпадающие строки в F1 и F2
- оставшиеся несопоставимые строки F1 должны быть объединены с таблицей T1
- Наконец, результирующий результат вышеперечисленных 2 наборов должен быть направлен на одну общую трансформацию (например, объединение) ->, и оттуда у нас есть одна общая логика.
- Я использовал столярный перевод. чтобы привести соответствующие строки в F1 и F2 ->
- использованный фильтр transf. с конд. чтобы идентифицировать все несопоставимые строки F1 с помощью cond. Ключ2 равен нулю ->
- использованная столярная передача. чтобы связать таблицу T1 с записями, которые были определены как часть фильтра ->
- Результат, определенный как часть шага 1 и шага 3, направляется в Union, но при объединении данных с помощью union transf возникает проблема. поскольку мы приводим данные на основе соединения типа «Подробное внешнее соединение» (из-за которого данные, похоже, дублируются). Как избавиться от этой проблемы?