ETL学习笔记之三:MS SQL DTS-阿里云开发者社区

开发者社区> 数据库> 正文
登录阅读全文

ETL学习笔记之三:MS SQL DTS

简介:

   对于MS SQL-Server的DTS,在使用MS SQL-Server2000时,有最基本的接触,但仅限时简单的数据导入/导出。当开始了解ETL时,才发现DTS原来就是ETL的应用之一。
    先不谈论DTS的好坏,但它至少MS产品的特点,易学,易用。所以,要了解ETL的应用,从DTS开始,在我看来,是个不错的选择。我只是学习,所以我没有能耐去评价它,下面,只能讲DTS的功能一一列举出来,可能这些与SQL-Server的联机帮助有些重复,但对我来说,是一个加深记忆的方法。

    一:概念 
    自完全不同源的数据析取、转换并合并到单个或多个目的。主要应用于企业数据仓库的数据抽取过程,完成从源数据库/文件到数据仓库的抽取和转换过程。 
    看看,这不就是ETL要做的事儿。

    二:特征 
    2.1:基于OLE DB,很方便从不同的数据源复制和转换数据。 
    是了,MS总是首要支持自已的其它产品,所以,它选择了最通用的Windows的标准。
    2.2:有图形化设计器,也可通过编程二次开发。 
    这也是MS的长项,并且能把其它的东西一股脑儿的集成进来。
    2.3:执行效率高于普通ADO(SQL)操作
    据说是这样地,我做过简单的比较,确实不是一个数量级,原理呢?估计可能有较多特殊处理,比如批量插入bcp,传输前的数据压缩等技术……,当然,这只是我的猜测。 
    2.4:可调度。 
    这对于Windows系统,那很容易了,可以利用现成的系统级调度。

    三:详细 
    来说点详细的东东,当然,这里的详细并不指全部,实际上,我也只能挑出比较有代表性的功能点列举一下,要是全部,那还不如抄袭联机帮助了。

    3.1:包——最小的可调度单元 
    包是基本任务,由工作流连接而成。包可以嵌套(包中的单个任务可以是执行另一个已存在的包)。 
    包是调度的直接管理对象,嵌套包保证包任务的重用。 

    3.2:任务——最小的工作流连接单元 
    分为以下几种任务: 
    导出和导入数据任务、转换任务、复制数据库对象、邮件/消息发送、Transact-SQL 语句或 Microsoft ActiveX® 脚本执行包、采用COM自定义任务。
    其中,最常用的应该是普通转换任务。这等同于ETL中的T。

    3.3: 数据连接——定义数据源和目的地 
    分为以下几种: 
     标准数据库(如 Microsoft SQL Server 2000、Microsoft Access 2000、Oracle、dBase、Paradox);与 ODBC 数据源的 OLE DB 连接;Microsoft Excel 2000 电子表格数据;HTML 源;以及其它 OLE DB 提供程序 
文件连接数据链接连接(比较特殊) 
    注意:SQL-Server作为Windows应用产品,DTS自然也不支持Java。
    对于标准数据库是最基本的应用,易于实现。文件连接涉及格式定义,还不算复杂。 

    3.4:转换——数据转换
    数据转换,指列进行,有多种方式: 
    3.4.1:简单复制方式。 
    3.4.2:简单转换(如,数据格式化,取字符串子串等……) 
    3.4.3:ActiveX脚本(实际上是vbScript和JavaScript) 
    3.4.4:调用自定的COM对象进行转换。 
    通常会采用一二方式。如果要将DTS集成到你的应用中,可以第三种方式。 

    3.5:工作流 
    工作流包括成功,失败,完成。工作流支持脚本控制。可编程控制。 
    工作流方式对于纯数据抽取意义不大,但是考虑到任务包含收发邮件,信息,上/下传文件,那就有必要了。当然,你也可以将这些任务单独提出到应用端执行,而不采用DTS中的任务。 

    3.6:元数据 
    元数据方式更多的留备扩展,最基础的应用是用来预定义数据表。

    3.7:数据驱动的查询任务——(一种特珠的转换方式)
    一种很特殊的转换方式,支持参数。这里,单独把它提出来,因为它不是那么容易理解,我花了一些时间,才将其弄明白。
    3.7.1:根据源数据的特征决定之后的查询方式(指增,删,改,查询操作)。 
    3.7.2:支持参数,参数通过定义绑定表来关联,通过定义转换脚本,可以计算出绑定列参数。 
    3.7.3:转换时可以定义批量处理。 
    3.7.4:转换支持多阶段抽取,可以定义阶段代码,阶段分为:行转换,转换失败,插入成功,插入失败,批处理完成,抽取完成。 
    此种应用异常复杂,应属高级应用。简单的看,当转换任务需要根据数据源来确定动作,这是非常有用的。比如你的应用存在多表存储,就可能根据表内的时间来确定之后的动作,达到数据分多表存储的目的。 

    3.8: 查找查询
    作为转换数据任务和数据驱动的查询任务的一种功能。 
    查找查询使您得以对源和目的之外的其它连接运行查询和存储过程。例如,通过使用查找查询,可以在查询过程中进行单独的连接,并在目的表中包括来自连接的数据。 
    作为一种扩充功能,实现更复杂的查询操作。

    3.9: 多任务支持事务处理 
    除了顺序执行,可以进行并行执行步骤,且支持检查点回滚。 
    当然,任务的事务仍然依赖于数据源所在所据库是否支持事务。一般情况下,顺序执行已经可以满足抽取需求。

    好了,不管对错,还是说说我的看法:
    首先:DTS中抽取流程定义比较清晰,数据转换功能丰富,可视的设计工具强大,有一定的可扩展性(COM定制,脚本支持)。
    但是:但学习下来,隐隐约约觉得它有MS产品的通病,就是大而全,如果进行小型应用的集成,它是很方便和够用的,但如果要在大型项目中集成DTS,它提供的二次开发方式,就显得有些散乱,缺少一个总体的框架指导。当然,这可能与它的定位有关。
    对了,我看的SQL-Sever2000的DTS,对于2005,我不知有哪些方面的改进。


本文出自seven的测试人生公众号最新内容请见作者的GitHub页:http://qaseven.github.io/

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享: