SSIS - ole db source / destination - получать только строки с исходного сервера, ГДЕ СУЩЕСТВУЕТ в сервере назначения таблицы - PullRequest
1 голос
/ 06 апреля 2020

Я перенесу 90 миллионов строк с исходного сервера в мою промежуточную область на конечном сервере. И из области подготовки я перенесу еще 20 миллионов в процесс ETL, выполнив WHERE ID EXISTS в таблице, расположенной на сервере назначения.

Поскольку таблица не присутствует в источнике сервер и только на конечном сервере. Можно ли фильтровать, когда я извлекаю строки непосредственно с исходного сервера (поэтому я передаю только 20 миллионов строк с исходного сервера на конечный сервер)?

Ответы [ 2 ]

0 голосов
/ 07 апреля 2020

Помимо создания связанного сервера на исходном сервере. Есть два подхода к SSIS.

  1. Создайте временную промежуточную таблицу на конечном сервере, скопируйте все записи из источника в эту временную таблицу и используйте фильтр where exists.
  2. В потоке данных создайте преобразование «Уточняющий запрос», которое для набора поиска получает идентификаторы из таблицы сервера назначения. Затем приступайте только к соответствующим записям. По соображениям производительности вы можете использовать Поиск в режиме полного или частичного кэша; только тестирование производительности может сказать, какой режим лучше.

Рекомендации Хади с Linked Server хороши и будут работать. Преимущество чистого подхода SSIS состоит в том, что он не вносит никаких изменений в исходный сервер, вся конфигурация соединения находится внутри SSIS. В некоторых случаях это может быть полезным. Его недостаток - производительность может быть хуже, чем у Linked Server.

Если необходимо передать как можно меньше строк из источника, наиболее простым способом является подход с использованием связанного сервера. В противном случае можно создать таблицу на исходном сервере (это может быть даже глобальная временная таблица ##, созданная в задаче пакета служб SSIS) и скопировать идентификаторы фильтров с целевого сервера. Временная таблица должна быть global с ##, поскольку она будет заполнена в одной задаче и использована в последующих. Затем отфильтруйте записи с помощью предложения EXISTS на исходном сервере.

0 голосов
/ 07 апреля 2020

Вы можете сделать это, создав связанный сервер на исходном компьютере. Связанные серверы позволяют объединять таблицы в разных экземплярах:

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