Обновление стратегии для таблицы с порядковым номером в качестве первичного ключа в Informatica

У меня есть сопоставление, которое получает данные из нескольких исходных таблиц сервера SQL и назначает порядковый номер, сгенерированный в качестве идентификатора для каждой строки. В целевой таблице поле идентификатора установлено как первичный ключ.

Каждый раз, когда я запускаю это отображение, он создает новые строки и назначает новый идентификатор для записей, которые уже существуют в цели. Ниже приведен пример:

1st run:
ID   SourceID   Name   State
1     123        ABC   NY
2      456       DEF   PA

2nd run:
ID   SourceID   Name   State
1     123        ABC   NY
2      456       DEF   PA
3     123        ABC   NY
4      456       DEF   PA

Требуемый вывод должен: 1) создать новую строку и назначить новый идентификатор, если запись обновляется в источнике. 2) создать новую строку и назначить новый идентификатор, если новые строки вставлены в источник.

Как это можно получить в Informatica?

Заранее спасибо!

2 ответа

Решение

Я возьму флаер и приму фактический вопрос: "Как я могу узнать, является ли входящая запись ни вставкой, ни обновлением, чтобы я мог ее игнорировать". Вы могли бы

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

б) лучшее предложение!! Сконфигурируйте динамический поиск, в котором должно храниться последнее состояние записи, совпадающей с SourceID. Затем вы можете использовать индикаторный порт newlookuprow, чтобы определить, является ли запись вставкой, обновлением или без изменений, и отфильтровать записи без изменений в последующем преобразовании.

Дай ID выставить IDENTITY PROPERTY...

Create Table SomeTable (ID int identity(1,1), 
                        SourceID int, 
                        [Name] varchar(64), 
                        [State] varchar(64))

Когда вы вставляете в него... вы ничего не вставляете для ID. Например...

insert into SomeTable
select
   SourceID,
   [Name],
   [State]
from
   someOtherTable

Поле идентификатора будет автоматически увеличиваться, начиная с 1, и увеличиваться на 1 каждый раз, когда вставляется строка. Что касается вашего вопроса о добавлении строк при каждом обновлении или вставке в другую таблицу, это то, для чего предназначены TRIGGERS.

Другие вопросы по тегам