SSIS 学习(2):数据流任务(上)【转】

摘要:
数据流任务是SSIS中的核心任务。据估计,大多数ETL包无法与数据流任务分离。数据流任务包括三种不同类型的数据流组件:源、转换和目标。它包含非常丰富的数据转换组件,如数据更新、聚合、合并、分发、排序、搜索等。可以说,基本上使用了SQL语句中的一些功能。

数据流任务是SSIS中的一个核心任务,估计大多数ETL包中,都离不开数据流任务。所以我们也从数据流任务学起。

  数据流任务包括三种不同类型的数据流组件:源、转换、目标。其中:

  源:它是指一组数据存储体,包括关系数据库的表、视图;文件(平面文件、Excel 文件、Xml 文件等);系统内存中的数据集等。

  转换:这是数据流任务的核心组件,如果说数据流任务是ETL的核心,那么数据流任务中的转换,则是ETL核心中的核心了。它包含非常丰富的数据转换组件,比如数据更新、聚合、合并、分发、排序、查找等。可以说SQL语句中有的功能,它都基本上运用起来了。

  目标:与“源”相对应,也是一组数据存储体。包含表、视图;文件;多维数据集、内存记录集等。

   除以上三类组件外,还有一种组件,那就是”流(Flow)“,它形象地显示了数据从”源“,经过”转换“,最后到达”目的“地的一组路径。我们可以利用”流“,来查看数据,添加备注说明等。

  下面一幅图,就充分展示了源、转换、目的、流的关系。

SSIS 学习(2):数据流任务(上)【转】第1张 

  下面我们以将IIS Log 导入数据库为例,来介绍如何进行数据流任务开发。

  在开发之前,我们先来看看IISlog 的结构,如图:

SSIS 学习(2):数据流任务(上)【转】第2张

  它基本上记录了网页浏览的所有信息,如日期、时间、客户IP、服务器IP、页面地址、页面参数等很多信息,我们再根据这些信息,在关系型数据库中,建立一张对应表,来记录这些信息。 

SSIS 学习(2):数据流任务(上)【转】第3张代码

  万事俱备,下面我们就可以开始ETL的开发之旅了,打开Visual Studio 2008 工具,[文件]-->[新建]-->[项目],选择“Integration Services 项目”,ETL 的开发界面就跃入眼帘,这是从事.Net 开发的朋友们非常熟悉的界面。打开左边“工具箱”,将“数据流任务”拖到主窗口“控制流面板”,如图所示:

SSIS 学习(2):数据流任务(上)【转】第4张

  

  然后双击“控制流”面板上的“数据流任务”,进入“数据流”面板,这两部分UI没有什么差异,只是所实现的功能不同罢了。真正的数据流任务开发,从现在才算开始。

  打开左边“工具箱”,可以看到有三大部分:数据流源、数据流转换、数据流目标。我们从“数据流源”中,将“平面文件源”拖到主窗口下,双击打开“平面文件源”编辑器,点击“新建”,打开平面文件连接管理编辑器,如图:
SSIS 学习(2):数据流任务(上)【转】第5张   

  输入连接名称,选择IisLog 文件,选择行分隔符、列分隔符,就可以从预览窗口看到数据的真面目了。

   这里有一点要注意,不同的平面文件,其行分隔符、列分隔符都是不一样的,如果选不正确,将达不到你想要的效果,所有的数据都可能挤到一列中去了。一般行 分隔比较简单,基本上都是以回车换行({CR}{LF})来分隔;列分隔符却不一样了,它既可以以任意文本字符来分隔,比如逗号(,)、分号(;)、冒号 (:)tab符、竖线(|),以及常用的文字字符、数字字符,也可以定义每一列的固定宽度来分隔。这就需要视文件源不一样,分别对待了。

  在平面文件连接管理器中,选择“高级”,还可以定义每一列的列名、数据类型、字符长度等信息。 等一切定义完成,点击确定,返回到平面文件编辑器界面,前面建立的连接将自动返回到“平面文件连接管理器”的下拉列表框中,下面就要以选择需要输出的列了,如图:

SSIS 学习(2):数据流任务(上)【转】第6张   

    然后再选择“错误输出”,缺省选项如下图所示:

SSIS 学习(2):数据流任务(上)【转】第7张

      这一选项非常重要,是要求我们配置当源数据发生错误的时候该如何处理,一般源数据发生错误有两种情况:一是数据类型错误,比如日期格式错误、数字变字符了等;另一情况就是字符太长,超出列宽了。根据不同的情况,其处理方式也不一样,系统提供了三种解决办法:

  忽略失败:是指如果某一行数据错误,忽略此行,不影响程序执行,继续导入其它数据。

  重定向行:将错误的数据行,导入到另外一个数据流目标,供以后人工检查后,再重新处理。

  组件失败:这是最严格的,只要遇到数据错误,组件立即失败,停止运行。

  就IISLOg 这样的数据源文件来说,有错误数据行,那是是经常发生,但是这些少量数据错误,也不会影响最终的结果,我们就要以考虑容错性为主了,放宽对数据质量的要求,一般选择“忽略错误”,以方便程序继续运行。

     一切都定义完后,我们看到“平面文件源”控件上,还有一个红色的叉(X),那是指没有为此数据源定义目标,那就是下一步要定义的。另外下面还有两个长线箭头,一个绿色,一外红色,其中绿色:表示正确数据流通路,红色表示错误数据流通路,如果前面定义错误“重定向行”,那么错误数据将沿着红色路径,流向错误数据存放地。

   定义数据源目标,这可能要简单一些了,同理从左边"工具箱"中,看到有很多种类型的数据源目标,我们选择“OLE DB 目标”,将“平面文件源”控件 下的绿色箭头连接到“OLE DB 目标”,然后双击,打开“OLE DB 目标编辑器”窗口,“新建”数据库连接,如图:

 SSIS 学习(2):数据流任务(上)【转】第8张

