ETL系列专题2——ETL中的数据结构

数据结构这个名词对计算机科学专业的同行一定十分熟悉,在我们工作中也是无处不在地使用数据结构,本章节首先介绍一下数据结构的概念和主要作用(请大家忍受一下笔者的啰嗦),然后着重介绍一下数据结构在ETL中的使用。

什么是数据结构

数据结构是针对数据的组织与存储需要而设计的一种数据格式。常见的数据结构类型有数组,文件,记录,线性表,链表,树,图等等。任何一种数据结构的选择和设计的目的都是为了更加方便地访问和处理数据。在程序设计里面,数据结构通常会被用在某种算法中。

为什么要数据结构

数据一旦被结构化,标准化,那么它的操作方式也将随之标准化,控制模式固定化。举个例子:比如我们进行数据抽象时,把数据结构抽象定义为一棵二叉树,那么这个数据的访问方式就随之有了“范本”:层次遍历或者深度遍历,所有业务处理都将可以套用这2类规范算法得以实现。

ETL中的数据结构

约定:这里讨论的ETL数据结构是指在ETL中四个核心过程中涉及到的数据结构,而不包含源系统中的数据结构(事实上,ETL必须要考察源系统的数据结构)。

ETL数据结构主要是Staging 过程中使用的数据结构?我们讨论ETL时经常使用Staging area 这个名词,什么是Staging? Staging可以理解为“写盘”,就是数据物理存储化,所以non-staging就可以理解为完全的内存存储处理。ETL中的数据结构主要是指Staging数据结构。

为四个核心步骤建立Staging Area

这里就笔者经验而言强烈建议ETL架构设计者们为四个核心步骤处理过程设置Staging数据,Staging数据不但为ETL系统提供可靠性保障,而且可以帮助ETL系统模块化分析,简化ETL开发的复杂程度,更有效地支持ETL团队协同开发的效率(这点容易理解,每个步骤的终点都是各自的Staging Area,下一个步骤的起点是上一步骤的Staging数据/结构),因此各个步骤的Staging数据结构定义完成后,各个步骤的开发工作可以同时开展。

要不要Staging

这是一个纠结的问题,也是ETL架构师必须做出选择的一项重要决策,要不要Staging数据,要怎样粒度的Staging数据?很明显,Staging意味着更多的I/O花费,Staging与内存存储的效率是没办法相比较的!但是,ETL架构师除了需要考虑数据处理性能问题之外还要考虑的一个问题就是ETL可能失败,失败后ETL如何再次工作的问题。举个例子,如果ETL在数据清洗阶段失败,我们还需要重新启动ETL作业,从抽取步骤重头再来吗?这种重头再来,开起来似乎并不豪迈! ETL恢复运行的能力,是ETL系统健壮性的重要指标。而ETL具备恢复运行能力的重要前提就是处理过的数据已经写盘(Staging data),为ETL恢复运行提供运行点的支持。

所以决定是否要Staging Data的两个重要方面影响因素,同时也是一对矛盾因素:

1、快速完成数据从源数据到目标的转换加载过程;

2、使ETL具备恢复运行的能力,而不是从头再来的豪迈人生。

几点建议

1、  恢复运行支持型Staging数据,抽取数据后立即做Staging,这里可以是DBMS的表,也可以是文件系统形式;同理,在重要的转换完成之后,也立即做Staging,为ETL恢复运行提供checkpoint

2、  备份型Staging数据, DW/DM通常容量惊人,不容备份,但是可以通过备份Staging数据来确保DW数据安全,这里建议一种文件系统的备份方式:好处在于,占用空间小,易压缩,易存储。当DW数据需要恢复时,只要把Staging数据文件解压,输入到ETL系统,DW/DM数据即可完成恢复;

3、  检验型Staging数据,数据仓库系统中源数据多种多样,中间转换过程复杂,ETL架构设计者不应该理想化系统。要意识到数据在ETL过程中可能出现丢失或错误处理的可能性,因此,Staging数据为比较原始数据与DW/DM数据的差异提供支持,进而分析ETL处理过程中是否有错误的处理方式。

 

设计Staging Area

Staging 数据的特点

1、  Staging AreaETL 团队设计的数据结构,ETL团队独立负责Staging Area数据结构的设计与维护。供ETL系统使用,且仅供ETL系统使用!比如Staging Area不会为了展示查询而建立索引或汇总。

