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 ,

Другие вопросы по тегам