精华内容
下载资源
问答
  • BI ETL常见的异常问题处理方法,BI ETL常见的异常问题处理方法
  • etl异常原因和处理方法

    千次阅读 2013-01-01 00:11:50
    ETL异常原因和处理方法   考虑导致异常发生的原因,有一些会导致ETL功能上的异常,如流程运行失败,或是导致数据正确性的异常,大致可以分为以下五类。有一些是硬性的,有一些是软性的,有一些是环境导致的,...

    ETL的异常原因和处理方法

                                          

    考虑导致异常发生的原因,有一些会导致ETL功能上的异常,如流程运行失败,或是导致数据正确性的异常,大致可以分为以下五类。有一些是硬性的,有一些是软性的,有一些是环境导致的,有一些是流程导致的。包括
    1、硬件、操作系统、网络导致异常;
    2、数据源数据传输、质量导致异常;
    3、ETL过程处理导致异常;
    4、目标数据模型导致异常;
    5、开发、维护阶段人工干预导致异常;

    请注意上面提到的原因是针对整个ETL过程的,从抽取到转换到装载。针对这些异常情况的处理方法,可以有以下几种:
    1、手工干预,重新装载数据。因为无法自动调整ETL过程,需要手工干预,修改过程,重启流程等;
    2、终止装载数据,通知管理员。这里的终止装载数据是终止装载特定表的数据,不应终止不依赖此表数据的流程;
    3、拒绝数据,记录原因;
    4、清洗数据,入库。针对ETL过程可以识别的不影响数据逻辑的非法数据,处理入库;
    5、反复尝试,直至自动装载。可以设定尝试次数或尝试时间,超数或超时后转成第一种,手工干预的处理方法;

    针对上面五种异常原因,我们可以在根据实际情况细分如下,并且,对于每种异常原因,给出参考异常处理方法:
    1、第一种异常原因是外部环境造成的,通常是我们不可控的因素,当然也有一些是我们可以通过程序避免的。例如
     a.       网络中断。这种情况可能在某一段时间内频频发生这种情况,导致ETL中断,针对这种原因,能作的就是重新装载;
     b.       系统崩溃。由于ETL服务器系统不稳定,因为非程序原因发生系统崩溃,造成ETL中断,重新装载数据;
     c.       系统资源不足。当ETL服务器处理大量数据时,可能因为对数据估计不足造成资源耗尽,ETL中断。建议优化ETL过程,重新装载;
     d.       外围系统连接不上。这有可能是开放给目标系统的时间窗没有按时打开,也有可能是外围系统本身出现故障连接不上。对此,我们需要采用第五种处理方法,反复尝试。

    2、第二种异常原因,主要是数据源制造的麻烦。接口这个东西,不是一个特别稳定的东西,特别在开发阶段,发生变动的情况比较多,即使在正常运行阶段,数据源的结构变更恐怕也会很频繁。这一类原因可以细分为:
     a.       接口没有按约定的数据周期提供,例如原则上某一天有数据,但实际接口中无数据。对此中情况,提交错误报告给接口方修正后,重新装载;
     b.       数据源系统表结构或接口规格发生变化而没有同步,接口无法访问。建议能够对源表结构进行检测,一旦发生变更,终止装载;
     c.       接口数据在约定的时间窗内没有完全获取过来。由于对数据量估计不足,或是本身时间窗约定太小,只是数据没有抽取完毕,中断ETL。此中情况,建议优化ETL过程,尽量缩短抽取的时间窗,再重新装载;
     d.       接口数据内容不规范,导致转换错误,中断ETL或是reject数据;由于数据源缺乏空值检查、外键约束等一致性检查,或是手工数据等原因,致使数据转换过程中很多失败。对此类原因,要求能够尽量对可能的错误数据进行判断处理,要求能够在不影响数据逻辑的前提下,最大限度接收而不拒绝数据。因为数据内容错误的形式多样化,因此需要不断在测试过程中发现这些错误,并及时修正ETL过程以适当处理他们。此类经常发生的错误数据包括:
       a)         非空字段出现空值;
       b)        外键参照不上,例如字典表中本身没有对应的值,或者因为数据类型的原因,需要经过转换(例如trim处理)才能参照上;
       c)        主键重复,因为源系统没有定义物理主键,缺乏主键唯一性检查,但是在目标系统中定义了主键,导致插入失败;
       d)        字符串转换成数值型错误;
       e)         字符串转换成日期型错误;
       f)         数据格式和业务逻辑不符,例如证件号码非法;
       g)        数据逻辑非法,例如某个浮点字段等于另外两个浮点字段相加,但实际数据并不相等;

    3、第三种异常原因主要是ETL过程开发中产生的,包括
     a.       ETL规则错误。由于在最初数据源到目标数据的映射关系理解、表述错误,导致数据装入后的数据正确性问题。修改规则、实现,重新装载;
     b.       ETL实现错误。在既定ETL规则下,具体实现没有按照规则设计或者细节发生疏漏,导致最终装入的数据存在正确性问题。修改实现,重新装载;

    4、第四种异常原因主要是因为目标数据模型随着应用或是数据源发生变动时,因为数据结构发生变更,造成ETL过程不可用。针对这种原因,建议能够检测到结构变更,终止装载。

    5、第五种是手工操作导致异常。原则上,在ETL过程不允许有手工的操作,但正是因为有很多异常的处理方法是手工干预,因此又不可避免会发生此类异常。例如误删某批数据、重复装入某批数据等。因此,为避免这类错误,要规范手工干预流程。如:
     a.       限定手工干预只能运行某个流程,不允许运行单个过程;
     b.       不允许使用临时的SQL语句操纵数据库,必须编写好的SQL脚本或存储过程;
     c.       每一项手工操作必须留下记录;

    展开全文
  • ETL处理过程介绍

    千次阅读 2018-01-11 15:15:34
    本文首先提出了ETL过程进行数据清洗应解决的问题,然后通过分析现有的ETL处理方式说明应采用数据库中的ETL处理,介绍了数据质量和数据清洗的原理并提出了数据清洗在ETL中的应用模型,最后通过实例说明数据清洗的具体...
    为提高数据仓库数据质量,需要在ETL过程进行数据清洗。本文首先提出了ETL过程进行数据清洗应解决的问题,然后通过分析现有的ETL处理方式说明应采用数据库中的ETL处理,介绍了数据质量和数据清洗的原理并提出了数据清洗在ETL中的应用模型,最后通过实例说明数据清洗的具体实现。
    

     

     


    1 前言

    ETL即数据抽取(Extract)、转换(Transform)、装载(Load)的过程。它是构建数据仓库的重要环节。数据仓库是面向主题的、集成的、稳定的且随时间不断变化的数据集合,用以支持经营管理中的决策制定过程[1]。数据仓库主要用于决策分析,为领导者提供决策支持信息。数据仓库系统中有可能存在着大量的脏数据,引起的主要原因有:滥用缩写词、惯用语、数据输入错误、重复记录、丢失值、拼写变化、不同的计量单位和过时的编码等。即便是一个设计和规划良好的数据仓库系统,如果其中存在着大量的脏数据,那么这个系统也是没有任何意义的,因为“垃圾进,垃圾出”(garbage in, garbageout),系统根本就不可能为决策分析系统提供任何支持。为了清除脏数据,必须在数据仓库系统中进行数据清洗。

    数据清洗(data cleansing/data cleaning/datascrubing)是一个减少错误和不一致性、解决对象识别的过程[2]。目前有很多数据清洗研究[2][3][4][6]和ETL研究[8][9][10],但是如何在ETL过程中进行有效的数据清洗,此方面研究不多。笔者认为这包括三方面的内容:(1)ETL处理方式的选择(2)数据清洗的原理及在ETL中的应用模型(3)数据清洗的具体实现过程。

    2 ETL处理方式

    数据抽取负责完成从数据源找到并取出当前主题所需的那部分数据,由于数据仓库中各个主题中的数据是按照前端应用的需求存放的,因此需要对抽取出的数据进行转换以适应前端应用的需要。转换后的数据就可以装入数据仓库了,数据加载过程定时进行,并且不同主题的数据加载任务有各自不同的执行时间表。

    常见的ETL处理方式可分为以下三种:

    (1)        数据库外部的ETL处理

       数据库外部的ETL处理方式指的是大多数转换工作都在数据库之外、在独立的ETL过程中进行。这些独立的ETL过程与多种数据源协同工作,并将这些数据源集成。数据库外部ETL处理的优点是执行速度比较快。但缺点是大多数ETL步骤中的可扩展性必须由数据库的外部机制提供,如果外部机制不具备扩展性,那么此ETL处理就不能扩展。

    (2)        数据库段区域中的ETL处理

    数据库段区域中的ETL处理方式不使用外部引擎而是使用数据库作为唯一的控制点。多种数据源的所有原始数据大部分未作修改就被载入中立的段结构中。如果源系统是关系数据库,段表将是典型的关系型表。如果源系统是非关系型的,数据将被分段置于包含列VARCHAR2(4000)的表中,以便于在数据库内作进一步转换。成功地将外部未修改数据载入数据库后,再在数据库内部进行转换。这就是系列方法载入然后转换。数据库段区域中的ETL处理方式执行的步骤是提取、装载、转换,即通常所说的ELT。在实际数据仓库系统中经常使用这种方式。这种方式的优点是为抽取出的数据首先提供一个缓冲以便于进行复杂的转换,减轻了ETL进程的复杂度。但是这种ETL处理的缺点有:(a)在段表中存贮中间结果和来自数据库中源系统的原始数据时,转换过程将被中断。(b)大多数转换可以使用类SQL的数据库功能来解决,但它们可能不是处理所有的ETL问题的最优语言。

    (3)数据库中的ETL处理

    数据库中的ETL处理方式使用数据库作为完整的数据转换引擎,在转换过程中也不使用段。数据库中的ETL处理具有数据库段区域中的ETL处理的优点,同时又充分利用了数据库的数据转换引擎功能,但是这要求数据库必须完全具有这种转换引擎功能。目前的主流数据库产品Oracle9i[5]等可以提供这种功能。

    综上分析三种ETL处理方式,数据库外部的ETL处理可扩展性差,不适合复杂的数据清洗处理,数据库段区域中的ETL处理可以进行复杂的数据清洗,而数据库中的ETL处理具有数据库段区域ETL处理的优点,又利用了数据库的转换引擎功能。所以为了进行有效的数据清洗,应该使用数据库中的ETL处理。

    3 数据清洗的原理及在ETL中的应用模型

    数据清洗的目的是保证数据仓库数据质量。

    3.1 数据质量

    对于什么是数据质量,文献[3]将其定义为数据的一致性(consistency)、正确性(correctness)、完整性(completeness)和最小性(minimality)这4个指标在信息系统中得到满足的程度。根据处理的是单数据源还是多数据源以及问题是模式层的还是实例层的,文献[4]将数据质量问题分为4类:单数据源模式层问题(如缺少完整性约束、糟糕的模式设计等)、单数据源实例层问题(如数据输入错误)、多数据源模式层问题(如异构数据模型和模式设计等)、多数据源实例层问题(如冗余、冲突、不一致的数据等)。

    单数据源中出现的问题在多数据源中也有可能出现,并且这种现象也是普遍发生的。模式层次上的问题也会体现在实例层次上。模式层次的问题可以通过改进模式设计、模式转化和模式集成来解决。但实例层次的问题在模式层次上是不可见的。所以数据清洗主要针对实例层次的数据质量问题。

    3.2 数据清洗原理

      文献[11]指出,数据清洗实际就是利用有关技术如数理统计、数据挖掘或预定义的数据清洗规则将脏数据转化成满足数据质量要求的数据。按数据清洗的实现方式与范围,可将数据清洗分为四种:(1)手工实现方式:用人工来检测所有的错误并改正。这只能针对小数据量的数据源。(2)通过专门编写的应用程序:通过编写程序检测/改正错误。但通常数据清洗是一个反复进行的过程,这就导致清理程序复杂、系统工作量大。(3)某类特定应用领域的问题,如根据概率统计学原理查找数值异常的记录。(4)与特定应用领域无关的数据清洗,这一部分的研究主要集中于重复记录的检测/删除。

    3.3 数据清洗在ETL中的应用模型

    在数据仓库系统中,数据清洗是ETL过程中的一个重要环节,主要任务是检测并删除/改正将装入数据仓库的脏数据。由于数据仓库的多种异构数据源和海量数据,数据清洗应是与领域无关的。而且数据清洗不是ETL中一个单独的步骤,需要与数据抽取、数据转换集成,与数据载入统一使用,需要进行循环处理。如果数据源是一个能力比较强的DBMS(如图1中的数据源1和数据源2),则可以在数据抽取过程中使用SQL来完成一部分的数据清洗工作。但是有一些数据源不提供这种能力(如数据源3),则只能直接将数据从数据源抽取出来,然后在数据转换的时候进行清洗。数据仓库中的数据清洗主要还是在数据转换的时候进行的。使用数据库ETL处理方式中的DBMS的转换清洗能力完成大部分的工作,这样数据清洗就充分利用了DBMS提供的功能。


     

     
       


    4 数据清洗的具体实现过程

    不同的系统可以采用不同的数据清洗方法[4]。我们用Northwind数据源为例来进行数据清洗。Northwind是SQL SERVER 2000自带的一个关于贸易公司的数据库。表Customer记录了公司的客户信息,共有11个字段:CustomerID CompanyName ContactName  ContactTitle Address  City  Region  PostalCode  Country  Phone  Fax。我们以这个表为基础,编写程序来加入一些脏数据形成新表:Customernew。数据清洗分为以下几步:

    (1)        元素化

    将非标准的数据格式化成结构数据。

    以数据库表Customernew的任意一条记录为例。Address、City和Phone三个字段值分别为:

    Address:Obere Stre. 57

    City:Berlin

    Phone:030-0074321

    元素化为:

    Address(1):Obere

    Address(2):Stre

    Address(3):57

    City:Berlin

     

    Phone(1):031

    Phone(2):0074321

    (2)        标准化

    将元素标准化,根据字典消除不一致的缩写。

    这里的字典是用户通过分析样本表预先制定的一些规则的集合。样本表是根据概率统计从表Customernew选择一部

    分记录所形成的一个表。首先分析Address(2)的值Stre,此值应是Street的缩写。而在字典中Street的缩写是Str,所以在这里,Stre被认为是脏数据,正确的数据应为:Str。

    (3)        校验

    对标准化的元素进行一致性校验,即在内容上修改错误。

    Berlin的电话区号应为:030,所以Phone(1)的值应为:030。

    (4)        匹配

    在其它记录中寻找相似的记录,发现重复记录。

    对整个表Customernew排序,然后在表中查找Address(1)值为Obere的所有记录,如果有这样的记录再去查找Address(2),依次类推,如果所有字段的数据全都相同,那么这两条记录就是重复记录。

    (5)        消除重复记录

    根据匹配结果进行处理,删除部分记录或者合并多个记录为一个完整信息的记录。

    (6)        归档

    将前5个步骤的结果写入元数据存储中心。这样可以更好地进行后续的清洗过程,而且可以更加容易理解数据源以便在数据仓库中进行切片、切块等操作。

    在上面的数据清洗方法中,我们找出的只是完全相同的记录。对于一些相似的记录,它们也有可能代表的是同一条记录,找出这些相似重复记录对于这个贸易公司有很重要的意义,例如,贸易公司的一个客户在表Customernew中有可能有多条记录。当贸易公司邮寄广告时,他就有可能将多个广告邮寄给同一个客户。这样就浪费了大量的资金。这只是一个很简单的广告例子,但是由此我们也可以看出,检测/删除相似重复记录可以提高贸易公司的经济效益。我们可以采用下面的一种方法或者结合使用这三种方法来检测相似重复记录:

    l  基于契比雪夫定理的统计学方法:这种方法可以随机选取样本数据进行分析,加快了检测速度,但是这是以牺牲准确性为代价的。

    l  模式识别的方法:基于数据挖掘和机器学习算法来查找数据,主要牵涉关联规则算法。

    l  基于距离的聚类方法:这也是数据挖掘中的算法,重点在于它的类的评测标准为欧几里德距离或者Edit距离,通过这种距离来发现数据集中的重复记录。

    5 结论

       数据清洗属于一个较新的研究领域,如何将数据清洗有效地运用到ETL以提高数据仓库数据质量,本文给出了待解决问题的设计方案。但是目前很多人认为数据清洗是针对特定应用领域的问题,是一个单纯浪费大量劳动的问题。其实在脏数据的检测/删除的精度方面以及人机交互设计等方面都有大量的可研究问题。本文给出了一个数据清洗在ETL中的应用模型,并通过例子说明了数据清洗的具体实现过程。此方法的完善还有待于进一步的研究。

    参考文献

    [1]W.H.Inmon.数据仓库.机械工业出版社

    [2]Galbardas H,et al.An ExtansibleFramework for Data Cleaning.Institutenational de Recherche enInformation et en automatique,Technical Report 1999

    [3]Aebi,D.,Perrochon,L.Towards improvingdata quality.In:Sarda,N.L.,ed,Proceedings of the InternationalConference on Information Systems and Management ofData.1993,273~281

    [4]Rahm,E.,Do,H.H.Data cleaning:problemsand current approaches.IEEE Data EngineeringBulletin,2000,23(4):3~13

    [5]Oracle 9i白皮书

    [6]Mauricio A.Hernandez,SalvatoreJ.Stolfo.Real-world Data is Dirty:Data Cleasing and the Merge/PurgeProblem.

    [7]朱明数据挖掘 中国科学技术大学出版社

    [8]Kimball Ralph,the data warehouse toolkit,secondedition,wiley Computer Publishing.

    [9]张宁等.数据仓库中ETL技术的研究.计算机工程与应用.2002.24

    [10]王文彬等.基于移动行业的ETL方法及策略探讨.计算机工程.2003.2

    [11]M Hernandez. A Generation of Band Joins and theMerge/Purge Problem[R].Technical Report CCCS-005-1995,Department ofComputer Science,Columbia University,1995


    转载:http://blog.sina.com.cn/s/blog_7eb42b5a0101cfh8.html
    展开全文
  • etl报错是难免的,及时的预警,处理,因为各种问题,可以维护个问题集,后边的人报错了,也可以查看。 【潜水】J 11:04:05 源系统变更一般都会做影响分析的吧 【潜水】A 11:18:22 对 是基于hive的  源库的...

    守护撤回了一条消息
    【潜水】 A 2019/1/15 8:50:46
    之前的做法是先卸数到数据文件,如果调度出问题,第二天还可以从数据文件再重新把数据加载上去,还有什么其他的方法吗
    【话唠】B 2019/1/15 8:53:04
    增量数据,还是全量
    【话唠】B 2019/1/15 8:54:27
    源库数据归档备份几天呢,这方法可行?
    【潜水】A 2019/1/15 9:08:21
    有的增量有的全量,考虑在不动源库的情况下,源库可能已经有备份机制,在仓库也考虑一下这个情况的处理~
    【活跃】C  2019/1/15 9:26:16
    ETL不应该都支持重跑历史么?
    前一天挂了,第二天重跑一下就好了,只要调度工具支持重跑,ETL的代码也要写成支持重跑的。
    【冒泡】D 2019/1/15 9:51:28
    Indeed
    贴源缓冲+作业重跑机制,一般是调度要支持N次自动失败重跑。
    【话唠】B  2019/1/15 9:54:37
    @C 它这是从源库抽取到ods,正常业务系统源库不保存历史,只保留最新的,如果是ods到dwd,在仓库里,当然可以重跑。
    【话唠】B 2019/1/15 9:56:31
    n次自动失败重跑,作业预警,发短信,邮件?
    【潜水】A 2019/1/15 10:04:03
    @ 是的,只能支持库内重跑,源库只有最新
    【潜水】A 2019/1/15 10:05:36
    @ @ 现在确实没有失败自动重跑的机制,考虑加一下,请问下你们做etl一般会做卸数到数据文件,备份数据文件的操作吗
    【潜水】A 2019/1/15 10:08:05
    其实可以直接不用卸数可以直接从源库加载带仓库,但是考虑一个异常情况和数据的备份,为了更安全,加上卸数到数据文件的操作,一般有没有必要呢想了解一下
    【冒泡】E 2019/1/15 10:11:48
    @A 一般都是要卸载为文件,源库是不断变化的,你的度量会丢失
    【群主】北京-胖子哥(1106110976) 2019/1/15 10:12:21
    这个里面就可以看到ODS的价值了。
    ODS存储短周期,贴源数据
    【话唠】B 2019/1/15 10:20:15
     @A 你们的源业务系统库,都是啥数据库啊,mysql还是oracle或者其它mongodb,redis,hbase啥的
    【冒泡】K 2019/1/15 10:23:30
    混杂,Ora、GP、TD都有
    【活跃】G  2019/1/15 10:24:32
    你讲的是源库到ods当天任务没成功,第二天跑就丢掉了历史变更?
    【冒泡】K 2019/1/15 10:27:23

    【潜水】A 2019/1/15 10:28:02
    源是oracle
    @ 对,第二天源业务库数据就变了,已经无法从源库取到前一天的数据了
    【活跃】C 2019/1/15 10:42:11
    你举个场景,看看大家有什么想法,我们很多时候中间状态可以不要
    【潜水】A  10:55:19
    比如由于源库的表结构变了,没有同步修改仓库;源库有异常的数据加载到仓库出错了;或者源库数据量太大数据加载时候出错了。就是一些比较异常的情况,可能有的也不会发生,就是怕一旦发生什么想象不到的情况,导致某些表的数据没有加载过来,还没有在当天及时处理。
    【话唠】B  10:58:53
    你们数仓也是基于hive的吗
    【话唠】B  11:00:55
    我们这边权限控制严格,普通用户没有删表,删字段权限。如果源库做变更了增加字段了,必须发邮件,看看上下游是否有影响,再做同步变更。
    【话唠】B 11:02:42
    etl报错是难免的,及时的预警,处理,因为各种问题,可以维护个问题集,后边的人报错了,也可以查看。
    【潜水】J  11:04:05
    源系统变更一般都会做影响分析的吧
    【潜水】A  11:18:22
    对  是基于hive的  
    源库的变化都会做影响分析 主要是考虑一些预想外的情况或者疏漏之类的
    【潜水】A 11:23:10
    非常感谢上面几位的分享建议,我都参考一下想一想

    展开全文
  • ETL

    2017-09-21 22:09:41
    本文首先提出了ETL过程进行数据清洗应解决的问题,然后通过分析现有的ETL处理方式说明应采用数据库中的ETL处理,介绍了数据质量和数据清洗的原理并提出了数据清洗在ETL中的应用模型,最后通过实例说明数据清洗的具体...
    为提高数据仓库数据质量,需要在ETL过程进行数据清洗。本文首先提出了ETL过程进行数据清洗应解决的问题,然后通过分析现有的ETL处理方式说明应采用数据库中的ETL处理,介绍了数据质量和数据清洗的原理并提出了数据清洗在ETL中的应用模型,最后通过实例说明数据清洗的具体实现。
    

     

     


    1 前言

    ETL即数据抽取(Extract)、转换(Transform)、装载(Load)的过程。它是构建数据仓库的重要环节。数据仓库是面向主题的、集成的、稳定的且随时间不断变化的数据集合,用以支持经营管理中的决策制定过程[1]。数据仓库主要用于决策分析,为领导者提供决策支持信息。数据仓库系统中有可能存在着大量的脏数据,引起的主要原因有:滥用缩写词、惯用语、数据输入错误、重复记录、丢失值、拼写变化、不同的计量单位和过时的编码等。即便是一个设计和规划良好的数据仓库系统,如果其中存在着大量的脏数据,那么这个系统也是没有任何意义的,因为“垃圾进,垃圾出”(garbage in, garbageout),系统根本就不可能为决策分析系统提供任何支持。为了清除脏数据,必须在数据仓库系统中进行数据清洗。

    数据清洗(data cleansing/data cleaning/datascrubing)是一个减少错误和不一致性、解决对象识别的过程[2]。目前有很多数据清洗研究[2][3][4][6]和ETL研究[8][9][10],但是如何在ETL过程中进行有效的数据清洗,此方面研究不多。笔者认为这包括三方面的内容:(1)ETL处理方式的选择(2)数据清洗的原理及在ETL中的应用模型(3)数据清洗的具体实现过程。

    2 ETL处理方式

    数据抽取负责完成从数据源找到并取出当前主题所需的那部分数据,由于数据仓库中各个主题中的数据是按照前端应用的需求存放的,因此需要对抽取出的数据进行转换以适应前端应用的需要。转换后的数据就可以装入数据仓库了,数据加载过程定时进行,并且不同主题的数据加载任务有各自不同的执行时间表。

    常见的ETL处理方式可分为以下三种:

    (1)        数据库外部的ETL处理

       数据库外部的ETL处理方式指的是大多数转换工作都在数据库之外、在独立的ETL过程中进行。这些独立的ETL过程与多种数据源协同工作,并将这些数据源集成。数据库外部ETL处理的优点是执行速度比较快。但缺点是大多数ETL步骤中的可扩展性必须由数据库的外部机制提供,如果外部机制不具备扩展性,那么此ETL处理就不能扩展。

    (2)        数据库段区域中的ETL处理

    数据库段区域中的ETL处理方式不使用外部引擎而是使用数据库作为唯一的控制点。多种数据源的所有原始数据大部分未作修改就被载入中立的段结构中。如果源系统是关系数据库,段表将是典型的关系型表。如果源系统是非关系型的,数据将被分段置于包含列VARCHAR2(4000)的表中,以便于在数据库内作进一步转换。成功地将外部未修改数据载入数据库后,再在数据库内部进行转换。这就是系列方法载入然后转换。数据库段区域中的ETL处理方式执行的步骤是提取、装载、转换,即通常所说的ELT。在实际数据仓库系统中经常使用这种方式。这种方式的优点是为抽取出的数据首先提供一个缓冲以便于进行复杂的转换,减轻了ETL进程的复杂度。但是这种ETL处理的缺点有:(a)在段表中存贮中间结果和来自数据库中源系统的原始数据时,转换过程将被中断。(b)大多数转换可以使用类SQL的数据库功能来解决,但它们可能不是处理所有的ETL问题的最优语言。

    (3)数据库中的ETL处理

    数据库中的ETL处理方式使用数据库作为完整的数据转换引擎,在转换过程中也不使用段。数据库中的ETL处理具有数据库段区域中的ETL处理的优点,同时又充分利用了数据库的数据转换引擎功能,但是这要求数据库必须完全具有这种转换引擎功能。目前的主流数据库产品Oracle9i[5]等可以提供这种功能。

    综上分析三种ETL处理方式,数据库外部的ETL处理可扩展性差,不适合复杂的数据清洗处理,数据库段区域中的ETL处理可以进行复杂的数据清洗,而数据库中的ETL处理具有数据库段区域ETL处理的优点,又利用了数据库的转换引擎功能。所以为了进行有效的数据清洗,应该使用数据库中的ETL处理。

    3 数据清洗的原理及在ETL中的应用模型

    数据清洗的目的是保证数据仓库数据质量。

    3.1 数据质量

    对于什么是数据质量,文献[3]将其定义为数据的一致性(consistency)、正确性(correctness)、完整性(completeness)和最小性(minimality)这4个指标在信息系统中得到满足的程度。根据处理的是单数据源还是多数据源以及问题是模式层的还是实例层的,文献[4]将数据质量问题分为4类:单数据源模式层问题(如缺少完整性约束、糟糕的模式设计等)、单数据源实例层问题(如数据输入错误)、多数据源模式层问题(如异构数据模型和模式设计等)、多数据源实例层问题(如冗余、冲突、不一致的数据等)。

    单数据源中出现的问题在多数据源中也有可能出现,并且这种现象也是普遍发生的。模式层次上的问题也会体现在实例层次上。模式层次的问题可以通过改进模式设计、模式转化和模式集成来解决。但实例层次的问题在模式层次上是不可见的。所以数据清洗主要针对实例层次的数据质量问题。

    3.2 数据清洗原理

      文献[11]指出,数据清洗实际就是利用有关技术如数理统计、数据挖掘或预定义的数据清洗规则将脏数据转化成满足数据质量要求的数据。按数据清洗的实现方式与范围,可将数据清洗分为四种:(1)手工实现方式:用人工来检测所有的错误并改正。这只能针对小数据量的数据源。(2)通过专门编写的应用程序:通过编写程序检测/改正错误。但通常数据清洗是一个反复进行的过程,这就导致清理程序复杂、系统工作量大。(3)某类特定应用领域的问题,如根据概率统计学原理查找数值异常的记录。(4)与特定应用领域无关的数据清洗,这一部分的研究主要集中于重复记录的检测/删除。

    3.3 数据清洗在ETL中的应用模型

    在数据仓库系统中,数据清洗是ETL过程中的一个重要环节,主要任务是检测并删除/改正将装入数据仓库的脏数据。由于数据仓库的多种异构数据源和海量数据,数据清洗应是与领域无关的。而且数据清洗不是ETL中一个单独的步骤,需要与数据抽取、数据转换集成,与数据载入统一使用,需要进行循环处理。如果数据源是一个能力比较强的DBMS(如图1中的数据源1和数据源2),则可以在数据抽取过程中使用SQL来完成一部分的数据清洗工作。但是有一些数据源不提供这种能力(如数据源3),则只能直接将数据从数据源抽取出来,然后在数据转换的时候进行清洗。数据仓库中的数据清洗主要还是在数据转换的时候进行的。使用数据库ETL处理方式中的DBMS的转换清洗能力完成大部分的工作,这样数据清洗就充分利用了DBMS提供的功能。


     





    4 数据清洗的具体实现过程

    不同的系统可以采用不同的数据清洗方法[4]。我们用Northwind数据源为例来进行数据清洗。Northwind是SQL SERVER 2000自带的一个关于贸易公司的数据库。表Customer记录了公司的客户信息,共有11个字段:CustomerID CompanyName ContactName  ContactTitle Address  City  Region  PostalCode  Country  Phone  Fax。我们以这个表为基础,编写程序来加入一些脏数据形成新表:Customernew。数据清洗分为以下几步:

    (1)        元素化

    将非标准的数据格式化成结构数据。

    以数据库表Customernew的任意一条记录为例。Address、City和Phone三个字段值分别为:

    Address:Obere Stre. 57

    City:Berlin

    Phone:030-0074321

    元素化为:

    Address(1):Obere

    Address(2):Stre

    Address(3):57

    City:Berlin

     

    Phone(1):031

    Phone(2):0074321

    (2)        标准化

    将元素标准化,根据字典消除不一致的缩写。

    这里的字典是用户通过分析样本表预先制定的一些规则的集合。样本表是根据概率统计从表Customernew选择一部

    分记录所形成的一个表。首先分析Address(2)的值Stre,此值应是Street的缩写。而在字典中Street的缩写是Str,所以在这里,Stre被认为是脏数据,正确的数据应为:Str。

    (3)        校验

    对标准化的元素进行一致性校验,即在内容上修改错误。

    Berlin的电话区号应为:030,所以Phone(1)的值应为:030。

    (4)        匹配

    在其它记录中寻找相似的记录,发现重复记录。

    对整个表Customernew排序,然后在表中查找Address(1)值为Obere的所有记录,如果有这样的记录再去查找Address(2),依次类推,如果所有字段的数据全都相同,那么这两条记录就是重复记录。

    (5)        消除重复记录

    根据匹配结果进行处理,删除部分记录或者合并多个记录为一个完整信息的记录。

    (6)        归档

    将前5个步骤的结果写入元数据存储中心。这样可以更好地进行后续的清洗过程,而且可以更加容易理解数据源以便在数据仓库中进行切片、切块等操作。

    在上面的数据清洗方法中,我们找出的只是完全相同的记录。对于一些相似的记录,它们也有可能代表的是同一条记录,找出这些相似重复记录对于这个贸易公司有很重要的意义,例如,贸易公司的一个客户在表Customernew中有可能有多条记录。当贸易公司邮寄广告时,他就有可能将多个广告邮寄给同一个客户。这样就浪费了大量的资金。这只是一个很简单的广告例子,但是由此我们也可以看出,检测/删除相似重复记录可以提高贸易公司的经济效益。我们可以采用下面的一种方法或者结合使用这三种方法来检测相似重复记录:

     基于契比雪夫定理的统计学方法:这种方法可以随机选取样本数据进行分析,加快了检测速度,但是这是以牺牲准确性为代价的。

     模式识别的方法:基于数据挖掘和机器学习算法来查找数据,主要牵涉关联规则算法。

     基于距离的聚类方法:这也是数据挖掘中的算法,重点在于它的类的评测标准为欧几里德距离或者Edit距离,通过这种距离来发现数据集中的重复记录。

    5 结论

       数据清洗属于一个较新的研究领域,如何将数据清洗有效地运用到ETL以提高数据仓库数据质量,本文给出了待解决问题的设计方案。但是目前很多人认为数据清洗是针对特定应用领域的问题,是一个单纯浪费大量劳动的问题。其实在脏数据的检测/删除的精度方面以及人机交互设计等方面都有大量的可研究问题。本文给出了一个数据清洗在ETL中的应用模型,并通过例子说明了数据清洗的具体实现过程。此方法的完善还有待于进一步的研究。

    参考文献

    [1]W.H.Inmon.数据仓库.机械工业出版社

    [2]Galbardas H,et al.An ExtansibleFramework for Data Cleaning.Institutenational de Recherche enInformation et en automatique,Technical Report 1999

    [3]Aebi,D.,Perrochon,L.Towards improvingdata quality.In:Sarda,N.L.,ed,Proceedings of the InternationalConference on Information Systems and Management ofData.1993,273~281

    [4]Rahm,E.,Do,H.H.Data cleaning:problemsand current approaches.IEEE Data EngineeringBulletin,2000,23(4):3~13

    [5]Oracle 9i白皮书

    [6]Mauricio A.Hernandez,SalvatoreJ.Stolfo.Real-world Data is Dirty:Data Cleasing and the Merge/PurgeProblem.

    [7]朱明数据挖掘 中国科学技术大学出版社

    [8]Kimball Ralph,the data warehouse toolkit,secondedition,wiley Computer Publishing.

    [9]张宁等.数据仓库中ETL技术的研究.计算机工程与应用.2002.24

    [10]王文彬等.基于移动行业的ETL方法及策略探讨.计算机工程.2003.2

    [11]M Hernandez. A Generation of Band Joins and theMerge/Purge Problem[R].Technical Report CCCS-005-1995,Department ofComputer Science,Columbia University,1995

    展开全文
  • 大数据处理过程之核心技术ETL详解

    万次阅读 2016-05-24 11:29:54
    ETL (数据转换)就是对数据的合并、清理和整合。通过转换,可以实现不同的源数据在语义上的一致性。抛开大数据的概念与基本知识,进入核心。我们从:数据采集、数据存储、数据管理、数据分析与挖掘,四个方面讨论ETL...
  • 5. 错误事件处理 错误在ETL系统设计之处就应该纳入考虑的范畴,错误可以分成两类:Error和Exception。 Error等级的错误,ETL系统会停止运行或跳过某个核心模块,这类错误一般需要设置报警机制,比如邮件或者webhook...
  • ETL异常原因总结及其处理方法 (2008-04-28 16:12:34)转载▼标签: etl it分类: 工作笔记ETL的错误在整个抽取、转换、装载过程都可能出现,对ETL常见的异常原因进行归类,大体上有五种情况:(1)硬件、OS、网络...
  • ETL详解

    2019-11-06 12:45:16
    ETL,是英文Extract-Transform-Load的缩写,用来描述将数据从来源端经过抽取(extract)、转换(transform)、加载(load)至目的端的过程,ETL是BI项目重要的一个环节,目的是将企业中的分散、零乱、标准不统一的...
  • ETL总结

    千次阅读 2017-06-19 10:48:34
    TA ETL 整个流程图如下:   基础知识:  1.非TA部分的ETL采用专用ETL工具例如DATA SERVICES抽取。  2.TA的ETL是软件自集成的功能,在TA后台完成。
  • ETL工具kettle批量插入数据异常情况 众多的Etl工具中,kettle是一个不是特别稳定的一个工具,不是特别建议使用,那么在使用kettle进行数据转换时,经常会出现的一个问题:批量数据插入目标库时,会中途异常,导致...
  • Oracle异常错误处理

    2015-04-17 16:27:31
    一、ORACLE 提供异常情况(EXCEPTION)和异常处理(EXCEPTION HANDLER)来实现错误处理。 1.异常处理的概念。 异常情况处理(EXCEPTION)是用来处理正常执行过程中未预料的事件,程序块的异常处理预定义的错误和...
  • ETL任务调度

    千次阅读 2020-06-16 15:25:45
    ETL任务用于定义数据的抽取,转换及装载规则。...定时调度难以处理多个相关ETL任务间的依赖关系,也无法有效处理ETL异常。对于某些不具备定时调度功能的ETL软件可以采用操作系统提供的定时功能,如Li
  • ETL Automation

    2020-03-26 19:31:24
    第一部分:ETL Automation简介 第二部分:ETL Automation架构 第三部分:ETL Automation环境变量说明 第四部分:ETL Automation目录结构说明 第五部分:ETL Automation服务说明 第六部分:ETL Automation知识库说明 ...
  • ETL流程

    2021-03-18 05:45:41
    ETL流程 数据抽取(Extraction) 1.抽取的数据源类型可以分为结构化数据、非结构化数据、半结构化数据 2.数据源可以来自爬虫数据、日志数据、第三方数据、HBASE、关系型数据库 3.结构化数据一般采用JDBC、数据库日志...
  • 处理过程错误:指的是在ETL过程的处理中发生的错误,这类错误是最严重的。例如,任务执行中触发了异常,系统资源不足,数据库连接失败等。对此类的错误,可以通过邮件提醒的方式来获取到,在处理过程中也增加相应的...
  • ETL面试

    2021-03-09 13:03:03
    答:逻辑数据映射(Logical Data Map)用来描述源系统的数据定义、目标数据仓库的模型以及将源系统的数据转换到数据仓库中需要做操作和处理方式的说明文档,通常以表格或Excel的格式保存如下的信息: 目标表名: ...
  • pentaho kettle是目前使用比较广泛的一种etl工具 但是在使用的时候如做定时任务 会存在如果任务异常停止会发生数据不准或者丢失数据的情况 这种情况在《Pentho Kettle Solutions》应该也有所涉及 但是并未给出实际...
  • 在使用开源ETL工具Kettle定义转换时,为了保证...因TableOutput涉及数据库事务,所以本篇文章以TableOutput步骤来探究kettle异常处理的方式。文章中难免错在遗漏和错误之处,敬请谅解。1 测试环境2 普通方
  • ETL-kettle-自定义错误信息处理

    千次阅读 2019-04-04 14:42:06
    在某些时候,并不希望kettle停止运行,这时候可以使用错误处理(Step Error Handling)。错误处理允许你配置一个步骤来取代出现错误时停止运行一个转换,出现错误的记录行将会传递给另一个步骤。 实现步骤: 右键...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 8,463
精华内容 3,385
关键字:

etl异常处理