浅谈SSIS的增量抽取

  • ETL在BI项目中占据十分重要的位置,一般会占到整个工作量的80%,现在ETL增量方式大概有三种:同步日志,时间戳,读取时间段。首先客户大多数的业务数据库都是ORACLE,如果同步日志的话ORACLE必须开归档模式,日志是不准的。时间戳是个比较好的方法,但是你必须在客户的业务数据库里增加字段,为了加快访问速度,还必须建立索引,甲方一般都不能接受,他们不想影响他们的生产系统。SSIS的连接引擎存在好多bug,笔者在一个项目中,死活连接不上oracle 9I,当时检查了ORACLE的监听文件,什么都没有问题,还进行了从新配置,也没有连接上,最后是用DataReader数据源才行了
  • 怎么利用SSIS做增量呢,笔者介绍一种方法,大家可以在具体的项目中,灵活使用
  • 建立时间控制表、数据源表、数据目标表:

    -----------时间控制表
    create table bi_time(time datetime )

    insert bi_time
    select '2008-01-01'

    --------------数据源表
    create table bi_value (a int ,b datetime )

    insert bi_value
    select  1,'2008-01-01' union all
    select  2,'2008-03-02' union all

    select  4,'2008-01-01' union all
    select  5,'2008-03-02'

    -------------数据目标表

    create table bi_mb (a int ,b datetime )

  • 新建ssis项目,点击工具栏上的SSIS,选择变量,新建变量:命名为time,类型为datatime,在控制流拖入【执行SQL任务】,在连接类型里选择OLEDB,新建一个OLEDB连接,在SQLSOURCETYPE选择直接输入,在SQLSTATEMENT里输入:select time as a  from bi_time,在resultset里选择单行,在结果集里进行映射,详细见下图: 

浅谈SSIS的增量抽取_第1张图片

浅谈SSIS的增量抽取_第2张图片

 

  • 拖入数据流任务,双击进行进入数据流,拖入DataReader 源,进入数据流的属性,选择expressions,在属性里选择[datareader源].[sqlcommand],在表达式里输入,"select * from bi_value where b ="+ "'"+ (DT_WSTR,30)( @[用户::time] )+"'",确定,详细见下图:

 

浅谈SSIS的增量抽取_第3张图片

浅谈SSIS的增量抽取_第4张图片 浅谈SSIS的增量抽取_第5张图片

  • 然后拖入OLEDB目标,然后将执行SQL任务和数据流任务连接起来。这样我们就将BI_TIME里的值通过变量传递给数据流来得到增量数据,现在我们执行任务就ok了

 

浅谈SSIS的增量抽取_第6张图片

你可能感兴趣的:(浅谈SSIS的增量抽取)