SSIS: условное разбиение в С#

73
8

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

Как я могу кодировать это?

Я в порядке с частью коллекции, но буферная часть мне не ясна. У меня есть в Input0_ProcessInputRow

output = ComponentMetaData.OutputCollection["CLEANED_DATA_" + Row.ISO2];

но тогда для каждой входной строки мне нужно сделать AddRow к соответствующему выходному буферу...

Как я могу это сделать?

Благодарю вас

спросил(а) 2021-01-13T23:54:18+03:00 2 недели назад
1
Решение
84

Компоненты в SSIS написаны на С#, поэтому вам не нужно повышать производительность, переходя к компоненту сценария по сравнению с компонентом потока данных. Мне было бы интересно узнать, в чем разница в производительности между двумя идентичными пакетами, которые реализуют условное разделение через компонент условного разделения по сравнению с компонентом сценария. У вас может быть узкое место в производительности в другом месте.

Вы упоминаете, что расщепление обрабатывается динамически, не могли бы вы, пожалуйста, быть более конкретным, какие правила для этого? Как правило, разделение строк может быть обработано с помощью преобразования "Производный столбец", которое может создать новый столбец с именем RowSplitIndicator, который может иметь значение типа bit, int, string. Оттуда строка может быть условно разделена на основе любого значения в RowSplitIndicator. Это упрощает общий дизайн в случае сложной логики разделения.

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


MyAddressOutputBuffer.AddRow();
MyAddressOutputBuffer.OutputColumnName = YourVariable;

Примечание: ваш компонент скрипта теперь асинхронный в том смысле, что в нем есть одна строка и много строк.

ответил(а) 2021-01-13T23:54:18+03:00 2 недели назад
43

Вы упомянули, что:

Для поддержки кода и производительности. Мне нужно сделать расщепление в С#

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

В любом случае, чтобы сделать это с помощью компонента сценария, вы можете просто использовать инструкцию switch для этого:

switch (Row.ISO2){

case "Value1":
Output1Buffer.AddRow();
Output1Buffer.Column = Row.Column;
break;

case "Value2":
Output2Buffer.AddRow();
Output2Buffer.Column = Row.Column;
break;

case "Value3":
Output3Buffer.AddRow();
Output3Buffer.Column = Row.Column;
break;

default:
Output4Buffer.AddRow();
Output4Buffer.Column = Row.Column;
break;
}

Убедитесь, что все выходные данные не имеют синхронного ввода и что это свойство имеет значение None.

ответил(а) 2021-01-13T23:54:18+03:00 2 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема