数据采集及预处理——针对“数据”“采集”“预处理”的理解与解析数据采集及预处理
⽂章⽬录
前⾔
数据采集与预处理是⼤数据学习的重要部分;
本篇笔记是对《数据采集与预处理》这个标题的解析,
我将它分为三个词语进⾏了详细的理解;
因为是初学这门课程,
所以⼤部分理解是借鉴其他⼈的⽂章与理解。
⼀、数据
在计算机系统中,各种字母、数字符号的组合、语⾳、图形、图像等统称为数据,数据经过加⼯后就成为信息。
数据(data)是事实或观察的结果,是对客观事物的逻辑归纳,是⽤于表⽰客观事物的未经加⼯的的原始素材。
数据是信息的表现形式和载体,可以是符号、⽂字、数字、语⾳、图像、视频等。
数据和信息是不可分离的,数据是信息的表达,信息是数据的内涵。
数据本⾝没有意义,数据只有对实体⾏为产⽣影响时才成为信息。
数据可以是连续的值,⽐如声⾳、图像,称为模拟数据。
也可以是离散的,如符号、⽂字,称为数字数据。
在计算机系统中,数据以⼆进制信息单元0、1的形式表⽰。
⼆、采集
数据采集⽬前常⽤的有三种⽅式,分别为:
1. 系统⽇志采集⽅法;
2. ⽹络数据采集⽅法(⽹络爬⾍);
3. ETL(ETL⼯具:kettle);
1.系统⽇志采集
⽬前为⽌,运⽤较为⼴泛的有:
Flume: 分布式⽇志收集系统,最初由Cloudera 开发,现是Apache的⼀个开源项⽬;
Flume是⼀个⾼可靠的分布式采集、聚合和传输系统,Flume⽀持在⽇志系统中定制各类数据发送⽅,⽤于收集数据,同时对数据进⾏简单处理,并写到诸如⽂本、HDFS这些接受⽅中。
Flume的核⼼其实就是把数据从数据源收集过来,再将收集到的数据送到指定的⽬的地……
Chukwa:开源分布式数据收集系统,是Hadoop 的组成部分,构建在HDFS 和 map/reduce 框架之上;
Scrible:Scribe是facebook**开源**的 ⽇志收集系统 ,在facebook内部已经得到⼤量的应⽤;
Kafka:最早是LinkedIn的开发的消息系统,现是Apache的⼀个**开源**项⽬;
————————————————
链接:
2.⽹络数据采集
a.概念
⽹络数据采集指通过**⽹络爬⾍或⽹站公开API**的⽅式,从⽽获取⼤数据信息,该⽅法可以将⾮结构化数据从⽹页中抽取出来,将其存储为统⼀的本地⽂件,并以结构化的⽅式存储。它⽀持图⽚、⾳频、视频等⽂件或附件的采集。
(将⾮结构化的数据转换成结构化数据)
⽹络爬⾍⼯具:
① python爬⾍;
② 分布式⽹络爬⾍⼯具(Nutch);
③ Java⽹络爬⾍⼯具(Crawler4j、WebMagic、WebCollector);
④ ⾮Java⽹络爬⾍⼯具(Scrapy);
b.爬⾍的原理及⼯作流程
原理
所谓的⽹络爬⾍,其实就是⼀种按照⼀定规则,⾃动的抓取web信息的程序或脚本。
⽹络爬⾍可以⾃动采集所有其能够访问到的页⾯内容,为搜索引擎和⼤数据分析提供数据来源,⼀般有**数据采集、数据处理、数据存储**三部分功能。
⽹络爬⾍是如何爬取数据的?
⽹页中除了⽤户浏览的⽂字信息外,还包含⼀些超链接信息,通过获取这些超链接URL,再辅以⼀定的算法,爬⾍就能够得到数据了。(URL:统⼀资源定位符,是对可以从互联⽹上得到的资源的位置和访问⽅法的⼀种简洁的表⽰,是互联⽹上标准资源的地址。互联⽹上的每个⽂件都有⼀个唯⼀的URL,它包含的信息指出⽂件的位置以及浏览器应该怎末处理它。)
⼯作流程
基本情况下,爬⾍会⾸先获取⼀部分种⼦URL,将这些URL放⼊待抓取URL队列,从队列中取出待抓取URL,解析DNS(域名系统)得到主机ip,并将URL对应⽹页下载储存。最后将这些URL放⼊已抓取队列中,如此循环。
链接:
3.ETL
a. 概念
ETL,是英⽂**Extract-Transform-Load**的缩写,⽤来描述将数据从来源端经过抽取(extract)、转换(transform)、加载(load)⾄⽬的端的过程。
ETL⼀词较常⽤在数据仓库,但其对象并不限于数据仓库。
ETL是将业务系统的数据经过抽取、清洗转换之后加载到数据仓库的过程,
⽬的是将企业中的分散、零乱、标准不统⼀的数据整合到⼀起,为企业的决策提供分析依据, ETL是BI(商业智能)项⽬重要的⼀个环节。
ETL与ELT
ETL所描述的过程,⼀般常见的作法包含ETL或是ELT(Extract-Load-Transform),并且混合使⽤。
通常越⼤量的数据、复杂的转换逻辑、⽬的端为较强运算能⼒的数据库,越偏向使⽤ELT,以便运⽤
⽬的端数据库的平⾏处理能⼒。
⼯具
ETL(orELT)的流程可以⽤任何的编程语⾔去开发完成,由于ETL是极为复杂的过程,⽽⼿写程序不易管理,有越来越多的企业采⽤⼯具协助ETL的开发,并运⽤其内置的metadata功能来存储来源与⽬的的对应(mapping)以及转换规则。
⼯具可以提供较强⼤的连接功能(connectivity)来连接来源端及⽬的端,开发⼈员不⽤去熟悉各种相异的平台及数据的结构,亦能进⾏开发。
数据仓库(DW)
决策⽀持系统(DSS)
在线分析处理(OLAP)
数据挖掘(DM)
商业智能(BI)
b.ETL实现的过程
①数据的抽取(Extract)
这⼀部分需要在调研阶段做⼤量的⼯作,
  ⾸先要搞清楚数据是从⼏个业务系统中来?
  各个业务系统的数据库服务器运⾏什么DBMS?
  是否存在⼿⼯数据,⼿⼯数据量有多⼤?
  是否存在⾮结构化的数据等等;
  当收集完这些信息之后才可以进⾏数据抽取的设计。
