SSIS-处理包含不同数据的平面文件

SSIS-处理包含不同数据的平面文件,ssis,Ssis,我必须处理一个平面文件,其语法如下,每行一条记录 <header>|<datagroup_1>|...|<datagroup_n>|[CR][LF] 将在暂存表中生成三条记录 ID Timestamp Data 123 01/01/2016 12323456KKSD3467 123 01/01/2016 456SSGFED43520160101173802 987 02/01/2016 456GGLWSD45960160108854802

我必须处理一个平面文件,其语法如下,每行一条记录

<header>|<datagroup_1>|...|<datagroup_n>|[CR][LF]
将在暂存表中生成三条记录

ID   Timestamp   Data
123  01/01/2016  12323456KKSD3467
123  01/01/2016  456SSGFED43520160101173802
987  02/01/2016  456GGLWSD45960160108854802

这将允许我对阶段记录进行预处理,以便进一步处理(有些记录将被丢弃,有些记录的数据将被进一步分解)。我的问题是如何将平面文件分解到暂存表中。我可以使用管道(|)拆分整个记录,然后使用派生列转换使用子字符串分解标题。之后,由于数据组的数量不同,它变得更加棘手。

我自己提出的解决方案并没有尝试在平面文件源处进行拆分,而是在脚本中进行拆分。我的数据流如下所示

public override void Input0_ProcessInputRow(Input0Buffer Row)
{
    var splits = Row.Line.Split('|');

    for (int i = 1; i < splits.Length; i++)
    {
        Output0Buffer.AddRow();
        Output0Buffer.ID = splits[0].Substring(0, 11);
        Output0Buffer.Time = DateTime.ParseExact(splits[0].Substring(14, 14), "yyyyMMddHHmmssFFF", CultureInfo.InvariantCulture);
        Output0Buffer.Datagroup = splits[i];
    }
}

因此平面文件源输出只是包含整行的一列。脚本组件包含暂存表中每列的输出列。脚本如下所示

public override void Input0_ProcessInputRow(Input0Buffer Row)
{
    var splits = Row.Line.Split('|');

    for (int i = 1; i < splits.Length; i++)
    {
        Output0Buffer.AddRow();
        Output0Buffer.ID = splits[0].Substring(0, 11);
        Output0Buffer.Time = DateTime.ParseExact(splits[0].Substring(14, 14), "yyyyMMddHHmmssFFF", CultureInfo.InvariantCulture);
        Output0Buffer.Datagroup = splits[i];
    }
}
public override void Input0\u ProcessInputRow(Input0Buffer行)
{
var splits=Row.Line.Split(“|”);
对于(int i=1;i
请注意,在SynchronousInputID属性中(脚本转换编辑器>输入和输出>输出0)必须设置为无。否则,脚本中将没有可用的Output0Buffer。最后,OLEDB目标只是将脚本输出列映射到临时表列。这解决了我从一个输入记录创建多个输出记录的问题