SSIS中的容器和数据流—数据转换(Transformations)

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: 对数据流来说按照需求将数据转换成需要的格式是数据操作中的一个关键的步骤。例如想要得到聚合排序后的运算结果,转换可以实现这种操作。和SQL Server 2000 DTS完全不同,这些操作不需要编写script,所有的运算都在内存中进行。

对数据流来说按照需求将数据转换成需要的格式是数据操作中的一个关键的步骤。例如想要得到聚合排序后的运算结果,转换可以实现这种操作。和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做求和操作。这样产生了三列新的数据,供其他操作。img_2b715dd0d0fb47e80bcfbc1ed2148abd.png

图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的名字

img_a9a31b819d753dba5d8cacfe69c35d65.png

图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将字符转换成大写

img_da07b3ae852c4ad3eaad2ca8a7ad37be.png

 

条件分割

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

img_e3f46b3e77c10880283d3588264ee333.png

图4-19

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

 img_cd47eb5295112773b0a320cf7f8a0a1d.png

图4-20

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

img_7dbbd6292ca01aed656516673a0e9256.png

图4-21

 

复制行

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

 

数据转换

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

img_01c19e174d413e824261985a3792d6d6.png

图4-22

 

数据挖掘请求

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

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

派生列

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

img_551024dffc1e3d70bb7579e7a04e1f29.png

图4-23

   

输出列

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

img_539c8eabed35856eaf2e14ea39ab5412.png

图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,他可以将图片和文本文件输入到一个数据行中,他们的编辑设置也是类似的。

   

 

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

作者:Tyler Ning
出处:http://www.cnblogs.com/tylerdonet/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,如有问题,可以通过以下邮箱地址williamningdong@gmail.com  联系我,非常感谢。

目录
相关文章
|
3月前
|
移动开发 前端开发 HTML5
Twaver-HTML5基础学习(20)数据容器(3)_数据的批量加载(节省性能方法)
本文介绍了Twaver HTML5中数据的批量加载方法,通过使用`box.startBatch()`可以在大量数据加载时提高性能。文章通过示例代码展示了如何在React组件中使用批量加载功能,以减少界面重绘次数并提升效率。
59 2
Twaver-HTML5基础学习(20)数据容器(3)_数据的批量加载(节省性能方法)
|
3月前
|
XML 存储 JSON
Twaver-HTML5基础学习(19)数据容器(2)_数据序列化_XML、Json
本文介绍了Twaver HTML5中的数据序列化,包括XML和JSON格式的序列化与反序列化方法。文章通过示例代码展示了如何将DataBox中的数据序列化为XML和JSON字符串,以及如何从这些字符串中反序列化数据,重建DataBox中的对象。此外,还提到了用户自定义属性的序列化注册方法。
49 1
|
3月前
|
XML 移动开发 JSON
Twaver-HTML5基础学习(18)数据容器(1)_增删查改、遍历数据容器、包含网元判断
本文介绍了Twaver HTML5中的数据容器(DataBox),包括如何进行增删查改操作、遍历数据容器以及判断网元是否存在于数据容器中。DataBox用于管理所有的网元对象,如ElementBox、LayerBox、AlarmBox等,并通过示例代码展示了其常用方法的使用。
48 1
Twaver-HTML5基础学习(18)数据容器(1)_增删查改、遍历数据容器、包含网元判断
|
3月前
|
存储 索引 Python
python中的数据容器
python中的数据容器
|
4月前
|
安全 网络安全 数据安全/隐私保护
云原生技术探索:容器化与微服务架构的实践之路网络安全与信息安全:保护数据的关键策略
【8月更文挑战第28天】本文将深入探讨云原生技术的核心概念,包括容器化和微服务架构。我们将通过实际案例和代码示例,展示如何在云平台上实现高效的应用部署和管理。文章不仅提供理论知识,还包含实操指南,帮助开发者理解并应用这些前沿技术。 【8月更文挑战第28天】在数字化时代,网络安全和信息安全是保护个人和企业数据的前线防御。本文将探讨网络安全漏洞的成因、加密技术的应用以及提升安全意识的重要性。文章旨在通过分析网络安全的薄弱环节,介绍如何利用加密技术和提高用户警觉性来构建更为坚固的数据保护屏障。
|
4月前
|
存储 Docker 容器
在Docker中,容器退出后,通过docker ps命令查看不到,数据会丢失么?
在Docker中,容器退出后,通过docker ps命令查看不到,数据会丢失么?
|
5月前
|
Shell Linux Docker
docker常用命令大全(基础、镜像、容器、数据卷)
这些命令仅仅是 Docker 命令行工具的冰山一角,但对于日常操作来说已经非常全面。通过熟练地使用这些基础命令,用户可以有效地管理 Docker 的镜像、容器、数据卷和网络。随着用户对 Docker 的深入使用,更高级的命令和选项将会变得必需,但上面列出的命令已经为用户提供了一个坚实的起点。对于初学者来说,理解和掌握这些常用命令是深入学习 Docker 的基础。
520 5
docker常用命令大全(基础、镜像、容器、数据卷)
|
4月前
|
监控 安全 网络安全
|
5月前
|
存储 C++ 容器
开发与运维数组问题之C++标准库中提供数据容器作为数组的替代如何解决
开发与运维数组问题之C++标准库中提供数据容器作为数组的替代如何解决
58 5
|
4月前
|
域名解析 Kubernetes 负载均衡
在K8S中,外部访问容器服务,比如说提供了一个域名,链路怎么走?数据经过哪些组件?
在K8S中,外部访问容器服务,比如说提供了一个域名,链路怎么走?数据经过哪些组件?