SSIS入门与进阶

SSIS是从MS SQL 2005开始引入的,实际上是DTS的马甲,是SQL Server Integration Service的缩写。DTS也好,SSIS也罢,都是ETL(Extract Transform Load)工具,一般用来导入数据到数据库。SSIS比普通的ETL更进一步,它是可视化的,用Visual Studio来开发,包文件(*.dtsx)采用的是XML格式。跟Office2007+系列文档扩展名一样,都是???x,代表xml格式,但他没有压缩成zip文件罢了。

首先使用SSIS创建一个简单的Integration Services Project: File->New->Project->Business Intellegence Projects->Integration Services Project

(新建项目1)

(新建项目2)

添加一个Foreach Loop Container

, 双击这个Foreach Loop Container,点击左边的Collection,选择来源文件目录(Folder),输入文件类型(Files)。

点击Variable Mappings,点击New Variable,在Name输入变量名称。这个变量是目录循环中每个文件的值,稍后会用在每个文件的处理中。

再在里面添加一个Data Flow Task

,双击这个Data Flow Task,进入了Data Flow标签(Control Flow右边)。因为原始文件是从测量表读取出来然后写到CSV文件的,所以我们使用Flat File Source(就是文本文件,CSV文件也属于这类)。

双击Flat File Source,Flat File connection manager,点右边的New新建一个文本文件连接,给连接一个名字,选择一个例子文件,按照你的情况输入header rows to skip(跳过头列),如果第一列是列名称,你应该输入1。

点击Advanced(高级),给每列选择正确的数据类型,确定。

点击Columns(列),给每列起个名字。

在我们的数据中,都是基本的设备、日期、温度、湿度、气压等等。但某些记录是错误的(譬如没有日期),这些记录就要忽略,日期是细分为:年、月、日、小时、分钟的,必须合并,还有温度、湿度某些情况是没有的,你就要处理为NULL。

对于错误的记录(日期为空),我们要添加一个Conditional Split,在Condition(条件)中输入 “LEN(TRIM(Year)) > 0”(只需要判断年是否为空)。

关于表达式,需要特别说明一下:你可以选作左边的变量或者列,或者右边的各种内置函数。你只需要直接拖放变量、列或者函数到输入框便可。

对于完整的日期,我们需要添加一个Derived Column(派生列),从Conditional Split拖放关系,要求你选择跳转到指定流程的条件。

双击该派生列,在Expression(表达式)中输入“Year + "-" + Month + "- " + Day + " " + Hour + ":" + Minute + ":00"”(构造标准的日期格式,如:2010-06-29 16:11),日期类型选database timestamp(根据你自己的实际情况吧)。

对于NULL数值类型,你也需要添加一个派生列,然后在表达式中输入LEN(TRIM(Temperature)) > 0 ? (DT_R8)Temperature : NULL(DT_R8)。这里用DT_R8是因为温度是double。

然后添加一个导入目标,我们的目的是把数据导入到MS SQL Server,所以添加一个SQL Server Destination,双击进入编辑

点击New新建一个数据库连接。

点击Mapping(映射),把CSV文件的列对应到数据库表

接下来就是运行了,如果你正确设置,数据自然会导入到数据库。

这里需要注意,SSIS的设计有颇多的bug,譬如下面提及的脚本编译问题,还有在设计器中,不能通过编辑目标数据来直接编辑连接,你要双击下方的控件列表。另外,当你编辑连接,你会发现之前选择的例子文件会丢失,每次你都必须重新选择。

如果要发布到SQL Server,你要修改SSIS的项目属性:Project->(your project name) Properties->Deployment Utility->CreateDeploymentUtility->True。然后双击bin\Deployment下面的Deployment文件,按照提示一步步Next便可(建议安装到MS SQL Server,而不是文件系统)。如果要查看已经安装的,打开SQl Server Management Studio,选择Integration Services,打开。

在开发SSIS的过程中,你可能会遇到一些诡异的情况。譬如: 1.类型转换,你在Prorgress(进度)标签中可以查看详细的结果,但往往结果都比较含糊。一般都是类型没有选对,譬如SSIS会自动选回字符串类型,你又要手工改回database timestamp 2.目标数据库中的数据表字段变化了,或者来源文件格式变了,你运行,肯定错误,但在Progress(进度)中,你难以看出个门道。一般看见设计图中的出现警告或者错误小图标,你鼠标挪上去停一下,就会给个模糊的提示,双击,会提示你修正。

一些特别情况: 1.内置的控件无法满足需要,怎么办?自己写控件:陈希章同学写的为SSIS编写自定义任务项(Task)之入门篇 。这里还有另外一个例子:执行SQL Job并等待其结束

2.需要复杂的处理:在Control Flow中用Script Task,在Data Flow中用Script Component;

关于脚本:添加一个Script Task,双击,点击Script(脚本),如果你是SQL 2005 SP1或以下,你就必须选PrecompileScriptIntoBinaryCode,否则你将无法正确运行。或者你给2005安装SP2;

3.你需要让SSIS执行并尽量等待你去做其他事情(矛盾啊。。。),你可以添加一个Script Task,输入System.Threading.Thread.Sleep(想多长就多长);

关于变量:你需要注意变量的作用域。一般的作用域是Package(包)。在脚本中,如果你想访问变量,你就必须在ReadOnlyVariables(只读变量)和ReadWriteVariables(可读写变量)中输入变量名称(多个变量用逗号分隔)。然后在编辑脚本代码中,使用Dts.Variables("YourVariableName")来访问变量。

