SSIS = - 如何根据记录类型(标题,详细信息,预告片)处理具有可变列数的CSV输入文件

时间:2011-06-09 14:36:27

标签: ssis

我需要能够处理一个输入文件,其中有3种类型的记录,由第1列中的值指定,RecordType:

H=header record
D=Detail
T=Trailer

我想我想将所有详细记录转移到dest db表中。我想标题和预告片记录,其中包含指定文件创建时间的控制信息(标题信息)和记录计数/校验和信息(在预告片中)也应该转移到单独的表中。

H,2011-06-02
D,value1,value2,value3,1
D,value1,value2,value3,2
D,value1,value2,value3,3
D,value1,value2,value3,4
T,4, 10

作为SSIS新手,我能想到的唯一方法是将输入文件处理为3列的固定长度文件。 col 1 = Pos 1-1 col 2 = Pos 2-2(逗号分隔符,丢弃列) col 3 =数据

然后,

  • 将数据传输到3列表中。
  • 根据记录类型将数据导出到新文件。
  • 作为单独文件重新处理

我希望不要这样做,因为这很难看。

我首选的方法是调整格式如下。 (我的逗号计数可能已关闭,但您可能会得到这个想法 -

"RecType","CreateDate","Value1","Value2","Value3","Value4","RowCount","CheckSum"
H,2011-06-02,,,,,,,,
D,,value1,value2,value3,1,,
D,,value1,value2,value3,1,,
D,,value1,value2,value3,1,,
T,,,,,,,,4,10

不幸的是,更改文件格式不是一种选择。

2 个答案:

答案 0 :(得分:3)

不幸的是,这是一个常见问题。我发现它的唯一方法是使用单个varchar列配置平面文件连接管理器。将整行放入字符串列。

然后使用条件拆分在页眉/页脚/数据行之间进行distingush,并将每种类型指向单独的输出

然后,您需要将数据写入文件,然后对其执行另一个连接管理器并对其进行处理,或者使用派生列使用字符串操作将单个字符串(varchar)拆分为多个列,字符串拆分或子串等等

答案 1 :(得分:0)

您可以将连接管理器配置为将文件作为单行导入,然后添加条件拆分以根据记录类型拆分记录。 然后,您可以为拆分转换的每种输出类型添加脚本组件。这些脚本组件可用于将输入拆分为所需的输出列。然后,您可以添加单独的目标以将记录插入到不同的表中。