微软 BI 系列随笔 - SSIS 2012 基础 - SSIS 基础知识

数据库 SQL Server
SSIS - SQL Server Integration Services 是用于实现企业级数据集成和数据转换解决方案的平台。 使用 Integration Services 可解决复杂的业务问题,具体表现为:复制或下载文件,发送电子邮件以响应事件,更新数据仓库,清除和挖掘数据以及管理 SQL Server 对象和数据。 这些包可以独立使用,也可以与其他包一起使用以满足复杂的业务需求。Integration Services 可以提取和转换来自多种源(如 XML 数据文件、平面文件和关系数据源)的数据,然后将这些数据加载到一个或多个目标。

   SSIS 介绍

  SSIS - SQL Server Integration Services 是用于实现企业级数据集成和数据转换解决方案的平台。 使用 Integration Services 可解决复杂的业务问题,具体表现为:复制或下载文件,发送电子邮件以响应事件,更新数据仓库,清除和挖掘数据以及管理 SQL Server 对象和数据。 这些包可以独立使用,也可以与其他包一起使用以满足复杂的业务需求。Integration Services 可以提取和转换来自多种源(如 XML 数据文件、平面文件和关系数据源)的数据,然后将这些数据加载到一个或多个目标。

  Integration Services 包含一组丰富的内置任务和转换、用于构造包的工具以及用于运行和管理包的 Integration Services 服务。 可以使用 Integration Services 图形工具来创建解决方案,而无需编写一行代码;也可以对各种 Integration Services 对象模型进行编程,通过编程方式创建包并编写自定义任务以及其他包对象的代码。

  SSIS 的基本概念

  包 - Package

  包是一个有组织的集合,其中可包括连接(Connection Managers)、控制流元素(Control Flow)、数据流元素(Data Flow)、事件处理程序(Event Handlers)、变量(Variables)、参数和配置(Parameters and Configurations). 包是可被检索、执行和保存的工作单元。包可以部署到 SSIS 服务器或者文件系统执行。

  以下关系图显示了一个简单包,其中包含一个带有数据流任务的控制流,而数据流任务中又包含数据流。

  

