SSIS: условное разбиение в C # - PullRequest
2 голосов
/ 10 мая 2019

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

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

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

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

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

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

Спасибо

Ответы [ 2 ]

0 голосов
/ 11 мая 2019

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

По соображениям поддержки кода и производительности.Мне нужно выполнить разбиение в 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.

0 голосов
/ 10 мая 2019

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

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

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

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

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

...