запрос преобразования соединения
У меня есть Flat File1 (F1) с этими столбцами - key1, col1, col2Flat File2 (F2) с этими столбцами - key2, col1, col2 и одна таблица (T1) с этими столбцами - key3, col1, col2
Требуется получить данные из всех 3 источников на основе следующих проверок - когда key1 в плоском файле (F1) совпадает с key2 в плоском файле (F2) - вернуть все совпадающие строки в F1 и F2, когда key1 в плоском файле (F1) не соответствует совпадает с ключом 2 в плоском файле (F2) - только тогда должна выполняться проверка между плоским файлом F1 и таблицей T1 на основе условия - ключ1 = ключ3, и если совпадение найдено - возвращать все совпадающие строки в T1 и F1
Чтобы выполнить вышеуказанную задачу
- Я создал объединяющую трансформацию между этими двумя источниками - F1 (Главный) и F2 (Детальный) и получил соответствующие строки, а тип соединения, который я выбрал, был «Детальное внешнее соединение»
- Застрял в том, как сделать оставшиеся проверки? кто-нибудь может помочь?
2 ответа
Невозможно привести результирующий результат обоих наборов данных к одной общей трансформации (например, объединению) ->, и оттуда мы должны реализовать общую логику. т.е.
- вернуть все совпадающие строки в F1 и F2
- оставшиеся несовпадающие строки F1 следует объединить с таблицей T1
- Наконец, результирующий результат двух вышеуказанных наборов должен быть направлен в одну общую трансформацию (например, объединение) ->, и оттуда у нас есть одна общая логика.
- Я использовал столярный трансф. чтобы вывести совпадающие строки в F1 и F2 ->
- б / у фильтр трансф. с конд. для идентификации всех несовпадающих строк F1 с помощью усл. Key2 имеет значение null ->
- б / у столярный трансф. связать таблицу T1 с записями, которые были идентифицированы как часть фильтра ->
- Результат, определенный как часть step1 и step3, направляется в Union. Но возникает проблема, когда мы объединяем данные с помощью union transf. поскольку мы приводим данные на основе типа соединения «Детальное внешнее соединение» (из-за чего данные кажутся дублированными). Как избавиться от этой проблемы?
Вы можете выполнить следующие шаги
- Сначала соедините FF1 и FF2 (внешнее соединение FF2, чтобы все данные из FF1 поступали).
- Затем используйте маршрутизатор для группировки данных, которых нет в FF2. Вы можете отправить совпадающие записи в цель (группа 1).
- Несовпадающие записи могут быть выбраны, если ff1.key не равно нулю, а ff2.key2 равно нулю. Выберите эти записи и сравните их с таблицей 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 -----------------------------------------------------------------------------------------------------------------------------------------> |