内容介绍
其实读文章标题就能明白这是一个互逆的操作。
一.把格式不一致的数据输出到平面文件。
二.再解析格式不一致文件,把数据导入数据库中的过程。
1.格式不一致数据输出到平面源文件实现步骤
要实现输出到txt文件成如下格式。(很明显前两行跟后面内容格式不一致)
这里还是以AdventrueWorkDB示例数据库中的Sale.store表数据为例,选取500行。
a.在控制流中选取两个数据流任务,一个HEADER,另一个CONTENT,如图
b.在开头部分数据流中,拖入OLEDB源,命名为OLEDB_HEADER,配置如下
--访问模式我选择的是SQL命令,也可以封装成存储过程,通过 Exce来执行,方式很多,根据实际情况选择最方便高效的方法。
select 'CreateTime:'+convert(varchar(10),getdate(),120) as header
union all
select 'Creater:Zzjob'
得到开头部分
c.拖一个平面文件目标命名为“FFS_HEADER”配置如下,新建平面文件目标连接管理器
d.在DFT_CONTENT控制流中配置剩余格式一致内容部分,再新建一个平面连接源管理器FFS_CONTENT,还是指定之前的文件名
关键平面文件目标‘覆盖文件中的数据’不勾选,则会在原始文件换行追加。
点击相关映射,确定配置完成即可。执行结果,得到格式不定的test1
---------------------------------------------------------萌蠢分隔线---------------------------------------------------------------------------
2.解析得到的test1文件,把相关数据导入数据库。
先上数据流的全图
a.平面源文件的配置略过,连接管理器连接之前的test1文本就行了,但是有一点注意:把所有的列当作一列,我取列名为test。如图
b.脚本组件的配置。输入列配置中勾上,使用类型因为是读数据,选择ReadOnly就行了.
这里详细介绍下输入和输出的配置
看"输入0"下的子节点,从平面源文件读取过来的test列,是平面源输入的,应该好理解。
"Content"这是我改了名字,默认是“输出0"。 因为选的ScriptComponent组件Transformation-转换类型,所以肯定要有输出内容才行。
这里可以添加多个输出,这里我只添加了一个输出Content,根据实际需求来。根据test1文本内容添加了七列输出列。数据类型都是Unicode 字符串。
Transformation类型不需要配置连接管理器,作为Destination,或Source时配置。
c.在脚本选项,点击编辑脚本。
这里自动生成了三个方法:
PreExecute():数据流执行前调用
PostExecute():数据流执行完后调用
输入0_ProcessInputRow(输入0Buffer Row):数据流中一行行读取的时候调用。(以后再示例介绍下这个三个方法的调用情况)
这里只需要在0_ProcessInputRow(输入0Buffer Row)方法中写c#代码
if (Row.test.StartsWith("CreateTime"))
{
Row.Createtime = Row.test.Substring(11, 10); \\取开头第一行时间
}
else if (Row.test.StartsWith("Creater")) \\取开头第二行人名
{
Row.Creater = Row.test.Substring(8, 5);
}
else \\取内容部分
{
string [] str = Row.test.Split(',');\\c#分割函数,以逗号分隔成数组返回。
Row.BusinessEntityID = str[0].ToString();
Row.Name = str[1].ToString();
Row.SalesPersonID = str[2].ToString();
Row.rowguid = str[3].ToString();
Row.ModifiedDate = str[4].ToString();
}
e.OLEDB目标的配置就不介绍了,上图标明下映射关系。
执行结果:内容500行+开头2行,执行没有问题。在看看数据库,数据成功导入。
总结:1.这里是把ScriptComponent当作Transformation转换控件用的,不用配置连接管理器。
2.开头部分在数据库单独行,单独列存储的。可能看着不舒服。但数据进入数据库了,简单的sql就可以解决了,或者在ScriptComponent中再增加一个输出项,输出到另外一张表中。
3.ScriptComponent还有Destination和Source两种类型也可以解析这样的文件。配置上是有差别的,也是相当灵活。我用的最多的还是Transformation。以后再介绍下另外的两种方式。