2、  不允许用户使用Staging Data,任何用户私自修改了Staging Data都将最终影响DW/DM数据质量。

3、  报表不允许访问Staging Data

4、  只有ETL过程可以访问或修改Staging Data

ETL数据结构

平面文件

也许我们更愿意用DBMS去做Staging数据存储,只因为我们对SQL情有独钟。其实,使用DBMS并未必是一个好的选择,但让如果你的ETL过程都是使用SQL语句来完成的,那么你除了用DBMS之外将别无选择。然而,如果你有ETL工具(就目前的ETL工具而言,它们处理数据的格式已经多种多样),或者熟练于脚本语言,那么你完全可以选择平面文件(或序列文件)作为Staging 数据结构,而且处理起来会让你惊喜。因为这些处理将直接使用操作系统提供的文件处理功能。而DBMS需要更多的维护过程。

什么时候使用平面文件,什么时候使用DBMS

使用DBMS:

1、用作被查找的Staging 数据

2Staging data 之间需要Join

使用平面文件:

1、用于ETL恢复运行的Staging Data

2、用于排序,通常ETL工具的排序性能比DBMSOrder by来的好些;

3、替换操作在文本文件里比在DBMS table里面更好些

4、汇总,ETL汇总操作是在数据库之外的操作,ETL工具通常提供专门的排序功能处理汇总时的排序操作,比在数据库内部完成排序是件大花费工作。

5、数据量较小的用于参照作用的数据。这样的数据可以由ETL工具一次性加载到内存,反复提供参照使用。

XML 数据格式

1、  XML数据在ETL通常不用做固定数据的Staging数据结构

2、  XML数据使用时需要格式文件的配合使用,以确保正确解析,详细资料请参考DTDs XSLT相关文档

3、  常用于配置文件和数据传输

关系型数据格式

使用关系表作为Staging数据结构是数据库技术人选喜欢的。尤其是当没有ETL工具支持的情况下完成ETL过程的时候。

关系表结构有很多优点:

1、  元素据透明,DBMS帮助我们完成元素据管理

2、  数据完整性和参照完整性由DBMS完成

3、  易于访问,技术人员都非常熟悉SQL

4、  DBA支持,很多企业都有DBA团队,因此DBA团队成为ETL团队的有力支持

5、  DBMS提供很多操作接口和功能,方便数据处理

独立的数据库表结构

当使用DBMS作为Staging数据存储时,将面临很多选择,但这里提醒大家在架构ETL staging Area时一定要时刻提醒自己:业务系统的设计的核心是围绕收集数据的;多维模型围绕的核心是查询数据的;而Staging Area要做这两部分内容!

以此,在Staging数据结构中使用混合型的数据架构方式是不足为奇的,也是有必要的。独立的数据库表结构,是指各个表之间没有依赖关系。为什么要使用这种独立的数据库表结构的理由,我们可以归结为“一个字”,简单!主要是操作简单,可以用SQL操作。从经验看,由于这些表之间没有关联,应该使用数据库之外做Staging

在使用独立的数据库表结构时一定要注意设置合理的索引来增强数据访问性能,在这种Staging Area上一般不需要建立位图索引,集中精力设置好单列B-tree索引或混合列的B-tree索引。

3NF

3NF主要作用在于消除冗余,结构化非常强,但是从不同系统过来的数据的格式是多种多样的,如果到Staging Area被强制统一为3NF却可能在架构设计过程中给实施增加复杂度,而且也有悖于上述提及的Staging数据结构需要顾及收集和查询两方面性能的作用。

千万不要认为Staging数据一定要做正规化处理,还是ETL那两条原则:

1、快速加载

2、恢复运行的能力