对于与存放DW(数据仓库)的数据库系统相同的数据源处理⽅法
这⼀类数据源在设计上⽐较容易。
⼀般情况下,DBMS(SQLServer、Oracle)都会提供数据库链接功能,在DW数据库服务器和原业务系统之间建⽴直接的链接关系就可以写Select 语句直接访问。
对于与DW数据库系统不同的数据源的处理⽅法
对于这⼀类数据源,⼀般情况下也可以通过ODBC的⽅式建⽴数据库链接——如SQL Server和Oracle之间。
  如果不能建⽴数据库链接,可以有两种⽅式完成,
  ⼀种是通过⼯具将源数据导出成.txt或者是.xls⽂件,然后再将这些源系统⽂件导⼊到ODS中。
  另外⼀种⽅法是通过程序接⼝来完成。
(ODBS : 开放数据库互连(Open Database Connectivity,ODBC)是微软公司开放服务结构(WOSA,Windows Open Services Architecture)中有关数据库的⼀个组成部分,
大数据etl工具有哪些它建⽴了⼀组规范,并提供了⼀组对数据库访问的标准API(应⽤程序编程接⼝)。
这些API利⽤SQL来完成其⼤部分任务。ODBC本⾝也提供了对SQL语⾔的⽀持,⽤户可以直接将SQL语句送给ODBC。
)
对于⽂件类型数据源(.txt,.xls),
可以培训业务⼈员利⽤数据库⼯具将这些数据导⼊到指定的数据库,然后从指定的数据库中抽取。或者还可以借助⼯具实现。
增量更新的问题
  对于数据量⼤的系统,必须考虑增量抽取。
  ⼀般情况下,业务系统会记录业务发⽣的时间,我们可以⽤来做增量的标志,每次抽取之前⾸先判断ODS中记录最⼤的时间,然后根据这个时间去业务系统取⼤于这个时间所有的记录。
  利⽤业务系统的时间戳,⼀般情况下,业务系统没有或者部分有时间戳。
②数据的清洗转换(Cleaning、Transform)
⼀般情况下,数据仓库分为ODS、DW两部分。
  通常的做法是从业务系统到ODS做清洗,将脏数据和不完整数据过滤掉,在从ODS到DW的过程中转换,进⾏⼀些业务规则的计算和聚合。
