Похоже, вы делаете инкрементное обновление.Существует специальный шаг, названный Merge Rows (Diff)
, для сравнения двух потоков и определения, существуют ли они в обоих потоках и изменились ли они.
Два потока, эталонный поток (текущие данные) и сравнениепоток (новые данные), объединяются.Строка объединена и помечена как:
- идентичный Ключ был найден в обоих потоках, и сравниваемые значения идентичны;
- изменено Ключ был найден в обоих потоках, но одно или несколько значений отличаются;
- new Ключ не найден в ссылочном потоке;
- удален Ключ не был найден в потоке сравнения.
Перед объединением два потока должны быть отсортированы.Вы можете сделать это в запросе sql, но лучше всего указать явный шаг Sort row
, потому что в противном случае процесс остановится после чтения 1000 записей или того, что находится в пределе Rowset (знакомо?).
Затем поток с шагом Swich/Case
направляется к соответствующему действию.
Шаблон «наилучшей практики» выглядит следующим образом, в котором я добавил первый шаг, чтобы получить максимальную дату, и шагчтобы построить суррогатный ключ.
Эта модель была доказана с годами намного быстрее.Фактически, это позволяет избежать очень медленного Database lookup
(один полный поиск по дБ по строкам) и сократить использование медленного шага Insert/Update
(3 доступа к БД: один для извлечения записи, один для изменения значений и одинхранить его).И сортировка (которую можно предварительно подготовить в потоке) довольно эффективна.