Рекомендации по использованию задачи слияния в SSIS - PullRequest
3 голосов
/ 18 мая 2010

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

У меня есть один источник (таблица Oracle), и я получаю два поля, well_id и well_name, с сортировкой после, сортировка по well_id. У меня есть таблица назначения (сервер sql), и я также использую ее в качестве источника. Он имеет три поля: well_key (идентификационное поле), well_id и well_name, и у меня есть задача сортировки, сортирующая по well_id. Оба из них являются входными данными для моей задачи слияния. Я собирался вывести во временную таблицу, а затем каким-то образом получить новые записи обратно в таблицу сервера SQL.

Oracle Well                     SQL Well
     |                           |
     V                           V   
Sort Source                     Sort Well
     |                           |
     ------->  Merge* <-----------
                |
                V
              Temp well table

Я подозреваю, что это не лучший способ использовать этот инструмент. Каковы правильные шаги для такого слияния?

Одна из причин, по которой я подверг сомнению этот метод, заключается в том, что в моем слиянии произошла ошибка, сообщающая, что «вход слияния 2» должен быть отсортирован, но его источник является задачей сортировки, поэтому он сортируется.

Пример данных

SQL Well (before merge)
well_key   well_id   well_name
1          123       well k
2          292       well c
3          344       well t
5          439       well d

Oracle Well
well_id     well_name
123         well k
292         well c
311         well y
344         well t
439         well d
532         well j

SQL Well (after merge)
well_key   well_id   well_name
1          123       well k
2          292       well c
3          344       well t
5          439       well d
6          311       well y
7          532       well j

Было бы лучше загрузить мой Oracle Well во временный локальный файл, а затем просто использовать для него SQL-вставку с записью?

1 Ответ

4 голосов
/ 18 мая 2010

Прежде всего, я бы настоятельно рекомендовал избавиться от преобразования сортировки перед слиянием. Такая сортировка очень дорога, блокируя асинхронное преобразование, и ее можно легко избежать, выполнив заказ, изменив свои свойства ole db src advance для ваших столбцов вывода на issorted = true и изменив свойство sortkeyposition этого столбца на 1. Не забудьте добавить свой Порядок в вашем tsql, так как источник ole db не делает это автоматически для вас:

Синхронный против Асинхронного

Собственность Oledb Src IsSorted

Затем я бы протестировал производительность pkg с помощью Merge. Похоже, что поля, которые вы тянете, не такие большие по размеру; однако, если существует 10 миллионов записей, я бы также порекомендовал создать pkg, который поместит данные в две промежуточные таблицы, объединит их, а затем вставит данные, как вы предложили выше, чтобы убедиться, что вы получите более высокую производительность, используя этот подход.

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...