(1)、数据清洗
数据清洗的任务是过滤那些不符合要求的数据,将过滤的结果交给业务主管部门,确认是否过滤掉还是由业务单位修正之后再进⾏抽取。
不符合要求的数据主要是有三⼤类:
不完整的数据、
错误的数据、
重复的数据
I. 不完整的数据:
这⼀类数据主要是⼀些应该有的信息缺失,如供应商的名称、分公司的名称、客户的区域信息缺失、业务系统中主表与明细表不能匹配等。对于这⼀类数据过滤出来,按缺失的内容分别写⼊不同Excel⽂件向客户提交,要求在规定的时间内补全。补全后才写⼊数据仓库。
II. 错误的数据:
这⼀类错误产⽣的原因是业务系统不够健全,在接收输⼊后没有进⾏判断直接写⼊后台数据库造成的,eg:数值数据输成全⾓数字字符、字符串数据后⾯有⼀个回车操作、⽇期格式不正确、⽇期越界等。
这⼀类数据也要分类,对于类似于全⾓字符、数据前后有不可见字符的问题,只能通过写SQL语句的⽅式出来,然后要求客户在业务系统修正之后抽取。⽇期格式不正确的或者是⽇期越界的这⼀类错误会导致ETL运⾏失败,这⼀类错误需要去业务系统数据库⽤SQL的⽅式挑出来,交给业务主管部门要求限期修正,修正之后再抽取。
III. 重复的数据:
对于这⼀类数据——特别是维表中会出现这种情况——将重复数据记录的所有字段导出来,让客户确认并整理。
数据清洗是⼀个反复的过程,不可能在⼏天内完成,只有不断的发现问题,解决问题。
  对于是否过滤,是否修正⼀般要求客户确认,对于过滤掉的数据,写⼊Excel⽂件或者将过滤数据写⼊数据表,在ETL开发的初期可以每天向业务单位发送过滤数据的邮件,促使他们尽快地修正错误,同时也可以做为将来验证数据的依据。
  数据清洗需要注意的是不要将有⽤的数据过滤掉,对于每个过滤规则认真进⾏验证,并要⽤户确认。
