SSIS是
Microsoft SQL Server Integration Services的简称,是生成高性能
数据集成解决方案(包括
数据仓库的提取、转换和加载 (
ETL) 包)的平台。
构成
Integration Services 包括用于生成和调试包的图形工具和向导;用于执行工作流函数(如
FTP 操作)、执行 SQL 语句或发送电子邮件的任务;用于提取和加载数据的
数据源和目标;用于清理、聚合、合并和复制数据的转换;用于管理 Integration Services 的
管理服务 Integration Services 服务;以及用于对 Integration Services
对象模型编程的
应用程序编程接口 (API)。
发展
SSIS代替了以前版本的
数据转换服务(
DTS)。而DTS出身卑微,起初所用的资金极少、资源也不多,它最初通过POC(proof-of-concept)转换体现出来,后来就被人们叫做Data Pump。POC引起了一些
微软人的兴趣,从这时才开始投入一部分资金。
SQL Server 7.0为一些需要的用户加载了第一个DTS版本。那个时候它很难操作,而且还很贵。一些DBA不得不写自定义转换软件,他们所写的这些自定义转换软件不灵活、而且还很难维护。一些工具还有局限性,如需要源和目标进程精确匹配、直接在单独数据库产品上决定,并且/或者转换性能。有些DBA还写了自定义分析和转换应用。例如有些公司只对标转平台用手工编写的
平面文件分析程序、SQL脚本和转换代码,如SSIS。
SQL Server 8.0增加了更多的任务、从而增加了更多的功能。在SQL Server 8.0中还包括Execute Package、FTP、MSMQ Tasks。但是用户在用DTS处理大数据集和基于脚本工具的内在局限时也遇到了一些挫折。那时正是创建真正的企业继承工具的时候。
特色
可视化环境
熟悉了SSIS的可视化操作后,给你的感觉应该是震撼的,因为几乎你所能想得到的ETL操作都能通过简单拖拽控件加以实现。
主要得益于SSIS强大Control Flow Function以及那个灵活多样并且高效的DataFlow Task (BulkInsertTask和Execute SQL Task等可以看成特殊的DataFlowTask)。Control Flow主要负责高层的
逻辑拓扑,完成对各个DataFlowTask单元的串接,而DataFlowTask除了提供简单的SQL语句的执行,两个节点之间的
数据传输外,还提供了Aggregation、DataConversion,Merge、Sort等操作,实现了面向多个源和目的端的复杂数据流的整合。另外值得一提的是,SSIS同时也提供For/Foreach Loop Container来完成类似for语句的循环操作。
强大的参数设置功能
SSIS的另一个特色是的参数设置功能,这一点比DTS有了明显的进步。连接参数,源与目的关联的表名或者SQL语句的条件
子句,都可以通过参数来构建,甚至参数本身可以由其他参数动态赋值(通过Expression功能),这就给用户提供了非常广阔界面编程的空间,充分发挥你的想象力,就能够在可视化界面上实现复杂逻辑功能的ETL操作。
SSIS强大的参数设置功能在一定程度上简化了SSIS的Package(Package:SSIS基本的可执行单位)程序调用。
功能
SQL Server Integration Services (SSIS) 提供一系列支持业务
应用程序开发的内置任务、容器、转换和
数据适配器。您无需编写一行代码,就可以创建 SSIS 解决方案来使用 ETL 和商业智能解决复杂的业务问题,管理 SQL Server 数据库以及在 SQL Server 实例之间复制 SQL Server 对象。
功能扩展
SQL Server整合服务(SSIS)是微软在
SQL Server 2005中引入的数据转换服务(DTS)的替代物,它加载了大量不同的组件来导入数据和将数据转换为实际数据,而不仅仅是被动地导入。但是,这里有一个问题,即使是新的SSIS工具也无法包括所有我们需要做的工作。
微软提供了两个基本的方法来扩展SSIS的功能。其中一个方法是相对简单的,适用于没有很多的编程经验,也不想要编写复杂逻辑的用户;而另一个方法是较复杂的,它允许更有经验的程序员深入研究SSIS和更广泛的扩展SSIS。
简单方法:脚本
大多数人可能或多或少地熟悉
脚本技术,并且SSIS使用
VB.NET来允许程序员在SSIS包中用
脚本编写行为。与自定义对象相反,脚本的范围是小而精的;它是用于我们对现有
数据包允许或者已经实现的
上下文进行一定修改的。
在SSIS数据包中,有两个元素我们可以用来添加脚本处理:Script Task(在Integration Services Designer应用的Control Flow窗口)以及Script Component(在Data Flow窗口)。每一个都最好在稍微有点不同的环境中使用。
Script Task是更适合用于
软件包中通用目的的Flow Control——它比Script Component更全局化更强大,但是也复杂得多。它在软件包的Data Flow之外运行,并且不受Data Flow工作方式的限制,虽然Script Task一般只当一个软件包被触发的时候才运行(虽然我们可以特别地编译)。Task同样支持
断点和调试,当我们编写一个带有
控制逻辑或者执行某些决策的相当复杂的脚本时,这些是非常有用的。例如,Script Task可以查询
Active Directory获取一些信息或者与另外一个数据
知识库进行数据交互——两者都可以在运行一个包之前进行。
Script Component与Data Flow运作的方式结合得更紧密。Script Component不是在整个包运行一次,它的主要过程是为每个正在处理的数据行运行一次。Script Components也同样有3个基本的运行上下文:数据源、数据转换或者数据目的地。Component也同样比较少交互——比如,它并不支持Script Task那样的调试。Script Component的最主要用途包括诸如一行行地数据转换、编译一个自定义ODBC目标、实时
错误处理或者不通过原SSIS方法处理的转换操作。
高级方法:自定义对象编程
虽然脚本在SSIS包中的功能已经强大,但是,有时候它还是没有办法完成某些任务。在某些情况下,我们必须从头开始编写(或者让某人编写)一个自定义SSIS扩展。这并不是一件容易的事情;它要求对编程有全面的理解。但是,通过自定义的对象,我们可以使用SSIS进行远比简单自动化任务复杂的事情。
比如,如果我们有一个不能支持任何现有SSIS转换的数据源(例如,有些奇怪的专有数据源),那么我们可以写入一个自定义的连接管理对象来像使用本地数据源一样使用该数据。与此类似的是,我们可以用由SSIS提供的相同的
程序库来创建自定义任务、日志组件或者
数据流组件。
上面每个类型的项目都是可以作为SSIS所支持语言的一个基类、属性和方法集:
Visual Basic、C#、C++、J#和
Jscript. C++、C# 和
VB都倾向于创造最好的结果,因为在这些上下文中它们都倾向于由开发人员和供应商两者同时广泛支持。关键在于我们所使用的语言不能是一个阻碍;它们都可以插入相同的对外
编程接口中。我们同时也可以在需要的时候通过标准Windows形式创建自定义对象的
用户接口。
SSIS自定义对象可以创建的一个极其强大的自定义Foreach遍历器。假设你需要创建一套编程类来为一个集合中每个对象执行特定的操作,比如数据库中的表。如果你想在大量的上下文中执行这个操作而不重复编写代码,那么这是其中的一个最佳方法。特别是当你已经对一些新的数据类型创建了一个自定义的
连接管理器(与上面的例子一样),并且想创建一个自定义
foreach操作来处理时,这种方法是非常有用的。
典型用途
下列情况说明了 SSIS 包的典型用途。
数据通常存储在很多个不同的数据
存储系统中,从所有源中提取数据并将其合并到单个一致的数据集中确实有一定的难度。这种情况的出现有多个原因。例如:
许多单位要对存储在早期数据存储系统中的信息进行归档。这些数据在日常操作中可能不重要,但对于需要收集过去很长一段时间内的数据的
趋势分析来说很重要。
单位的各个部门可能会使用不同的
数据存储技术来存储操作数据。包可能需要先从
电子表格以及
关系数据库中提取数据,然后才能
合并数据。
数据可能存储在对相同数据使用不同架构的数据库中。包可能需要先更改列的
数据类型或将多个列的数据组合到一列中,然后才能合并数据。
Integration Services 可以连接到各种各样的数据源,包括单个包中的多个源。包可以使用
.NET 和
OLE DB 访问接口连接到关系数据库,还可以使用 ODBC
驱动程序连接到多个早期数据库。包还可以连接到
平面文件、
Excel 文件和 Analysis Services 项目。
Integration Services 包含一些源组件,这些组件负责从包所连接的
数据源中的平面文件、Excel
电子表格、XML 文档和关系数据库中的表及视图提取数据。
然后,通常要用 Integration Services 包含的转换功能对数据进行转换。数据转换为兼容格式后,就可以将其物理合并到一个数据集中。
数据在合并成功且应用转换后,通常会被加载到一个或多个目标。Integration Services 包含将数据加载到
平面文件、原始文件和关系数据库时所用的目标。数据也可以加载到内存中的记录集中,供其他包元素访问。
数据仓库和数据集市中的数据通常会频繁更新,因此数据加载量通常会很大。
Integration Services 包含一个可直接将数据从
平面文件大容量加载到 SQL Server 表和视图中的任务,还包含一个目标组件,该组件可以在数据
转换过程的最后一步将数据大容量加载到 SQL Server 数据库中。
SSIS 包可配置为可重新启动。这意味着可以从某个预先确定的
检查点(包中的某个任务或容器)重新运行包。重新启动包这一功能可节省很多时间,尤其是包需要处理来自一大批源的数据时。
可以用 SSIS 包加载
数据库中的
维度表和事实
数据表。如果维度表的源数据存储在多个
数据源中,包可以将该
数据合并到一个数据集中,并在单个进程中加载维度表,而不是为每个数据源使用单独的进程。
更新
数据仓库和数据集市中的数据可能很复杂,因为这两种类型的数据存储区通常都包含可能难以通过数据转换
过程管理的渐变维度。由于能够动态创建用于插入和更新记录、更新相关记录以及向表添加新列的 SQL 语句,因此,渐变维度向导可自动支持渐变维度。
此外,Integration Services 包中的任务和转换可以处理 Analysis Services 多维
数据集和维度。包更新了建立多维数据集所基于的数据库中的表后,您可以使用 Integration Services 任务和转换来自动处理多维数据集和维度。自动处理多维数据集和维度有助于使以下两种环境中的用户始终获得最新的数据:访问多维数据集和维度中信息的用户和访问关系数据库
中数据的用户。
Integration Services 还可以在数据加载到其目标之前计算函数。如果
数据仓库和数据集市存储了聚合信息,那么 SSIS 包可以计算 SUM、AVERAGE 和 COUNT 之类的函数。SSIS 转换还可以
透视关系数据,并将其转换为不太规范的格式,以便更好地与数据仓库中的表结构相兼容。
无论数据是加载到
联机事务处理 (OLTP)、联机分析处理 (OLAP) 数据库、Excel
电子表格还是加载到文件,都需要在加载前将数据进行清理和标准化。数据可能由于下列原因而需要更新:
数据由一个单位的多个部门提供,每个部门使用不同的约定和标准。可能需要对数据进行不同的格式处理,然后才能使用这些数据。例如,可能需要将名和姓组合到一列中。
数据是租用或购买的。可能需要将数据进行标准化和清理以满足业务标准,然后才能使用这些数据。例如,单位需要验证所有记录使用了相同的状态缩写集或相同的
产品名称集。
数据是
区域设置特定的。例如,数据可能使用不同的日期/时间和数值格式。如果要合并来自不同区域设置的数据,那么在加载数据前必须先将其转换到同一区域设置以避免数据损坏。
Integration Services 包含一些内置转换,可将其添加到包中以清理数据和将数据标准化、更改数据的大小写、将数据转换为不同类型或格式或者根据
表达式创建新列值。例如,包可将姓列和名列连接成单个全名列,然后将字符更改为大写。
Integration Services 包还可以使用
精确查找或模糊查找来找到引用表中的值,通过将列中的值替换为引用表中的值来清理数据。通常,包首先使用精确查找,如果该查找方式失败,再使用模糊查找。例如,包首先尝试通过使用产品的
主键值来查找引用表中的产品名。如果此搜索无法找到产品名,包再尝试使用产品名模糊匹配方式进行搜索。
另一种转换通过将数据集中相似的值分组到一起来清理数据。有些记录可能是重复的,所以不应未经进一步计算就将其插入到数据库中。这种转换对识别此类记录很有用。例如,通过比较客户记录中的地址可以识别许多重复的客户。
数据转换过程需要内置逻辑来
动态响应其访问和处理的数据。
可能需要根据数据值对数据进行汇总、转换和分发。根据对列值的评估,该过程甚至可能需要拒绝数据。
若要满足此需求,SSIS 包中的逻辑可能需要执行以下类型的任务:
计算数据并应用数据转换。
根据数据值将一个数据集拆分为多个数据集。
将不同的聚合应用到一个数据集的不同子集。
将数据的子集加载到不同目标或多个目标。
Integration Services 提供了用于将商业智能置入 SSIS 包的容器、任务和转换。
容器通过枚举文件或对象和计算
表达式来支持
重复运行工作流。包可以计算数据并根据结果重复运行工作流。例如,如果日期在当月,则包执行某一组任务;如果不在,则包执行另一组任务。
使用
输入参数的任务也可以将商业智能置入包中。例如,输入参数的值可以筛选任务检索的数据。
转换可以计算表达式,然后根据结果将数据集中的行发送到不同的目标。
数据划分完成后,包可以对数据集的每个子集应用不同的转换。例如,表达式可以计算日期列,添加相应期间的销售数据,然后仅存储摘要信息。
还可以将一个数据集发送到多个目标,然后对此相同数据应用不同的转换集。例如,一组转换可以汇总此数据,而另一组转换通过查找引用表中的值并添加其他源的数据来扩展此数据。
管理员经常希望将管理功能自动化,例如备份和还原数据库、复制 SQL Server 数据库及其包含的对象、复制 SQL Server 对象和加载数据。Integration Services 包可以执行这些功能。
Integration Services 包含专为以下目的设计的任务:复制 SQL Server 数据库对象,例如表、视图和
存储过程;复制 SQL Server 对象,例如数据库、登录和统计信息;使用 Transact-SQL 语句添加、更改和删除 SQL Server 对象和数据。
OLTP 或 OLAP
数据库环境的管理通常包括数据的加载。Integration Services 包含几个使数据大容量加载更加便利的任务。可以使用某个任务将
文本文件中的数据直接加载到 SQL Server 表和视图中,还可以在对
列数据应用转换后使用目标组件将数据加载到 SQL Server 表和视图。
Integration Services 包可运行其他的包。包含多个管理功能的数据转换解决方案可分为多个包,使管理和重用包更为容易。
如果需要在不同的服务器上执行相同的管理功能,可以使用包。包可以使用循环对服务器进行枚举并在多台计算机上执行相同的功能。为了支持 SQL Server 的管理,Integration Services 提供了可以遍历 SQL
管理对象 (
SMO) 的对象的枚举器。例如,包可使用 SMO 枚举器对某个 SQL Server 安装中的 Jobs 集合中的每个作业执行相同的管理功能。
另外,还可以使用 SQL Server 代理作业来安排 SSIS 包