返回到“OLE DB 目标编辑器”窗口,在数据访问模式下,选择“表或者视图--快速加载”一项,然后再选择对应的表,如图:

SSIS 学习(2):数据流任务(上)【转】第9张

下面配置列映射,如图:

SSIS 学习(2):数据流任务(上)【转】第10张

如果没有的列,直接忽略即可(前提是表中该列允许为空),后面仍然是配置错误处理方式,参照平面文件源错误处理方式即可。

  到此为止,一个简单的数据流任务就基本上完成了,点击运行,我们期待已久的结果出现了。

 SSIS 学习(2):数据流任务(上)【转】第11张

 当然,在实际开发过程中,可能并没有这么顺利,会遇到很多各种各样的问题,在这篇文章中我们很少提及,主要是因为这仅是个开始,没有涉及到这么深入,在以后的专题中,会逐渐讲解。

   一个简单的数据源任务就算完成了,其实这只是一个Demo ,让大家了解了一个概况,可以说万里长城只是走出了第一步,真正的ETL不会这么简单。下后面我们将介绍ETL最精彩的部分“数据流转换”,敬请期待。

/***********************************************************************************************
 *【Author】:游子吟
 *【Date】:2013年07月02日
 *【URL】:http://www.cnblogs.com/invinboy/archive/2009/12/16/1619809.html
 *【Notice】:
 *1、本文为原创技术文章,首发博客园个人站点。
 *2、转载和引用请注明作者及出处。
 *3、本文必须全文转载和引用,任何组织和个人未授权不能修改任何内容,并且未授权不可用于商业。
 *4、本声明为文章一部分,转载和引用必须包括在原文中。
 ***********************************************************************************************/

免责声明:文章转载自《SSIS 学习(2):数据流任务(上)【转】》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇1、AJAX里面status的值代表什么 2、get post 的区别 3、怎样把对象转化成字符串 4、闭包、继承、原型、原型链 5 、http传输协议 6、arguments是什么替换"marquee",实现无缝滚动下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Pandas学习(4、数据载入、存储及文件格式

importpandas as pd importnumpy as np '''4.1 文本格式数据的读写''' '''表:Pandas的解析函数 函数 描述 read_csv 从文件、URL或文件型对象读取分隔好的数据,逗号是默认分隔符 read_table 从文件、URL或文件型对象读取分隔好的数据,...

转 jeecg3.5中多数据源的配置

  官方微信有介绍通过web界面配置的方法:浅谈jeecg多数据源的使用,没试过不知道能不能用。 如果要手工配置也是可以的 在spring-mvc-hibernate.xml这个配置文件中增加一个数据源,如: <!-- 配置数据源-测试 --> <bean name="dataSource_test" class="com.aliba...

数据库SQL优化大总结之 百万级数据库优化方案(转)

转载来源:http://www.cnblogs.com/yunfeifei/p/3850440.html#3571275 今天无意中看到的这篇文章,觉得对自己非常有帮助。凡是写代码的人,一般都要接触数据库,虽然不见得会接触到百万级的数据库,但了解一下总归是有好处的。 写到自己的博客也是为了加深印象,另外以后如果真的需要了也方便查看。 1、对查询进行优化,要...

查看SQL-SERVER数据库及各个表的数据量及占用空间大小

1、查看某个数据库,直接执行存储过程sp_spaceused即可 exec sp_spaceused; 2、查看某个表,在存储过程后面加上表名即可 EXEC sp_spaceused '表名'; 3、查看该数据库中的所有表,可以写一个存储过程,然后执行即可 存储过程如下: -- =====================================...

JAVA连接数据库

运行如下Java程序,学会JAVA连接数据库的方法。。 import java.sql.*; public class Test { public static void main(String[] srg) { String driverName = "com.microsoft.sqlserver.jdbc.SQLServerDriver"; //加载...

RabbitMQ、Kafka、RocketMQ的优劣势

今天我们一起来探讨:  全量的消息队列究竟有哪些?  Kafka、RocketMQ、RabbitMQ的优劣势比较  以及消息队列的选型 最全MQ消息队列有哪些 那么目前在业界有哪些比较知名的消息引擎呢?如下图所示 这里面几乎完全列举了当下比较知名的消息引擎,包括:  ZeroMQ  推特的Distributedlog  ActiveMQ:Apach...