(2)、数据转换
数据转换的任务主要进⾏
不⼀致的数据转换、
数据粒度的转换,
以及⼀些商务规则的计算。
I. 不⼀致数据转换:
这个过程是⼀个整合的过程,将不同业务系统的相同类型的数据统⼀,
eg:同⼀个供应商在结算系统的编码是XX0001,⽽在CRM中编码是YY0001,这样在抽取过来之后统⼀转换成⼀个编码。
II. 数据粒度的转换:
业务系统⼀般存储⾮常明细的数据,⽽数据仓库中数据是⽤来分析的,不需要⾮常明细的数据。
⼀般情况下,会将业务系统数据按照数据仓库粒度进⾏聚合。
III. 商务规则的计算:
不同的企业有不同的业务规则、不同的数据指标,这些指标有的时候不是简单的加加减减就能完成,这个时候需要在ETL中将这些数据指标计算好了之后存储在数据仓库中,以供分析使⽤。
链接:
C. 数据采集⽅法
I. 触发器⽅式
触发器⽅式是普遍采取的⼀种增量抽取机制。
该⽅式是根据抽取要求,在要被抽取的源表上建⽴插⼊、修改、删除3个触发器,每当源表中的数据发⽣变化,就被相应的触发器将变化的数据写⼊⼀个增量⽇志表,
ETL的增量抽取则是从增量⽇志表中⽽不是直接在源表中抽取数据,同时增量⽇志表中抽取过的数据要及时被标记或删除。
为了简单起见,增量⽇志表⼀般不存储增量数据的所有字段信息,⽽只是存储源表名称、更新的关键字值和更新操作类型(KNSEN、UPDATE或DELETE),ETL增量抽取进程⾸先根据源表名称和更新的关键字值,从源表中提取对应的完整记录,再根据更新操作类型,对⽬标表进⾏相应的处理。
II. 时间戳⽅式
时间戳⽅式是指增量抽取时,抽取进程通过⽐较系统时间与抽取源表的时间戳字段的值来决定抽取哪些数据。
这种⽅式需要在源表上增加⼀个时间戳字段,系统中更新修改表数据的时候,同时修改时间戳字段的值。
有的数据库(例如SQL SERVER)的时间戳⽀持⾃动更新,即表的其它字段的数据发⽣改变时,时间戳字段的值会被⾃动更新为记录改变的时刻。
在这种情况下,进⾏ETL实施时就只需要在源表加上时间戳字段就可以了。
对于不⽀持时间戳⾃动更新的数据库,这就要求业务系统在更新业务数据时,通过编程的⽅式⼿⼯更新时间戳字段。
使⽤时间戳⽅式可以正常捕获源表的插⼊和更新操作,但对于delete操作则⽆能为⼒,需要结合其它机制才能完成。
III. 全表删除插⼊⽅式
全表删除插⼊⽅式是指每次抽取前先删除⽬标表数据,抽取时全新加载数据。
该⽅式实际上将增量抽取等同于全量抽取。
对于数据量不⼤,全量抽取的时间代价⼩于执⾏增量抽取的算法和条件代价时,可以采⽤该⽅式。
IV. 全表⽐对⽅式
全表⽐对即在增量抽取时,ETL进程逐条⽐较源表和⽬标表的记录,将新增和修改的记录读取出来。
优化之后的全部⽐对⽅式是采⽤MD5校验码,需要事先为要抽取的表建⽴⼀个结构类似的MD5临时表,该临时表记录源表的主键值以及根据源表所有字段的数据计算出来的MD5校验码,每次进⾏数据抽取时,对源表和MD5临时表进⾏MD5校验码的⽐对,如有不同,进⾏UPDATE操作:如⽬标表没有存在该主键值,表⽰该记录还没有,则进⾏INSERT操作。然后,还需要对在源表中已不存在⽽⽬标表仍保留的主键值,执⾏DELETE操作。
V. ⽇志表⽅式
对于建⽴了业务系统的⽣产数据库,可以在数据库中创建业务⽇志表,当特定需要监控的业务数据发⽣变化时,由相应的业务系统程序模块来更新维护⽇志表内容。
增量抽取时,通过读⽇志表数据决定加载哪些数据及如何加载。⽇志表的维护需要由业务系统程序⽤代码来完成。
VI.系统⽇志分析⽅式
该⽅式通过分析数据库⾃⾝的⽇志来判断变化的数据。关系犁数据库系统都会将所有的DML操作存储在⽇志⽂件中,以实现数据库的备份和还原功能。ETL增晕抽取进程通过对数据库的⽇志进⾏分析,提取对相关源表在特定时间后发⽣的DML操作信息,就可以得知⾃上次抽取时刻以来该表的数据变化情况,从⽽指导增量抽取动作。有些数据库系统提供了访问⽇志的专⽤的程序包(例如ORACLE的LOGMINDER),使数据库⽇志的分析⼯作得到⼤⼤简化。
VII. Oracle数据库⽅式
1)ORACLE改变数据捕获(CHANGED DATA CAPTURE,CDC)⽅式:ORACLE CDC特性是在ORAELE 9I数据库中引⼊的。CDC能够帮助识别从上次抽取之后发⽣变化的数据。利⽤CDC,在对源
表进⾏INSERT、UPCLATE或DELETE等操作的同时就可以提取数据,并且变化的数据被保存在数据库的变化表中。这样就可以捕获发⽣变化的数据,然后利⽤数据库视图以⼀种可控的⽅式提供给ETL抽取进程,作为增量抽取的依据。CDC⽅式对源表数据变化情况的捕获有两种⽅式:同步CDC和异步CDC。同步CDC使⽤源数据库触发器来捕获变更的数据,这种⽅式是实时的,没有任何延迟,当DML操作提交后,变更表中就产⽣了变更数据。异步CDC使⽤数据库重做⽇志(REDO LOG)⽂件,在源数据库发⽣变更以后,才进⾏数据捕获。
2)ORACLE闪回查询⽅式:ORACLE 9I以上版本的数据库系统提供了闪回查询机制,允许⽤户查询过去某个时刻的数据库状态。这样,抽取进程可以将源数据库的当前状态和上次抽取时刻的状态进⾏对⽐,快速得出源表数据记录的变化情况。
VIII. 由业务系统提供增量数据
有些应⽤场景,⽐如涉及政府相关⾏业的数据采集,可能某些数据库不允许外部主动采集,这时可能解决办法是由业务系统⽅直接提供增量数据。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。