我必须实现的流程根据列值的最后两个字符进行条件拆分。 出于代码维护和性能的原因,我需要在 C#中进行拆分。
我该如何编码?
我可以接受收集部分,但是缓冲部分对我来说还不清楚。 我确实在Input0_ProcessInputRow
output = ComponentMetaData.OutputCollection["CLEANED_DATA_" + Row.ISO2];
但是对于每个inut行,我需要对相应的输出缓冲区做一个AddRow ...
我该怎么做?
谢谢
答案 0 :(得分:0)
SSIS中的组件是用C#编写的,因此,与数据流组件相比,脚本组件的性能不会提高。我想知道通过条件拆分组件与脚本组件实现条件拆分的两个相同软件包之间的基准性能差异是什么。您可能在其他地方遇到性能瓶颈。
您提到拆分是动态处理的,能否请您详细说明该规则是什么?通常,行拆分可以通过派生列转换来处理,该转换可以创建一个称为RowSplitIndicator的新列,该列可以是位,整数,字符串值。从那里,可以根据RowSplitIndicator中的任何值对行进行有条件地拆分。如果拆分逻辑很复杂,这可以简化总体设计。
但是,问题的答案是,您首先需要在管道缓冲区中添加一行,然后可以将值分配给缓冲区的列:
MyAddressOutputBuffer.AddRow();
MyAddressOutputBuffer.OutputColumnName = YourVariable;
注意:您的脚本组件现在是异步的,即其中有一行,而有很多行。
答案 1 :(得分: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
。