转载SSIS中的容器和数据流—数据转换(Transformations)续
数据挖掘请求
数据挖掘任务是SSIS中一个很重要的任务,它的思想来源于一些算法。数据挖掘请求运行数据挖掘请求,并将结果输出到数据流。它还可以添加一些预测新列,一些应用场合如下列举:
- 根据已知的一些列,例如子女个数,家庭收入,配偶收入预测产生一个新列:这个人是否拥有住房
- 根据客户购物卡预测客户的购买意向
- 可以填充用户的调查问卷上没有填写的空白栏
涉及到的算法有:
- 微软时序算法
- 微软决策树算法
- 微软线性回归算法
- 贝叶斯算法
模糊排序和查找
模糊排序task可以找出数据中可能重复的行,例如可以找出包含“Main St.”和“Main Street”的两行然后将他们合并成一行。模糊查找任务可以检查数据输入并清除脏数据。模糊查找任务通常放在查找任务之后,查找任务找到匹配数据,然后通过模糊查找没有匹配的数据。
查找
查找转换任务的功能类似于SQL Server 2000中的Data Pump任务。例如,如果数据中有一列ZipCode来自于导入数据中的两列State和City,在映射表中可以使用查找转换。在SQL Server 2000中这种功能很笨拙,必须使用join关联查找这样会使运行速度减慢。如图4-25是查找任务的编辑界面。
图4-25
合并
合并转换可以将两个路径中的输入数据合并成一个输出。这种转换类似于Union All转换,它有一些限制:
- 合并之前数据必须排序,可以在此之前使用排序转换或者在数据源中使用ORDER BY语句
- 合并的元数据类型必须相同,例如CustomerID不能在一个路径中是数字型的但是在另一个路径中是字符类型的
- 如果有多于两个路径,需要选择Union All转换
编辑这种task,确保在两个路径中的数据时一致的,选择列的时候会弹出对话框提示数据合并到路径1还是路径2,如果选择合并到路径1,然后连接路径2。这样选择之后如图4-26最终将会从一个路径映射到另一个路径,有些路径的数据也可以忽略。
图4-26
连接合并
SSIS的一个目标就是使用任务,尽量保证不写任何代码,一个典型的例子就是连接合并。这种合并可以将两个输入进行内连接或者外连接然后选择性地输出。例如,在一个数据流中存储着包含EmployeeID的人力资源信息,在另一个数据流中存储着工资清单信息,可以对这两个路径进行连接,从人力资源信息中取得姓名,从工资清单信息中取得员工工资,然后从一个路径中输出。如图4-27,可以看到通过连接合并分别缺的员工名字和入职日期。
图4-27
注意:如果两个输入路径在同一个数据库,在OLE DB数据源中进行数据连接操作可能效率更高,如果在不同的数据库中可能效率后受到影响。这种连接合并在两个数据不是同一个数据库中或者不想编写代码时会很有用。
多点传送Multicast
如同它的名字一样多点传送可以将一个路径中的数据输出到多个路径,如图4-28你可能会使用这种转换将数据输出到多个路径中。编辑这种task,将它和输入源连接,然后将它和多个Destination连接,除了task的名字之外,它没有特别的编辑选项。
图4-28
注意:多点传送类似于Split 转换,不同的是多点传送把所有的行都输出,Split将有条件地输出部分行。
OLE DB命令
OLE DB命令对数据流中的数据行执行一个OLE DB命令。它针对数据表中的每一行进行更新操作,可以事先将要更新的数据存放在表中。或者针对一个有输入参数的存储过程,可以将这些参数存放在一个数据表中,不用每次都输入参数。
百分比抽样和行抽样Percentage and Row Sampling
百分比抽样和行抽样可以从数据源中随机选择一组数据。这两种task都可以产生两组输出,一组是随机选择的,另一组是没有被选择的。可以将这些选择出的数据发送到开发或者测试服务器上。这个Task的最合适的应用是建立数据挖掘模型然后,使用这些抽样数据来验证这个模型。
编辑这种task,选择要抽取的行数或者 百分比,如图4-29。百分比抽样按百分比从数据源中随机选择数据,行抽样从数据源中随机选择具体的行数。可以对选中的数据和未被选择的数据命名。最后一个选择项是随机取样的参数。如果选择一个固定的参数,每次输出的结果是一样的,如果保持默认设置,就是不选择,每次将输出不同的数据。
图4-29
透视和逆透视
这个和T-SQL中的PIVOT和UNPIVOT的作用是一样的。数据透视转换可以将数据规范或使它在报表中更具可读性。数据的输出类似于OLAP中的数据输出和报表服务中的数据输出。下面的 表展示销售员工和每天的销售量。
转换后的数据如图
逆透视数据的功能和这个刚好相反。
数据行数
数据行数转换只是简单地计算数据流中的数据行数然后输出到一个变量中。常用的是将行数写到邮件中,然后将邮件发送给使用者报告转换了多少行数据。或者根据这个数据行数进行判断,进而进行相应的操作。
代码组件
代码组件允许编写代码充当转换transforms,数据源source,目的destination。使用代码组件可以完成下面的任务:
- 使用.net类库集验证保险卡号和邮件地址
- 验证数据并忽略掉不合理的数据。例如,在人力资源招聘系统中删除那些不符合薪水要求的应聘者
- 编写组件和第三方客户整合
代码组件可以作为多种输出的数据源,可以选择在运行时更加高效地编译。
代码组件允许编写代码充当转换transforms,数据源source,目的destination。使用代码组件可以完成下面的任务:
- 使用.net类库集中的Regex类验证保险卡号和邮件地址
- 验证数据并忽略掉不合理的数据。例如,在人力资源招聘系统中删除那些不符合薪水要求的应聘者
- 编写组件和第三方客户整合
代码组件可以作为多种输出的数据源,可以选择在运行时更加高效地编译。
渐变维度(Slow Change Dimesion)
Dimension修改可以更新或者修改数据仓库中的一个Dimension。使用修改向导,可以产生所有的更新和新建dimension任务。曾经这样的任务对于DTS开发人员来说是很繁琐的,现在只需要几分钟就可以完成。
排序
排序转换允许对数据流中的数据按照某一列进行排序。这是五个常用的转换之一。连接数据源打开编辑界面,编辑这种任务。不想设置为排序列的字段不要选中,默认情况下所有列都会选中。如图4-30,按照ProductID排序,并将所有列输出。
图4-30
在底部的表格中,可以设置输出列的别名,是否按照列来排序。Sort Order列显示列将会第一排序,第二排序还是第三排序。双击列去除重复的排序列。
关键词抽取和查找Term Extraction and Lookup
关键词抽取和查找从数据集中抽取关键词。例如,可以使用这种task从一系列文章中抽取关键词。另一个功能是分析公司内部电子邮件内容。这种任务目前只支持英文关键词抽取。
在关键词抽取中可以指定是抽取名词还是名词词组。例如“bicycle”会被抽取但是“the bicycle”将不会被抽取。这种任务有两种输出,关键词和抽取的结果。关键词是要匹配的关键词,抽取结果是成功匹配的次数。
关键词抽取可以输出预先匹配的行。例如,将一个邮件系统中的信息记录到数据库中,可以和邮件系统组合,自动记录有瑕疵的产品。将结果通过一个连接管理器指向一个表。
联合所有Union All
联合所有task的功能和合并正好相反,它将多个数据源中的合并成一个结果集。例如,如图4-31,将两个XML数据源中的数据合并成一个输出然后将数据送入到关键词抽取任务中。
图4-31
编辑这种转换,首先将第一个数据源连接到task然后将其他数据源连接到这个task。打开编辑界面,保证列被正确映射,DDIS将会自动适应是否正确映射。例如,一个输入字符是20个字符,另一个是50,出书将会是一个多于50个字符的列。
下一篇随笔中,将用一个例子来具体说明怎么使用转换任务。