如果在ETL过程中存在一些Stages无助于上述任何一条原则,那么不要犹豫,干掉它们!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
⼤数据整理 ⼤数据整理——数据集成 数据集成 数据集成 数据集成 1.背景: 背景: 因业务需要,事业单位内部普遍构建了多个异构的信息系统,这些信息系统管理的数据源彼此独⽴、相互封闭,形成"信息孤岛"⽆法形成 快速有效的共享。 2.定义: 定义: 数据集成把⼀组⾃治、异构数据源的数据进⾏逻辑或物理上的集,并对外提供统⼀的访问接⼝,从⽽实现全⾯的数据共享。 3.举例: 举例: 杭州市政府⼯作报告的"最多跑⼀次"改⾰,许多互联⽹应⽤(包括机票、酒店,餐饮,租房,商品⽐价等服务)都是把来⾃不同数据源的 数据进⾏有效集成,对外提供统⼀的访问服务。 4.解决⽅案 解决⽅案 数据源的异构性和⾃治性是数据集成系统⾯临的两个主要挑战。针对这两个挑战,数据集成通常采⽤如下两种解决⽅案。 4.1数据仓库 数据仓库 ⼈们把⼀组⾃治数据源的数据加载并存储到⼀个物理数据库(称为数据仓库),然后在数据仓库上对集成后的数据进⾏后续的操作和分 析。如下图所⽰,基于数据仓库的数据集成系统架构 基于数据仓库的数据集成系统架构 数据仓库技术涉及的技术包括ETL、元数据管理和数据仓库本⾝涉及的技术。 ETL:定期地从各个数据源抽取(extract)、转换(transform)、加载(load)数据到数据仓库. 数据仓库:物理数据库,存放从数据源ETL的数据,以供数据应⽤层使⽤。 元数据管理:涉及对数据源的描述、对数据仓库数据的描述、数据仓库数据与数据源数据之间的语义映射。 4.2虚拟集成系统 虚拟集成系统 在虚拟集成系统,数据保存在原来的数据源,只在查询时才需要访问。如下图所⽰,基于间模式的数据集成系统架构。 基于间模式的数据集成系统架构 虚拟集成系统主要使⽤间模式建⽴全局数据的逻辑视图,为异构数据源提供⾼层次的数据访问服务。 数据库:提供数据,独⽴性强 封装器: 负责把上层⽤户的查询转发到数据源,并把数据源返回的结果转发给上层的应⽤ 间模式:向下协调各数据源系统,向上为访问集成数据的应⽤提供统⼀数据模式和数据访问的通⽤接⼝。 元数据:维护数据源的基本信息以及间模式到数据源之间的语义映射等。 4.3 技术细节 技术细节 ⽆论是基于数据仓库还是基于间模式的数据集成系统,都需要完成实体与关联抽取、模式匹配(schema matching)、实体对齐(record linkage或entity resolution)和实体融合(data fusion)这4个步骤。 4.3.1 实体与关联抽取 实体与关联抽取 ⾯向结构化数据的实体与关联抽取技术⽐较直观,⾯向⾮结构化数据的实体与关联抽取****可参考第4.1节。** 4.3.2 模式匹配 模式匹配 模式匹配主要⽤于发现并映射两个或多个异构数据源之间的属性对应关系,在⼤规模数据背景下尤为重要。⽬前,基于朴素贝叶斯、 stacking等机器学习算法的模式匹配得到了⼴泛的研究,并在某些特定领域得到了良好的应⽤。基于模式匹配,实体对齐的⽬标是根据匹配 属性的记录特征,将数据源指代同⼀实体的记录连接起来。 4.3.3 实体对齐 实体对齐 实体对齐主要分为3个步骤:获取候选集、成对匹配、聚簇处理。⼴义地说,实体对齐的⽅法可以划分为⽆监督学习和有监督学习。随着⼈ ⼯智能技术的发展,基于决策树、Logistic回归、⽀持向量机(sup port vector machine,SVM)的机器学习⽅法以及基于词向量(word embedding)的深度学习⽅法被应⽤于实体对齐,以提⾼算法的性能。 4.4.4 实体融合 实体融合 实体对齐可以把⼀组数据源同⼀实体的不同记录连接起来,由于数据质量问题,这些记录在描述同⼀实体时可能存在数据冲突,例如同⼀ 个⼈的住址在不同数据源之间的描述可能是不⼀样的。 因此,在数据集成的最终环节,实体融合旨在消除不同数据源之间同⼀个实体属性值的冲突,将不同的数据信息进⾏综合,从⽽提取出统 ⼀、丰富、⾼精度的数据。实体融合的主要⽅法包括基于规则的⽆监督学习、结合标注数据的半监督学习等。虽然基于标注数据的半监督学 习在精度、召回率等⽅⾯均获得了令⼈满意的效果,但是其最⼤的挑战在于带标签训练数据的获取往往需要耗费较⼤的⼈⼒和物⼒。如何利 ⽤主动学习获取训练数据以降低研究代价,是当前学术界和⼯业界研究的热点话题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值