对数据流来说按照需求将数据转换成需要的格式是数据操作中的一个关键的步骤。例如想要得到聚合排序后的运算结果,转换可以实现这种操作。和SQL Server 2000 DTS完全不同,这些操作不需要编写script,所有的运算都在内存中进行。添加一个数据转换之后,数据直接转换成想要的格式然后传递给下一个步骤,由于是在内存中完成运算操作的,不需要在数据库中建立对象来存储这些操作函数。但是当需要处理大批量的数据时,还是需要建立存储表或其他对象来处理的。

在data flow面板中拖放一个转换,鼠标点住然后拖放绿色连线到一个目的Destination,然后就可以双击并编辑这个转换。这部分将从最基本的功能开始讲解转换,下一部分将会做一些实验操作,并在实际盛传环境中来使用它。还有一些更高级的转换着这里不会讲解,把他们放在下一个随笔中讲解,这些高级的转换包括:

  • 修改Dimension
  • 透视和逆透视Pivot and Unpivot
  • 行数
  • 导入导出列
  • 术语提取和查找
  • 模糊分组和匹配
  • 数据挖掘
  • OLE DB命令

其中一些转换不是很复杂,只是在SSIS没有UI支持,要想使用它们需要使用Visual Studio中的高级编辑器。

聚合Aggregate

聚合转换可以像T-SQL中的函数GROUP BY, Average, Minimum, Maximum, 和 Count一样对数据进行聚合运算。在图4-13中可以看到数据以OrderDate,ProductLine分组,对LineTotal做求和操作。这样产生了三列新的数据,供其他操作。

图4-16

在聚合操作编辑器Aggregate Transformation Editor,首先选择需要进行聚合操作的列,然后选中的列将会出现在下面的一个表里面在Output Alias列里面输入输出列的别名。例如如果想输出每个订单的总量,这里修改为SubTotal,这样可以更容易的识别出这一列的目的。最重要的以个设置是在Operation这一列选择聚合操作。它有一面一些选项。

  • Group By:将数据按照某列分组
  • Average:对数据列求和操作
  • Count Distinct:对一组数据中非空行计算行数
  • Count Distinct:对一组数据中的非空行计算非重复的行数
  • Minimum:对一组数据中的数字列求最小值
  • Maximum:对一组数据中的数字列求最大值
  • Sum:对一组数据中的数字列求和

点击Advanced标签界面,在这个界面可以编辑转换输出。在Advanced界面可以输入聚合计算的名字,产生一个新的列。在Advanced标签界面,最关键的选择项是设置转换时的缓存,使它在一个合适的水平。例如较低水平设置为500000条,中等水平设置为5000000条,较高水平设置为25000000条。也可以使用Number of Keys属性设置具体数值。Auto Extend Factor属性设置转换可以使用的内存量,默认的值是25%,也可以设置其他选项保证RAM占用量。Warn On Division by Zero单选框用来处理求平均值时被除数是0,如果没有选择,转换失败将不会给出任何提示。

审核转换

审核转换允许对数据流添加审核审核数据,以往使用HIPPA和Sarbanes-Oxley (SOX)时,必须跟踪谁在什么时插入数据,审核转换可以实现这种功能。例如要跟踪那一个task向表里插入数据,可以在审核转换中添加相应的列。在Output Column Name列中输入想要审核的列,在Audit Type内选择审核类型如图4-17,可以选择的类型有:

  • Execution Instance GUID:GUID标示是那一个package执行的插入操作
  • PackageIDpackage的唯一标示
  • PackageNamepackage的名字
  • VersionIDpackage的GUID的版本
  • ExecutionStartTime:package开始执行的时间
  • MachineNamepackage所在的机器名
  • UserName启动package的用户
  • TaskName数据流中task的名字
  • TaskID包含转换task的Data Flow Task的名字

图4-17

字符映射

特征映射转换如图4-18展示数据流中列的特征,它的编辑界面很简单,只有一个标签界面,点击要进行映射的列,可以选择需要添加新列或需要更新的列。可以在Output Alias列中给原来的列一个别名,选择要进行的操作,可以进行的操作类型有:

  • Byte Reversal逆转数字位的顺序,例如数据0x1234 0x9876的逆转结果是0x4321 0x6789,这种操作和LCMapString,LCMAP_BYTEREV选项有相同的操作结果
  • Full Width将半长字符转换成全长
  • Half Width将全长字符转换成半长
  • Hiragana将日语中的片假名转换成平假名
  • Katakana将日语中的平假名转换成片假名
  • Linguistic Casing使用区域语言规则
  • Lowercase转换成小写字符
  • Traditional Chinese将简体中文转换成繁体中文
  • Simplified Chinese将繁体中文转换成简体中文
  • Uppercase将字符转换成大写

