сортировка в ssis занимает много времени, если я делаю сортировку по команде ole db, условие split не работает - PullRequest
1 голос
/ 25 марта 2012

ну, это моя проблема

я использую 2 источника

first query (select * from servera.databasea.tablea)
secund query(select id, modifiedon from serverb.databaseb.tableb)
sort first query, sort second query
    merge join at left join
condition split is.. isnull(idtableb) then i do insert (insert ont serverb)
               !isnull(idtableb) && modifiedontableb<modifiedontablea then update(on server b)

он работает нормально с несколькими строками, но я работаю с более чем 50000, и это занимает более 2 часовсортировка, и она получает ошибку

ну, мой другой способ -

сортировка на oledbsource при щелчке правой кнопкой мыши на show advancededitor и на входных и выходных свойствах при выводе источника ole db, я выбираю issorted, измененный на true

в выходных столбцах для идентификатора я изменил положение сортировки на 1 (я ничего не изменил), поэтому я сделал эти шаги для 2 oledbsource (oledb для server1 и server 2)

все работаетнамного быстрее он завершился за 5 минут и теперь вставка (всегда) разбиение по условию не работает: s потому что всегда будет вставка, так что я при условии разбиения добавила синтаксический анализ (DT_DBDATE), и она продолжает оставаться равной (только вставки) никогда не происходитобновить после разбора mofidiedon (DT_DATE), и он останется равным.тогда мой вопрос (я не хочу использовать сортировку), как я могу сделать условия разделения работ?

1 Ответ

4 голосов
/ 25 марта 2012

Шаг сортировки занимает много времени, поскольку у вас недостаточно памяти для операции сортировки.Это означает, что он начнет сортировку на диске, и это очень медленно.Варианты этого - использовать некоторые сторонние компоненты сортировки, такие как NSort .

В противном случае вы можете сделать следующее:

Чтобы ваш MERGE работал, ваши входные данные должнысортироваться, как в запросе, так и с использованием SortKeyPosition.Также они должны быть отсортированы одинаково.

Ваши запросы должны выглядеть следующим образом:

SELECT * FROM servera.databasea.tablea ORDER BY id, modifiedon

SELECT id, modifiedon FROM serverb.databaseb.tableb ORDER BY id, modifiedon

Теперь установите IsSorted на TRUE, установите SortKeyPosition 1 на id

В вашем MERGEшаг, используйте id для ключа соединения.

Теперь в вашем условном разбиении вы можете использовать два выходных регистра.

Обратите внимание, что если у вас есть MULTIPLE строк для идентификатора, вам нужно что-то еще длясортируйте / объединяйте, чтобы не получить вещи в неправильном порядке.

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