通过SSIS的“查找”组件进行不同数据源之间数据的合并操作

原文: 通过SSIS的“查找”组件进行不同数据源之间数据的合并操作

 

为了协助开发还原生产环境中的某些bug,需要将将生产环境的某些特定表数据导入到测试环境做测试,
之前一直都是暴力地truncate测试环境的表,然后用SSIS将生产环境对应的整张表数据导入测试环境,简便快捷
后来开发提出来,保留测试环境已有的数据,只同步差异的数据(根据主键),于是就尝试使用SSIS中的“查找”组件进行不同服务器之间的“存在则更新,不存在则插入”数据合并操作,
实际操作的时候只执行插入操作,达到同步数据的目的。

 

尝试之后觉得还是挺好使的,看起来跟简单,操作起来步骤还是挺多的,记录一下。

 

  首先最主要的一个组件就是如下截图的查找组件。

通过SSIS的“查找”组件进行不同数据源之间数据的合并操作_第1张图片

 完整的测试结果如图所示,最主要的目的就是让源数据“兵分两路”,以不同的方式(更新或者插入)去同步到目标服务器中,当然数据源与数据目标可以是不同的服务器,不同类型的数据库或者文件,关键是一种实现方式。

通过SSIS的“查找”组件进行不同数据源之间数据的合并操作_第2张图片

 

 

开始操作步骤

 新建SSIS任务什么的就不说了,操作一遍就回了,微软的IDE还是比较好用的。

 

首先是最基本的数据流任务,拖一个数据任务流到SSIS设计器中

通过SSIS的“查找”组件进行不同数据源之间数据的合并操作_第3张图片

双击进入源编辑界面,设置数据源的服务器和表

  通过SSIS的“查找”组件进行不同数据源之间数据的合并操作_第4张图片

  

  添加查找组件,设置查找组件的服务器和表(导入数据的目标服务器和表)

  通过SSIS的“查找”组件进行不同数据源之间数据的合并操作_第5张图片

  根据这里的需求,常规选项中一定要将设置为“将行重定向到无匹配输出”,因为这里是要执行“不存在就插入”的操作,因此“源”与“目标”中的数据进行匹配,匹配到的与没有匹配到的都要输出,只不过是处理方式不同

  注意有对于目标中的数据有三种缓存模式,这里选择默认的方式,不多说,有兴趣的可以上网搜

  通过SSIS的“查找”组件进行不同数据源之间数据的合并操作_第6张图片

  继续编辑列映射属性

  通过SSIS的“查找”组件进行不同数据源之间数据的合并操作_第7张图片

 

 通过SSIS的“查找”组件进行不同数据源之间数据的合并操作_第8张图片

  分别拉一个OLE DB 命令 和 OLE DB目标,位置尽量摆放的好看一点

   通过SSIS的“查找”组件进行不同数据源之间数据的合并操作_第9张图片

 

   分别设置个OLE DB 命令 和 OLE DB目标的属性信息

  通过SSIS的“查找”组件进行不同数据源之间数据的合并操作_第10张图片

 

  通过SSIS的“查找”组件进行不同数据源之间数据的合并操作_第11张图片

  列映射选项卡中编译映射信息,可用目标列中的Parama_0和Param_1分别代表两个上述SQL语句中的两个参数,

  因为SQL语句是update test_table1 set name = ? where id = ?,这里的参数的顺序要与占位符的?顺序表示的意义相同

  通过SSIS的“查找”组件进行不同数据源之间数据的合并操作_第12张图片

   “左边”更新的操作分支属性编辑完成之后,编辑“右边”的插入分支的属性,这一步就简单了,设置好数据源与目标表即可。

   通过SSIS的“查找”组件进行不同数据源之间数据的合并操作_第13张图片

 

接下来就可以执行了,将源数据“兵分两路”,分别执行“存在则更新,不存在则插入”的操作,因为这里已经示例的是源与目标匹配到了5999行,进行更新,没有匹配的是4999行,执行插入

执行完成后,源服务器与目标服务器数据一致。

通过SSIS的“查找”组件进行不同数据源之间数据的合并操作_第14张图片

 

一边测试一遍截图,比较乱,中间还是有一些细节的。

对于类似小众化或者说是平时用的不是太频繁的工具,时间久了可能会生疏,只要多实践,多摸索,多看报错信息,还是可以使用起来提高工作效率的。

 

你可能感兴趣的:(数据库)