条件分割

根据条件分割数据是一个在数据流中添加复杂逻辑的方法,它允许根据条件将数据输出到其他不同的路径中。例如,可以将产品中总数量超过500的输出到一个路径,少于500的输出到另一个路径。如图4-19。可以从上面的属性结构中拖放一个列或者代码段,然后根据逻辑重命名而不是使用默认值Case1,还可以编辑输出列的名字。

图4-19

可以使用表达式来读取字符数据,设置判断条件,例如下面表达式判断城市名字的第一个字符是F,SUBSTRING(City,1,1) == "F"。将这个转换连接到下一个其他转换的时候会弹出一个对话框提示选择数据输出路径,如图4-20.在这个图中,可以看到有两个选择,GoodSales输出到一个路径,其他输出到另一个路径。还可以新建其他的路径以供选择。

图4-20

如果有两个选择,一个默认选择适用于其他情况,路径如图4-21

图4-21

复制行

复制行转换时一种很简单的转换,它将某一列的数据复制一份克隆。这种操作在执行某些精确的转换之前先创建一份拷贝时非常有用。然后将可以对照拷贝数据修正源数据。双击打开编辑界面,选择要拷贝的列,并重新命名。注意:有些转换允许将一列数据复制到内在列里。

数据转换

数据转换执行类似于T-SQL中的函数CONVERT或CAST的功能。数据转换的编辑界面如图4-22,选择需要转换的列,在DataType下拉列表中选择需要的数据类型。Output Alias栏内设置输出时使用的别名。

图4-22

数据挖掘请求

数据挖掘请求运行数据挖掘请求,并将结果输出到数据流。它还可以添加一些预测新列,一些应用场合如下列举:

  • 根据已知的一些列,例如子女个数,家庭收入,配偶收入预测产生一个新列:这个人是否拥有住房
  • 根据客户购物卡预测客户的购买意向
  • 可以填充用户的调查问卷上没有填写的空白栏

派生列

导出列任务可以从从另一个输出中创建一个新的列。例如,是订单数量和订单价格相乘导出一个新的列订单总价格,如图4-23也可以使用ISNULL函数填充当前时间或者某一天的空白数据。这是五个可以代替T-SQL代码编程的task之一。

图4-23

输出列

输出列任务可以冲数据流中输出一副图片或者一个文件。和其他的转换task不同这种转换不需要一个Destination。如图4-24打开编辑界面,选择一个包含文件的列,再选择一个文件输出路径。

图4-24

另外一个选项这只再次执行task的时候文件被删除或覆盖,Allow Append选项输出是否累加到一个已经存在的文件中。如果选择Force Truncate选项,会覆盖掉已经存在的文件。Write BOM选项设置如果数据类型是DT_NTEXT是否写入字符顺序符号。如果没有设置Append和Truncate选项,task将执行错误,错误信息类似于下面:

Error: 0xC02090A6 at Data Flow Task, Export Column [61]: Opening the file

"wheel_small.gif" for writing failed. The file exists and cannot be overwritten. If

the AllowAppend property is FALSE and the ForceTruncate property is set to FALSE,

the existence of the file will cause this failure.

输入列

输入列和输出列是一个正好相反的task,他可以将图片和文本文件输入到一个数据行中,他们的编辑设置也是类似的。

先到这里,剩下的转换任务下次随笔在接着再说。

