SSIS: условное разбиение в C#
Поток, который я должен реализовать, выполняет условное разбиение в соответствии с последними двумя символами значения столбца. В целях поддержки кода и производительности мне нужно выполнить разбиение в C#.
Как я могу кодировать это?
Я в порядке с частью коллекции, но буферная часть мне не ясна. У меня есть в Input0_ProcessInputRow
output = ComponentMetaData.OutputCollection["CLEANED_DATA_" + Row.ISO2];
но тогда для каждой входной строки мне нужно сделать AddRow к соответствующему выходному буферу...
Как я могу это сделать?
Благодарю вас
2 ответа
Компоненты в SSIS написаны на C#, поэтому вам не нужно повышать производительность, переходя к компоненту сценария по сравнению с компонентом потока данных. Мне было бы интересно узнать, в чем разница в производительности между двумя идентичными пакетами, которые реализуют условное разделение через компонент условного разделения по сравнению с компонентом сценария. У вас может быть узкое место в производительности в другом месте.
Вы упоминаете, что расщепление обрабатывается динамически, не могли бы вы, пожалуйста, быть более конкретным, какие правила для этого? Как правило, разделение строк может быть обработано с помощью преобразования "Производный столбец", которое может создать новый столбец с именем RowSplitIndicator, который может иметь значение типа bit, int, string. Оттуда строка может быть условно разделена на основе любого значения в RowSplitIndicator. Это упрощает общий дизайн в случае сложной логики разделения.
Ответ на ваш вопрос, однако, заключается в том, что вам сначала нужно добавить строку в буфер конвейера, а затем вы можете присвоить значения столбцам буфера:
MyAddressOutputBuffer.AddRow();
MyAddressOutputBuffer.OutputColumnName = YourVariable;
Примечание: ваш компонент скрипта теперь асинхронный в том смысле, что в нем есть одна строка и много строк.
Вы упомянули, что:
Для поддержки кода и производительности. Мне нужно сделать расщепление в C#
Условное разбиение является более производительным и более простым в обслуживании, чем реализация той же логики в компоненте сценария, особенно в том, что вам необходимо реализовать асинхронную логику.
В любом случае, чтобы сделать это с помощью компонента сценария, вы можете просто использовать инструкцию 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
,