关于邮件发送,如果使用内置的Send Mail Task,你会发现无法指定登陆用户名和密码。我改用脚本调用sourceforge上opensmtp,或者,你可以使用MS SQL Server自带的邮件功能,然后用SQL Excute Task执行,譬如:

exec msdb.dbo.sp_send_dbmail @profile_name = ‘Foo‘,     @recipients = ‘FooReceiver‘,     @subject = ‘FooSubject‘,     @body = ‘FooBody‘     @body_format = ‘Text‘

时间: 2024-11-08 16:25:53

SSIS入门与进阶的相关文章

iptables入门到进阶

Iptables入门到进阶 一.前言 Firewall(防火墙): 隔离工具:Packets Filter Firewall(包过滤防火墙):工作于主机或网络的边缘,对经由的报文根据预先定义的规则(匹配条件)进行检测,对于能够被规则匹配到的报文实行某预定义的处理机制的一套组件: 防火墙类型 从防火墙的实现形式来分的话,防火墙可以分为软件防火墙和硬件防火墙 硬件防火墙:在硬件级别实现部分功能的防火墙:另一个部分功能基于软件实现: 软件防火墙:应用软件处理逻辑运行于通用硬件平台之上的防火墙: 从防火

Wireshark入门与进阶---数据包捕获与保存的最基本流程

Wireshark入门与进阶系列(一) 本文由CSDN-蚍蜉撼青松 [主页:http://blog.csdn.net/howeverpf]原创,转载请注明出处! 你在百度上输入关键字"Wireshark.使用.教程",可以找到一大堆相关的资料.那么问题来了, 为什么我还要写这个系列的文章? 前面你能搜到的那些资料,大部分可能存在两个小问题: 网上大部分资料引自(or译自)Wireshark官方的用户手册,或使用类似于用户手册的写法,它们很详细的告诉你Wireshark有哪些窗口.菜单.

System.Web.Routing入门及进阶 下篇

上面介绍的是最简单的一种定义方式.当然我们可以建立更复杂的规则.其中就包括设定规则的默认值以及设定规则的正则表达式. UrlRouting高级应用 预计效果: Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/ -->当我访问/a/b.aspx时就会转到Default.aspx?category=a&action=b在页面上显示category:aac

System.Web.Routing入门及进阶 上篇

System.Web.Routing已经作为一个程序集包含在.net3.5sp1中发布了.虽然我们并没有在3.5sp1中发现Asp.net Mvc的踪迹,但是亦以感觉到它离我们不远了. System.Web.Routing用于在Asp.net的Web应用程序中进行URLRouting. 所谓UrlRouting就是将一个地址映射为另一个地址,比如我访问/chsword/2008/08/27.html其实是访问了/chsword/article.aspx?y=2008&m=08&d=27这个

SQL Server AlwaysON从入门到进阶(1)——何为AlwaysON?

本文属于SQL Server AlwaysON从入门到进阶系列文章 本文原文出自Stairway to AlwaysOn系列文章.根据工作需要在学习过程中顺带翻译以供参考.系列文章包含: SQL Server AlwaysON从入门到进阶(1)--何为AlwaysON? SQL Server AlwaysON从入门到进阶(2)--存储 SQL Server AlwaysON从入门到进阶(3)--基础架构 SQL Server AlwaysON从入门到进阶(4)--分析和部署Windows Ser

WPF 从入门到进阶资料

Tutorials on WPF A Guided Tour of WPF by Josh Smith I wrote a series of introductory WPF articles on The Code Project.  The goal of those articles is to bring someone with no WPF experience up-to-speed enough so that (s)he can fully understand how th

SQL Server AlwaysON从入门到进阶(2)——存储

本文属于SQL Server AlwaysON从入门到进阶系列文章 前言: 本节讲解关于SQL Server 存储方面的内容,相对于其他小节而言这节比较短.本节会提供一些关于使用群集或者非群集系统过程中对存储的利用建议.当然,重点还是集中在对于一个标准的AlwaysOn可用组配置过程中,对存储的选择和配置上面. AlwaysOn的部署首先建立在一个Windows Server Failover Cluster(WSFC)上.并且每个服务器通常有一个独立的SQL Server实例.另外,每个服务器

服务端工程师入门与进阶 Java 版

前言 欢迎加入我们.这是一份针对实习生/毕业生的服务端开发入门与进阶指南.遇到问题及时问你的 mentor 或者直接问我. 建议: 尽量用google查找技术资料. 有问题在stackoverflow找找,大部分都已经有人回答. 多看官方的技术文档. ibm developerworkers的文章质量整体上有保障. 平时花一些时间在github上阅读优秀项目源码. 入门(1-2 个月) 目标:参与简单的项目开发. 技能: 掌握 Java.经典的<Java 核心技术:卷1 基础知识>(或者<

SQL Server 扩展事件(Extented Events)从入门到进阶(4)——扩展事件引擎——基本概念

本文属于 SQL Server 扩展事件(Extented Events)从入门到进阶 系列 在第一二节中,我们创建了一些简单的.类似典型SQL Trace的扩展事件会话.在此过程中,介绍了很多扩展事件基础组件,包括事件.谓词.操作和目标.本节,将对扩展事件引擎.架构和基本组件做更加深入的了解.通过这些讲解,可以大概了解到为什么扩展事件相对于SQL Trace来说更加低开销.另外,还会延时如何设计事件会话从而最小化事件收集过程中的不必要开销,即使这些事件会话会很复杂. 事件数据收集生命周期: 扩