2016-12-28 1 views
0

Мне было интересно, есть ли способ повысить производительность и скорость выполнения SSIS обновлений на одной таблице. Например, я использую таблицу Source и Destination для цели ETL. Таблица назначения имеет Execute SQL задачу после загрузки, который использует следующий SQL, чтобы заменить NULLSОптимизация ssis для нескольких обновлений с использованием Execute SQL Task

update DestinationTable 
Set Column1 = "*Unknown*" 
where Column1 is null 

Это используется для более чем 50 столбцов, однако делать это параллельно идет медленно в SSIS из-за блокировки таблицы, делая его в последовательности может занять некоторое время, так как он выполняет одну задачу sql за другой. Есть ли способ ускорить этот процесс в SSIS, делая это другим способом, чем те, о которых я говорил? Спасибо

ответ

3

Если вам нужна производительность, не используйте шаблоны, которые вы описали. Помните: E xtract, T ransform, then L oad. То, что вы описали, это не в порядке Load then Transform. Эти «после преобразования нагрузки» означают, что вы обмениваете таблицу как с помощью INSERTS, так и с UPDATES. Просто сделайте один INSERT с данными, которые вы хотите.

Либо сделать преобразование NULL внутри ЗЕЬЕСТА вашего компонента OLE DB Source ...

SELECT 
    Column1 = ISNULL(Column1,'*Unknown*'), 
    Column2 = ISNULL(Column2,'*Unknown*'), 
    Column3 = ISNULL(Column3,'*Unknown*') 
FROM MyTable 

Или - если вы должны сделать это в SSIS - добавить Производный компонент столбца в между OLE DB Source и компоненты OLE DB Destination. Внутри производного столбца создайте новый столбец, который преобразует все NULLS, используя следующий код.

ISNULL([Column1]) ? "*Unknown*" : [Column1]

ISNULL([Column2]) ? "*Unknown*" : [Column2]

ISNULL([Column3]) ? "*Unknown*" : [Column3]

Оба варианта достичь того же. Сделайте преобразование перед загрузкой данных.

Надеюсь, это поможет и удачи!