数据库使用SSIS进行数据清洗教程
OLTP系统的后端关系数据库用于存储不同种类的数据,理论上来讲,数据库中每一列的值都有其所代表的特定含义,数据也应该在存入数据库之前进行规范化处理,比如说“age”列,用于存储人的年龄,设置的数据类型为INT类型。存入数据库的值是2000虽然看起来没有任何问题,但结合业务规则,这样的”Noisy”数据在数据分析过程中就会造成数据分析的结果严重失真,比如极大的拉高平均年龄。在真实的OLTP系统中,这类不该存在的数据往往会由于各种各样的原因大量存在,类似这种类型的数据都会在数据进入数据仓库之前,在预处理阶段进行清洗。
上面举出的简单例子仅仅是一个违反业务规则的情况,但实际的情况会根据具体业务的不同而不同,并不是一个简单统一的过程就能够解决,文本列举了一些典型的需要数据清洗的场景和SSIS中的实现方式。
为什么不使用SQL语句进行处理?
使用SQL语句来查询和处理这类问题是可行的,但使用SQL语句有其局限性,例如:
假如数据源不是关系数据库呢?
假如业务逻辑非常复杂,需要非常复杂的SQL语句呢,处理过程中的调试、日志如何处理?
使用SSIS可以很好的解决上述问题,SSIS提供了基于图的数据流,并在处理过程中提供了调试、日志、查看转换中的数据的能力,并且SSIS包相较于SQL更适合于团队作业。
使用SSIS进行数据清洗
下面是一些典型的数据清理作业,使用SSIS进行处理。
缺失默认值
缺失默认值是最常见的一种需要数据清洗的一种情况,缺失默认值指的是数据库列中的值为“NULL”,而在数据分析中,该类为NULL的数据需要替换中符合业务逻辑的值,比如NULL出现在销售地区列可以替换成“其他”,出现在销售数据列可以替换成“未知”等。
在SSIS中我们可以通过“派生列”任务来为缺失默认值的列添加默认值,本例中我们对Adventureworks示例数据库的Person.Address数据库的AddressLine2列进行替换,该列中为NULL的值我们统一替换成“无附加地址”,如图1所示。
除了上述使用常量替换NULL值之外,我们也可以按照业务规则根据其他数据源的数据填补NULL值,图2中的例子是ProductCostHistory表中部分EndDate列为NULL,通过查找Product表的ModifiedDate列将为NULL的EndDate列中的值补全。
语义转换
有时候,某些列的值需要做语义上的转换,比如说某个产品的产地列为5,分析时很难知道5代表什么,因此可以去对应的表或文件进行查找来替换这个5,比如5代表河北。在SSIS中,实现该类转换可以类似图2中直接去表中查找,也可以为该查找表(5代表河北这张表)建立缓存,然后通过缓存进行引用查找。
为了实现通过缓存做语义转换,我们首先设置两个步骤,第一步首先将查找表的数据导入缓存,第二步再对缓存进行查找从而实现语义转换。
首先将查找表的数据导入缓存,如图4所示。
然后通过缓存更新数据,如图5所示。
数据类型转换
当数据来自不同数据源时,不同类型的数据源数据类型不兼容可能导致报错。在SSIS中,可以使用“派生列”来实现数据转换,派生列允许写自定义公式实现比较复杂的转换,也可以通过数据转换任务实现简单的数据类型转换,从而使得不同数据源的数据兼容。如图6所示。
数据截断问题
某些情况下,数据可能在传输过程中由于数据长度的限制导致数据截断,在SSIS中的解决办法是将截断或者出错的数据导入到一个中间表中待进一步处理,如图7所示。
在OLEDB源的配置如图8所示。
查找匹配失败
在某些情况下,将多个数据源中的数据进行集成时,同一个语义的数据可能以不同的方式存储,比如一些数据源存的值为“北京”,而另一些数据源存的为“北京市”。解决该类问题的办法就是“模糊查找”任务。如图9所示。
在图9中,我们对数据进行了模糊查找,设置匹配度大于0.5的为匹配,小于0.5的为不匹配,分别输出到不同的数据源中。从而帮助数据进行了统一。
违反业务规则
在设计数据仓库时,很重要的一点是列中何种类型的值是合适的。比如值是否在业务范围之内,或者列中数据与其相关的数据结合是否有效(比如说结束日志不能小于开始日志)。对于该类数据导入到目标表之前应该进行清理,在SSIS中清洗的方式有很多,比如使用“有条件拆分”任务将不符合业务规范的数据进行剔除或处理,或导入stage表。这取决于业务类型。
小结
本文简述了数据清洗的概念,并对一些常见的数据清洗场景进行了实现。使用SSIS进行数据清洗相较于其他方式有很大的灵活性和性能。
数据库使用SSIS进行数据清洗教程的更多相关文章
- 使用SSIS进行数据清洗
简介 OLTP系统的后端关系数据库用于存储不同种类的数据,理论上来讲,数据库中每一列的值都有其所代表的特定含义,数据也应该在存入数据库之前进行规范化处理,比如说"age"列 ...
- ASP.NET Core 设置和初始化数据库 - ASP.NET Core 基础教程 - 简单教程,简单编程
原文:ASP.NET Core 设置和初始化数据库 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core 设置和初始化数据库 上一章节中我们已经设置和配置好了 EF ...
- 【山外笔记-数据库】Memcached详解教程
本文打印版文档下载地址 [山外笔记-数据库]Memcached详解教程-打印版.pdf 一.Memcached数据库概述 1.Memcached简介 (1)Memcached是一个自由开源的,高性能, ...
- .NET 5/.NET Core使用EF Core 5连接MySQL数据库写入/读取数据示例教程
本文首发于<.NET 5/.NET Core使用EF Core 5(Entity Framework Core)连接MySQL数据库写入/读取数据示例教程> 前言 在.NET Core/. ...
- express实现前后端通信上传图片,存储数据库(mysql)傻瓜教程(三)完结篇
终于完成了所有自己想要的功能(鼓励下自己),虽然还是很简陋,但是还是挺有满足感的,哈哈. 附上前两篇的链接: 第一篇 第二篇 进入正题,在第二篇里面已经完成了连接数据库,并且实现了对数据库的增删改查, ...
- 腾讯云服务器centos 6.5(jdk+tomcat+vsftp)、腾讯mysql数据库 及 tomcat自启动 配置教程
1.腾讯云数据库配置 1.考虑到安全性问题,,平常不使用root用户登录,新增一个用户名neil,用来管理项目的数据库 a.首先登录root创建db_AA数据库 b.在root用户下,创建neil用户 ...
- 数据库发出sql命令mysql教程
$db = mysql教程_connect("localhost", "phpdb", "phpdb");mysql_select_db(& ...
- 微渠道发展 BAE交通运输平台和java呼声,微信mysql数据库开发实例 --图文开发教程
持续更新 BAE java开展mysql数据库 图文教程 BAE java语言发展mysql源码下载: 目前微信的发展.BAE开展.java开展.mysql教程开发非常,的介绍基于BAE平台.java ...
- [转]一步一步部署SSIS包图解教程
本文就SQL统计分析SSIS包的部署进行一次详细的部署图解教程,Sql Server Integration Services 提供了非常简单的部署工具,利用这些工具可以方便地将包文件(*.dtsx) ...
随机推荐
- collections模块(收藏)
collections是Python内建的一个集合模块,提供了许多有用的集合类. 1. namedtuple 我们知道tuple可以表示不变集合,例如,一个点的二维坐标就可以表示成: >> ...
- !! A股历史平均市盈率走势图
http://value500.com/PE.asp 一. A股历史平均市盈率走势图 *数据来源:上海证券交易所 分享到: 354 - 上海A股 深圳A股更新时间 2017年6月7日 2017年6月7 ...
- strus2 框架介绍
strus2 执行过程: ActionMapper会去找ActionMapping查找URL请求的映射 1:ActionMapping这个类用name+namespace确定请求的映射, (但是仍然不 ...
- 172. Factorial Trailing Zeroes(阶乘中0的个数 数学题)
Given an integer n, return the number of trailing zeroes in n!. Example 1: Input: 3 Output: 0 Explan ...
- amaze ui实现下拉列表
对amaze ui ,只能说很好,很适合开发者使用,然后省略一万字. 今天记录下下拉列表的实现. 关于调用,这里不赘述了, 直接记录代码: <ul class="am-dropdown ...
- Atcoder Tenka1 Programmer Contest 2019 E - Polynomial Divisors
题意: 给出一个多项式,问有多少个质数\(p\)使得\(p\;|\;f(x)\),不管\(x\)取何值 思路: 首先所有系数的\(gcd\)的质因子都是可以的. 再考虑一个结论,如果在\(\bmod ...
- zw版【转发·台湾nvp系列Delphi例程】HALCON LocalMin1
zw版[转发·台湾nvp系列Delphi例程]HALCON LocalMin1 zw版[转发·台湾nvp系列Delphi例程]HALCON LocalMin1 procedure TForm1.But ...
- Win10安装MySQL5.7.22 解压缩版(手动配置)方法
1.下载地址:https://dev.mysql.com/downloads/mysql/5.7.html#downloads 直接点击下载项 下载后: 2.可以把解压的内容随便放到一个目录,我的是如 ...
- 精力管理 | 迅速恢复精力的N个技巧,四个关键词以及自我管理的方法和工具列表
精力管理 | 迅速恢复精力的N个技巧,所谓坚持,是坚定的“持有”,这个“持”字很值得琢磨——不是扛.不是顶,而是“持”这样一个半放松的状态.如果你没做好自己该做的事情,如果你自己没有成长起来,随着年龄 ...
- web前端----JavaScript(JS)函数
函数 函数定义 JavaScript中的函数和Python中的非常类似,只是定义方式有点区别. // 普通函数定义 function f1() { console.log("Hello wo ...