Сессия Informatica отказывается сначала обновляться, а затем вставлять в режиме «обновить, затем вставить» - PullRequest
1 голос
/ 08 июня 2019

Очень базовая настройка: источник-цель - хотел повторить поведение MERGE. Удалена стратегия обновления, активировано правило «обнови потом вставь» для цели в сеансе. Не работает, как описано, всегда пытается вставить в столбец первичного ключа, даже если тот же ключ прибывает, что должно было вызвать оператор "update". Пробовал другие целевые методы - всегда пытается вставить. Прилагается карта картирования.

базовая попытка слияния

Ответы [ 2 ]

0 голосов
/ 12 июня 2019

Я попытаюсь немного прояснить это.

Прежде всего, использование Update Strategy в отображении требует, чтобы свойство сеанса Treat source rows as было установлено на Data driven.Это самый медленный вариант, так как он будет устанавливаться построчно в пределах отображения - но это именно то, что вам нужно, если использовать преобразование Update Strategy.Поэтому для того, чтобы отразить MERGE, вам нужно его удалить.

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

  • установить Treat source rows as на Insert - это означает, что все строки будут вставляться каждый раз.Если нет ошибок (например, вызванных уникальным индексом), данные будут умножены.Чтобы имитировать поведение MERGE, вам нужно добавить уникальный индекс, который будет препятствовать вставкам, и сообщить целевому соединителю insert else update.Таким образом, в случае сбоя вставки будет предпринята попытка обновления.
  • установите Treat source rows as на Update - теперь это скажет PowerCenter попробовать обновления для каждой строки ввода.Теперь использование update else insert приведет к тому, что в случае сбоя (т. Е. Нет строки для обновления) не будет ошибки - вместо этого будет предпринята попытка вставки.Здесь нет необходимости в уникальном индексе.Это одно отличие.

Дополнительное отличие - хотя оба решения будут отражать операцию MERGE - может наблюдаться в производительности.В среде, где новые данные очень редки, первый подход будет медленным: каждый раз, когда будет предпринята попытка вставки, просто произойдет сбой и затем выполните операцию обновления.Всего несколько раз это удастся с первой попытки.Второй подход будет более быстрым: обновления будут успешными в большинстве случаев, и только в редких случаях они будут неудачными и приведут к операции вставки.

Конечно, если обновления не часто ожидаются, все будет с точностью до наоборот.

Это можно рассматривать как сложное решение для простого слияния.Но это также позволяет разработчику влиять на производительность.

Надеюсь, это проливает свет!

0 голосов
/ 08 июня 2019

Наконец-то понял это.Вы должны внести изменения в 3 местах: а) отображение - удалить стратегию обновления б) свойства session :: target - установить метод «обновить, затем вставить» в) собственные свойства сеанса - «трактовать исходные строки как»

В третьем случае вы должны переключить «рассматривать исходные строки как» со вставки на обновление.Который тогда позволит и - обновления и вставки.

Почему это так, что это выше моего понимания.Но это работает.

...