ETL的过程

ETL过程中的主要环节就是数据抽取、数据转换和加工、数据装载。

1.1 从数据库中抽取数据的方式:

1.1.1 全量抽取

全量抽取类似于数据迁移或数据复制,它将数据源中的表或视图的数据原封不动的从数据库中抽取出来,并转换成自己的ETL工具可以识别的格式。

全量抽取比较简单。

1.1.2 增量抽取

增量抽取只抽取自上次抽取以来数据库中要抽取的表中新增或修改的数据。

在ETL使用过程中,增量抽取较全量抽取应用更广,如何捕获变化的数据是增量抽取的关键。

对捕获方法一般有两点要求:

  • 准确性,能够将业务系统中的变化数据按一定的频率准确地捕获到;
  • 性能,不能对业务系统造成太大的压力,影响现有业务。
1.2 手工开发抽取作业时候的常用方法:

1.2.1 当数据源和DW为同一类数据库时

一般情况下,DBMS(SQLServer、Oracle)都会提供数据库链接功能,可以在数据源(业务系统)和DW内建立数据库链接(如DB2的联邦数据库NICKNAME),然后在DW内直接SELECT访问。

  • 优点是实现使用简单,逻辑简单;
  • 缺点是容易被滥用对源数据库造成较大的负载压力。

1.2.2 当数据源和ODS为不同类型数据库时

  • 将源数据库的数据导出为文本文件,利用FTP协议进行传输导入ODS区域。
  • 优点是实现简单,对源系统压力较小。
  • 缺点是传输步骤增加了,处理需要的时间增加。
  • 将部分数据库间能通过ODBC建立源数据库和目标数据库链接,此时也能直接使用SELECT获取数据。
  • 优点是实现使用简单,逻辑简单;
  • 缺点是容易被滥用对源数据库造成较大的负载压力,且建立时较为复杂。
2.1 数据清洗

任务是过滤不符合条件或者错误的数据。

这一步常常出现在刚刚开始建立数据仓库或者源业务系统仍未成熟的时候,此时发现错误数据需要联系源业务系统进行更正,部分可预期的空值或者测试用数据可以过滤掉。

 

2.2 数据转换和加工

这一步是整个ETL流程中最为占用时间和资源的一步。

数据转换包含了简单的数据不一致转换,数据粒度转换和耗时的数据关联整合或拆分动作。

这里可能存在各种各样千奇百怪的需求。

对于核心数据仓库来说,里面往往是对数据进行按照主题划分合并的动作。

同时,也会添加一些为了提升执行效率而进行反范式化添加的冗余字段。

数据的转换和加工可以在ETL引擎中进行,也可以在数据抽取过程中利用关系数据库的特性同时进行。

根据实现方式的不同,可以区分为使用数据库存储过程转换和使用高级语言转换

2.2.1 ETL引擎中的数据转换和加工

ETL引擎中一般以组件化的方式实现数据转换。

常用的数据转换组件有字段映射、数据过滤、数据清洗、数据替换、数据计算、数据验证、数据加解密、数据合并、数据拆分等。

 

2.2.2 在数据库中进行数据加工

关系数据库本身已经提供了强大的SQL、函数来支持数据的加工,如在SQL查询语句中添加where条件进行过滤,查询中重命名字段名与目的表进行映射,substr函数,case条件判断等等。

下面是一个SQL查询的例子。

select ID as USERID, substr(TITLE, 1, 20) as TITLE, case when REMARK is null then ' ' else REMARK end as CONTENT from TB_REMARK where ID > 100;

2.2.3 使用数据库存储过程转换

使用SQL开发存储过程完成转换作业是很多银行常用的方法。

  • 优点是开发简单、能支持绝大部分转换场景;
  • 缺点在于占用资源多且受制于单一数据库性能,无法做到横向扩展。

因此,除了业务的理解能力外,对SQL海量数据处理的优化能力在此也非常重要。

比如:

  • 利用数据库的分区性,选择良好的分区键。
  • 建表时合理选择主键和索引,关联时候必须使用主键或索引进行关联。
  • 关注数据库对SQL的流程优化逻辑,尽量选择拆分复杂SQL,引导数据库根据你选择流程进行数据处理
  • 合理反范式化设计表,留出适当的冗余字段,减少关联动作。

2.2.4 使用高级语言转换

使用高级语言包含了常用的开发C/C++/JAVA等程序对抽取的数据进行预处理。

 

3. 加载作业

将转换和加工后的数据装载到目的库中通常是ETL过程的最后步骤。

转换作业生成的数据有可能直接插入目标数据库,一般来说,这种情况常见于使用数据库存储过程进行转换作业的方案。

 

装载数据的最佳方法取决于所执行操作的类型以及需要装入多少数据。当目的库是关系数据库时,一般来说有两种装载方式:

  1. 直接SQL语句进行insert、update、delete操作。
  2. 采用批量装载方法,如bcp、bulk、关系数据库特有的批量装载工具或api。

转载自https://www.jianshu.com/p/d43a517903ca

转载于:https://my.oschina.net/u/4085644/blog/3018973

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1.什么是逻辑数据映射?它对ETL项目组的作用是什么? 2.在数据仓库项目中,数据探索阶段的主要目的是什么? 3.如何确定起始来源数据? 架构 4.在ETL过程中四个基本的过程分别是什么? 5.在数据准备区中允许使用的数据结构有哪些?各有什么优缺点? 6.简述ETL过程中哪个步骤应该出于安全的考虑将数据写到磁盘上? 抽取 7.简述异构数据源中的数据抽取技术。 8.从ERP源系统中抽取数据最好的方法是什么? 9.简述直接连接数据库和使用ODBC连接数据库进行通讯的优缺点。 10.简述出三种变化数据捕获技术及其优缺点。 数据质量 11.数据质量检查的四大类是什么?为每类提供一种实现技术。 12.简述应该在ETL的哪个步骤来实现概况分析? 13.ETL项目中的数据质量部分核心的交付物有那些? 14.如何来量化数据仓库中的数据质量? 建立映射 15.什么是代理键?简述代理键替换管道如何工作。 16.为什么在ETL过程中需要对日期进行特殊处理? 17.简述对一致性维度的三种基本的交付步骤。 18.简述三种基本事实表,并说明ETL过程中如何处理它们。 19.简述桥接表是如何将维度表和事实表进行关联的? 20.迟到的数据对事实表和维度表有什么影响?怎样来处理这个问题? 元数据 21.举例说明各种ETL过程中的元数据。 22.简述获取操作型元数据的方法。 23.简述共享业务元数据和技术元数据的方法。 优化/操作 24.简述数据仓库中的表的基本类型,以及为了保证引用完整性该以什么样的顺序对它们进行加载。 25.简述ETL技术支持工作的四个级别的特点。 26.如果ETL进程运行较慢,需要分哪几步去找到ETL系统的瓶颈问题。 27.简述如何评估大型ETL数据加载时间。 实时ETL 28.简述在架构实时ETL时的可以选择的架构部件。 29.简述几种不同的实时ETL实现方法以及它们的适用范围。 30.简述实时ETL的一些难点及其实现方法。 ......

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值