SSIS=-如何处理具有基于记录类型(Header、Detail、Trailer)的可变列数的CSV输入文件



我需要能够处理一个输入文件,其中有3种类型的记录由第一列中的值指定,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=位置1-1col2=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

不同寻常的是,更改文件格式不是一个选项。

不幸的是,这是一个常见问题。我找到的唯一解决方法是用一个varchar列配置一个平面文件连接管理器。将整行放入字符串列中。

然后使用条件分割来区分页眉/页脚/数据行,并将每种类型指示为单独的输出

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

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

最新更新