2

我必须实现的流程根据列值的最后两个字符进行条件拆分。出于代码维护和性能原因,我需要在C# 中进行拆分。

我该如何编码?

我对收集部分没问题,但缓冲区部分对我来说不是很清楚。我确实有 Input0_ProcessInputRow

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

但是对于每个 inut 行,我需要对相应的输出缓冲区执行 AddRow ...

我怎样才能做到这一点?

谢谢你

4

2 回答 2

0

SSIS 中的组件是用 C# 编写的,因此脚本组件不会比数据流组件带来性能提升。我很想知道通过条件拆分组件与脚本组件实现条件拆分的两个相同包之间的基准性能差异是什么。您可能在其他地方遇到了性能瓶颈。

您提到拆分是动态处理的,您能否更具体地说明一下规则是什么?通常,可以使用派生列转换来处理行拆分,该转换可以创建一个名为 RowSplitIndicator 的新列,该列可以是位、整数、字符串值。从那里,可以根据 RowSplitIndicator 中的任何值有条件地拆分行。这在拆分逻辑复杂的情况下简化了整体设计。

但是,您的问题的答案是,您首先需要向管道缓冲区添加一行,然后您可以将值分配给缓冲区的列:

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

注意:您的脚本组件现在是异步的,因为有一行输入,并且有很多行输出。

于 2019-05-10T15:32:19.043 回答
0

你提到过:

出于代码维护和性能原因。我需要在 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

于 2019-05-10T23:31:21.440 回答