SSIS, хранящий переменные журналирования в производном столбце - PullRequest
0 голосов
/ 15 июля 2010

Я разрабатываю пакеты служб SSIS, которые состоят из 2 основных этапов:

Шаг 1 : Соберите все виды данных из существующих устаревших систем и поместите их в серию промежуточных таблиц в моей базе данных.

Шаг 2 : переместить данные из моих промежуточных таблиц в более реляционный набор таблиц, который я использую специально для своего проекта.


На шаге 1 я просто делаю объем SELECT и объем INSERT; однако на шаге 2 я делаю построчную вставку в мои таблицы с помощью задач OLEDB Command, чтобы можно было регистрировать очень специфическую активность на уровне строк для всего, что происходит. Вот мой общий план для шагов 2 процессов.

альтернативный текст http://dl.dropbox.com/u/2468578/screenshots/step_1.png

Вы увидите 3 задачи OLEDB: 1 для фактического INSERT и 2 для успеха / неудачи INSERT с в нашей таблице журналирования.

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

альтернативный текст http://dl.dropbox.com/u/2468578/screenshots/step_3.png

Я решил хранить эти значения регистрации в переменных вместо жесткого кодирования значений в поле SqlCommand в задаче, потому что я почти уверен, что вы НЕ МОЖЕТЕ поместить переменные выражения в это поле (т.е. exec storedproc @[User::VariableName],... ,... ,... ). Итак, это лучшее решение, которое я нашел.

альтернативный текст http://dl.dropbox.com/u/2468578/screenshots/step_2.png

Это лучшее решение? Вероятно, нет.

Разумно ли с точки зрения производительности добавлять 4 столбца журналирования в поток данных, состоящий из 500 000 записей? Наверное, нет.

Можете ли вы придумать лучший способ?

Ответы [ 2 ]

1 голос
/ 16 июля 2010

Я действительно не думаю, что вызов OLEDBCommand 500 000 раз будет производительным.

Если вы уже собираетесь создавать промежуточные таблицы - загрузите все это в промежуточную таблицу и перенесите ее оттуда в T-SQL или даже другой поток данных (или в необработанный файл, а затем что-то еще в зависимости от вашей полной операции).Массовая вставка будет значительно более эффективной.

0 голосов
/ 17 июля 2010

, чтобы добавить к ответу Кейда, если вам действительно нужна информация о ведении журнала построчно, лучше всего использовать назначение oledb и использовать одно или оба из следующих преобразований для добавления столбцов в поток данных:

Преобразование производной колонки

Преобразование аудита

Это должна быть ваша лучшая ставка, и она не должна увеличивать накладные расходы

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