2014-02-06 3 views
0

В DataFlow предположим, что мне нужно получить новый столбец myDate, и значение будет GetDate() или sysdatetime(), независимо от того, ... У меня есть два варианта: Добавить этот столбец в Source OleDB выбрать как:SSIS - Derived Column vs Select expression

Select 
    col1, col2, ..., getDate() as myDate 
from myTable 

или я могу добавить SSIS «производный столбец» шаг и кладу GetDate() выражение там.

Какой вариант лучше, с точки зрения производительности?

ответ

2

Это зависит. Существует тонкая разница между использованием GetDate()/current_timsetamp в вашем запросе и использованием его в производном столбце.

Результат getdate/current_timestamp в исходном запросе будет оцениваться один раз. Таким образом, ваше значение myDate будет постоянным для всего набора данных. Возможно, это правильно для вашего приложения, возможно, это не так.

Использование выражения getdate в производном столбце будет оцениваться каждые N интервалов. Для большого импорта вы можете получить значительный дрейф в стоимости. То есть первая строка имеет 2014-02-06T11:46:00.000, в то время как последняя строка имеет 2014-02-06T15:21:19.762 Опять же, является ли это более желательным поведением, зависит от вас и вашего приложения. Это осложнило запросы, которые я должен был написать, чтобы скорректировать поведение импорта в нашей DW, поскольку мы могли только коррелировать импортную деятельность на основе дат.

Если вы хотите использовать производную колонку, но иметь согласованную опорную точку, используйте некоторые из переменных пространства имен System. Мы часто использовали @[System::StartTime], но @[System::ContainerStartTime] обеспечило бы время начала, более тесно связанное с началом потока данных.

0

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

0

Я думаю, что было бы лучше, если вы сделаете это внутри оператора select, а не производного столбца внутри ssis.

Смежные вопросы