[[147227]]

 

  连接管理器 - Connection Managers

  SSIS提供项目级别的连接管理器和包级别的连接管理器。

  项目级别的连接管理器可以在各个包之间共享。对于使用相同配置的连接来说,只需要在项目级别配置一次,就可以在多个包之间使用了。

  包级别的连接管理器只能在包级别使用。同一个包内部的不同的任务和数据流任务之间可以共享同一个连接。在包级别的连接管理器可以看到项目级别的连接管理器。

  控制流 - Control Flow

  控制流是一个包含各种任务(Task)的容器。这些任务之间可以通过各种优先级约束(成功,失败,完成)链接以实现顺序序执行。任务之间也可以不使用任何优先级约束,这样的任务对其他的任务没有依赖或者不被别的任务依赖,他们可以平行执行。常见的任务有Execute SQL Task和Data Flow Task。

  控制流中可以使用容器(Containers)来包含和组织任务。常见的容器有For Loop容器,Foreach容器 和 Sequence容器。

  下图包含了一个顺序执行的任务和一个与之平行任务。

  

 

  数据流 - Data Flow

  数据流是以数据为导向的数据流任务(Data Flow Task)的具体实现。数据流通常包含数据源(Source)、转换(Transform)和目的地(Destination)。在一个数据流中数据从数据源采集,经过转换(矫正、分离、合并)并最终到达目的地。虽然所有的数据都是按照这个过程(依赖于设计)处理,但是整个过程中每条数据之间是并行执行的关系。比如***条数据已经在转换了,第二条数据才刚刚被采集到。

  下图说明了一个从不同的数据源采集数据并处理到不同的目的地的数据流。

  

 

  参数 - Parameters

  SSIS中参数分为项目(Project)参数和包(Package)参数。

  项目参数可用于向项目中的一个或多个包提供项目接收的任何外部输入。通常定义一些基本的数据,比如数据库连接字符串,服务器连接字符串。

  包参数可以用于给一个包提供接收的外部输入。通常定义一些包级别特定的数据,比如包处理的筛选条件,数据源所在的文件夹等。

  使用参数可以实现快速的执行和部署包或者整个项目。但是如果是要部署单个的包,则尽量避免使用参数而应该使用配置。

  下图列出了一些项目级别的参数。

  

 

  事件处理程序 - Event Handlers

  在运行时,可执行文件(包以及 Foreach 循环容器、For 循环容器、序列容器和任务宿主容器)会引发事件。 例如,错误发生时会引发 OnError 事件。 可以为这些事件创建自定义事件处理程序,以扩展包的功能并使包在运行时更容易管理。 事件处理程序可以执行诸如下列任务:

  当包或任务运行完成时清除临时数据存储。

  在包运行前检索系统信息,以便评估资源可用性。

  在引用表中的查找失败时刷新表中的数据。

  当发生错误或警告时,或者当任务失败时,发送电子邮件。

  如果事件没有事件处理程序,则将该事件提升到包中容器层次结构中的上一级容器。 如果此容器具有事件处理程序,则该事件处理程序当事件发生时运行。 如果没有,则将该事件提升到容器层次结构中的上一级容器。

  下图列出了所有可用的事件处理程序。

  

 

  变量 - Variables

  变量是在包内部使用的作为控制或者传递的信息。每个变量都有自己的作用域(Scope),父容器级别的变量可以被子容器使用,子容器级别的变量对父容器不可见。

  SSIS中的变量分为系统变量和用户变量。系统变量是系统内置的,对用户来说是只读的。用户定义变量由包开发人员定义,可以使用参数、配置信息、表达式和常量来赋值。通过设置用户变量的只读属性(ReadOnly)让变量不可修改。

  日志 - Loggin

  SSIS中通过配置包的日志,可以详细记录包以及内部任务的运行时信息。可以为包内的任何可执行文件()任务记录日志,日志的内容包括各种事件及时间的属性。可以为一个包定义多个日志类型。例如可以为同一个包指定Text Files和SQL Server级别的日志记录,一旦SQL Server出现问题,Text Files记录的日志可以很好的帮助我们诊断出错信息。使用SQL Server类型的日志记录会在数据库的系统表中创建一张sysssislog的表。该表记录了包执行的ID,任务的执行ID,起止时间及状态信息。

  包配置 - Package Configurations

  包配置在SSIS 2012之前的版本中非常重要,在SSIS 2012的版本中使用包级别部署的时候也非常有用(包配置可用于包部署模型。 对于项目部署模型,参数用于代替配置。)

  包配置具有下列优点:

  使用配置可以更轻松地将包从开发环境转移到生产环境中。 例如,配置可以更新源文件的路径,或者更改数据库或服务器的名称。

  将包部署到多台不同的服务器时,配置非常有用。 例如,用于每个已部署包的配置中的变量可以包含不同的磁盘空间,并且如果可用磁盘空间不满足此值,包将不会运行。

  配置可以使包更加灵活。 例如,配置可以更新在属性表达式中使用的变量的值。

  Integration Services 支持几种不同的存储包配置(例如 XML 文件、SQL Server 数据库中的表以及环境变量和包变量)的方法。

  每个配置都是一个属性/值对。 XML 配置文件和 SQL Server 配置类型可以包括多个配置。

  在创建用于安装包的包部署实用工具时将会包括这些配置。 在安装包时,可以在安装包的过程中更新配置。

  Integration Services 提供了直接配置和间接配置。 如果直接指定配置,Integration Services 会在配置项和包对象属性之间创建直接链接。 如果源的位置不更改,则直接配置是较好的选择。 间接配置使用环境变量。 配置不直接指定配置设置,而是指向环境变量,环境变量又包含配置值。 如果对于包的每个部署,配置的位置都可以更改,则使用间接配置是较好的选择。例如,在数据库中直接指定包级别的配置,而在环境变量中(或者XML、参数)中简介指定包级别配置所在的数据库。SSIS在执行时,首先加载环境变量(直接配置),通过直接配置找到包级别的配置信息(间接配置)并加载运行。

  包浏览器 - Package Explorer

  包浏览器包含了整个包里面的所有内容,并且以折叠数的方式展现,通过包浏览器可以快速的找到并定位包级别的任何元素(可执行文件、条件表达式、参数、事件处理程序、变量、连接管理器以及日志)。

  总结

  本文介绍了微软SSIS的基本概念,希望能够帮助初学SSIS的开发者更好的理解SSIS。

责任编辑:honglu 来源: 博客园
相关推荐

2015-08-27 14:56:36

SSIS部署项目部署包部署

2015-08-27 14:59:58

SSISParameterEnvironment

2023-08-11 15:46:40

BashIf Else 语句

2023-07-17 14:29:01

Bash算术运算

2021-11-05 15:31:01

UbuntuLinux

2009-09-23 11:07:11

Hibernate基础

2010-07-16 10:53:30

Perl基础

2009-04-17 14:22:40

XPathXML基础

2015-06-01 13:35:43

数据中心DCIM

2023-07-04 07:31:06

MapReduce数据处理编程模型

2011-09-16 10:13:02

Emacs

2009-04-10 09:35:00

WCDMA基础无线网络

2010-07-16 11:22:31

Perl

2014-08-20 10:15:45

2011-03-29 14:11:20

Cacti基础知识

2021-08-18 16:09:39

NestJS

2023-08-22 21:42:03

Bash函数

2023-08-21 12:31:41

BashForWhile

2009-12-22 14:27:28

Cisco3600

2012-02-22 10:33:36

Wi-Fi
点赞
收藏

51CTO技术栈公众号