转载SSIS中的容器和数据流—数据转换(Transformations)的更多相关文章

  1. 转载SSIS中的容器和数据流—数据转换(Transformations)续

    数据挖掘请求 数据挖掘任务是SSIS中一个很重要的任务,它的思想来源于一些算法.数据挖掘请求运行数据挖掘请求,并将结果输出到数据流.它还可以添加一些预测新列,一些应用场合如下列举: 根据已知的一些列, ...

  2. 转载SSIS中的容器和数据流—举例说明数据转换任务

    在上一个随笔中我们熟悉了数据流任务,现在来做一个例子,通过实践学习这些介绍的内容.这个例子从AdventureWorks数据库中取得数据,然后对数据进行聚合,排序,计算产生新列操作并输入到一个.csv ...

  3. SSIS中出现数据流数据源假死状态的解决办法

    相信开发过Sql Server SSIS的人都遇到过在数据流中数据源假死的问题,特别是Excel Source特别容易假死,当job执行到数据流中的Excel Source时,既不报错也不执行,也没有 ...

  4. [转]SSIS中的脚本—脚本任务

    本文转自:http://www.cnblogs.com/tylerdonet/archive/2011/09/16/2179123.html 脚本任务主要用来控制数据流,当现有的控制流 任务不能满足复 ...

  5. 在没安装OFFICE的服务器SSIS中进行EXCEL的ETL操作!

    由于OFFICE 2010的安装包比较庞大,如果仅仅为了在服务器中实现操作EXCEL,完全没有必要安装整个OFFICE,是否可以不装OFFICE也实现与OFFICE文件的互相操作呢?答案是肯定的,在S ...

  6. 微软BI 之SSIS 系列 - 在 SQL 和 SSIS 中实现行转列的 PIVOT 透视操作

    开篇介绍 记得笔者在 2006年左右刚开始学习 SQL Server 2000 的时候,遇到一个面试题就是行转列,列转行的操作,当时写了很长时间的 SQL 语句最终还是以失败而告终.后来即使能写出来, ...

  7. 微软BI 之SSIS 系列 - 在 SSIS 中导入 ACCESS 数据库中的数据

    开篇介绍 来自 天善学院 一个学员的问题,如何在 SSIS 中导入 ACCESS 数据表中的数据. 在 SSIS 中导入 ACCESS 数据库数据 ACCESS 实际上是一个轻量级的桌面数据库,直接使 ...

  8. SQL点滴9—SQL Server中的事务处理以及SSIS中的内建事务

    原文:SQL点滴9-SQL Server中的事务处理以及SSIS中的内建事务 我们可以把SSIS中的整个package包含在一个事务中,但是如果在package的执行过程中有一个表需要锁定应该怎么处理 ...

  9. SSIS中循环遍历组件[Foreach Loop Container]

    背景 每月给业务部门提取数据,每个分公司都要提取一般,先跑SQL,再粘贴到Excel中,然后发邮件给相关的人员.费时费力,还容易粘贴错位.因此,需要通过一个程序完成这些步骤.我首先想到的是通过SSIS ...

随机推荐

  1. 李洪强iOS开发本人集成环信的经验总结_07_监听好友请求

    李洪强iOS开发本人集成环信的经验总结_07_监听好友请求 来到Appdalegate中: 遵守代理协议 设置代理  实现监听好友请求的回调的方法

  2. SaaS系列介绍之七: SaaS模式分析(下)

    1 SaaS模式下的质量管理 质量管理是从事SaaS事业的企业管理的重要课题,质量管理的职能是质量方针.质量目标和质量指标的制定和贯彻实施,中心目标是促进产品质量.提高客户满意度. 软件质量要素包含以 ...

  3. (转)linux 技巧:使用 screen 管理你的远程会话

    转自:http://www.ibm.com/developerworks/cn/linux/l-cn-screen/index.html 你是不是经常需要 SSH 或者 telent 远程登录到 Li ...

  4. SharePoint2013切换帐户登录菜单

    SharePoint2013帐户姓名显示的地方没有切换帐户的菜单,这个功能对于终端用户是可有可无的,但对于sharepoint管理员或sharepoint开发人员来讲,却是一个很重要的菜单,由于经常要 ...

  5. js模仿jquery里的几个方法parent, parentUntil, children

    有时工作需要, 也是接着上一章的方法, 用js模仿jquery里的几个方法parent, parentUntil, children. function parent(node){ return no ...

  6. hdu 4642 Fliping game(博弈)

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=4642 题意:给定一个棋盘,0表示向下,1表示向上,选一个x,y, 然后翻转从x,y 到n,m.的所有硬币, ...

  7. VBSCRIPT事件绑定(隐式)

    很多新版的浏览器都开始不支持VBSCRIPT 所以系统开始不断地有script错误,开始比较多地接触VBSCRIPT vbscript 和javascript 事件绑定的类似方法为 vbscript: ...

  8. 函数buf_LRU_free_from_unzip_LRU_list

    /******************************************************************//** Try to free an uncompressed ...

  9. UVa 1151 (枚举 + MST) Buy or Build

    题意: 平面上有n个点,现在要把它们全部连通起来.现在有q个套餐,如果购买了第i个套餐,则这个套餐中的点全部连通起来.也可以自己单独地建一条边,费用为两点欧几里得距离的平方.求使所有点连通的最小费用. ...

  10. 什么是Zookeeper,Zookeeper的作用是什么,在Hadoop及hbase中具体作用是什么

    什么是Zookeeper,Zookeeper的作用是什么,它与NameNode及HMaster如何协作?在没有接触Zookeeper的同学,或许会有这些疑问.这里给大家总结一下. 一.什么是Zooke ...