数据库使用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) ...
随机推荐
- vue项目优化
cross-env 包环境 静态文件分离 require 是置顶的 双斜杠 //baidu.com可以是http也可以是https require.ensure打包到不同的文件中 项目文件路径规范 ...
- 初次使用git上传代码(转)
转自 http://www.cnblogs.com/cxk1995/p/5800196.html 首先你需要一个github账号,所有还没有的话先去注册吧! https://github.com/ 我 ...
- php传值,传地址,传引用的区别
传值, 是把实参的值赋值给行参 那么对行参的修改,不会影响实参的值 传地址 是传值的一种特殊方式,只是他传递的是地址,不是普通的如int 那么传地址以后,实参和行参都指向同一个对象 传 ...
- 登陆跳板机每天只输入一次token的方法——ssh clone session
自从跳板机升级后,无所不在的token让小PE很是恼火,于是有了这篇文章@_@ Linux or Mac篇 在Fedora或者Mac下很简单,修改~/.ssh/config文件,没有的话,就新建一个( ...
- Sizzle源码分析 (一)
Sizzle 源码分析 (一) 2.1 稳定 版本 Sizzle 选择器引擎博大精深,下面开始阅读它的源代码,并从中做出标记 .先从入口开始,之后慢慢切入 . 入口函数 Sizzle () 源码 19 ...
- 25最短路径之Dijkstra算法
图的最优化问题:最小生成树.最短路径 典型的图应用问题 无向连通加权图的最小生成树 有向/无向加权图的最短路径 四个经典算法 Kruskal算法.Prim算法---------------最小生成树 ...
- 小试---EF5.0简介
简介 实体框架Entity Framework 是 ADO.NET 中的一组支持开发面向数据的软件应用程序的技术.是微软的一个ORM框架.简单的说就是把关系型数据库映射成面向对象模型. 一篇更加详细的 ...
- 【译】在Asp.Net中操作PDF - iTextSharp - 利用列进行排版(转)
[译]在Asp.Net中操作PDF - iTextSharp - 利用列进行排版 在使用iTextSharp通过ASP.Net生成PDF的系列文章中,前面的文章已经讲述了iTextSharp所涵盖 ...
- Linux服务器配置---ftp用户黑名单
用户黑白名单 一个Linux主机中会多个用户,而我们希望有些用户不能去访问ftp.ftp服务器可以通过配置文件“/etc/vsftpd/user_list”来设置一个用户列表,这个列表可以是黑名单,也 ...
- 使用原生的javascript封装动画函数(有callback功能)
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...