浅谈ETL架构中ODS的做用以及如何在HaoheDI中自动建立ODS表

什么是ODS表?前端

在ETL架构中,源数据不多会直接抽取加载到数据仓库EDW,两者之间每每会设置一个源数据的临时存储区域,存储数据在清洗转换前的原始形态,一般被你们称作操做型数据存储,简称ODS,在Kimball维度建模理论中,将其称之为Staging Area(意为部队从一个战场转往另外一个战场的集结地),翻译过来称之为数据登台区,如图所示:数据库

img_20190307_112911

上图摘自Ralph Kimball的《数据仓库生命周期工具箱》数据结构

为何须要ODS?架构

ODS在整个数据中心体系架构中的具备很是重要的做用,体如今如下几点:运维

  1. 统一源数据的数据格式,下降数据清洗转换的复杂性

通常的数据仓库应用系统都具备很是复杂的数据来源,这些数据存放在不一样的地理位置、不一样的数据库、不一样的应用之中,从这些业务系统对数据进行抽取并非一件容易的事,好比有时源和目标不能直接连通,数据可能会用文件方式上传上来,这就须要将原始数据先落地到ODS中。所以,ODS用于存放从业务系统直接抽取出来的数据,这些数据从数据结构、数据之间的逻辑关系上都与业务系统基本保持一致,所以在抽取过程当中极大下降了数据转化的复杂性,而主要关注数据抽取的接口、数据量大小、抽取方式等方面的问题。各类原始数据以统一的格式存放在一个数据库中,更加便于后续的数据清洗与转换。工具

  1. 保留原始数据当时时点的快照,便于数据转换后的校验排错和批次重跑

业务系统中的数据是会发生增删改变化的,尤为是像客户、产品、机构这样的维度数据,其状态和属性都会随着时间不断改变,而数据仓库是须要记录并分析其历史状态的,如缓慢变化维(拉链表)和快照型事实表,在获得最终的统计分析结果以前,数据会通过一层一层的转换加工,期间会有大量的计算和处理逻辑,在ETL开发和运维过程当中,常常会发现某些公式或处理逻辑有误,修改以后不得不重跑以前一系列的批次数据,若是以前没有保留这些时点上的原始数据,则不少数据重跑将变得不可能,由于源系统中的部分数据已经发生了变化,另外将数据快照下来也便于和前端统计查询结果进行校验核对,以便找出出错缘由。spa

  1. 转移一部分业务系统细节查询的功能,并能够支持实时数据的查询统计

在数据仓库创建以前,大量的报表、分析是由业务系统直接支持的,在一些比较复杂的报表生成过程当中,对业务系统的运行产生至关大的压力。ODS的数据从粒度、 组织方式等各个方面都保持了与业务系统的一致,那么原来由业务系统产生的报表、细节数据的查询天然可以从ODS中进行,从而下降业务系统的查询压力。另外因为从源数据到最终的分析结果,须要经历较长时间的ETL转换,因此一些对实时性要求比较高的查询分析是能够直接从ODS中取数的,好比风控预警和实时仪表盘。翻译

ODS表长什么样?设计

ODS一般采用数据库进行存储,只存储对数据分析有价值的源数据,数据结构一般和源很是类似,在源表结构基础上会扩充字段以表示数据来源、数据日期、导入时间等审计信息。一个ODS表的例子:3d

clipboard

这个表存储天天按时间戳增量抽取的血糖检测记录,名称用O_前缀进行标识。红色区域的字段基本上和源表结构保持一致,也能够只存后期数仓中须要的字段,去掉一些没有必要的字段,另一些字段类型也能够作简单的改变,但要确保能够记录原始数据的原貌。开头的两个字段是ODS表新增的审计字段,其中ETLBATCHID表示数据的批次号,用于表示是哪一个时期(点)的数据,若是数据天天一个批次的话,这里将会存一个数字型日期如20190301(YYYYMMDD),若是是每小时一个批次的话,这里可能会存一个带小时的数字型时间如2019030108(YYYYMMDDHH),之因此存成数字型,是由于数字型占的空间更小,检索更快,另外在书写SQL是也比较简便。固然也可根据须要设为字符型或日期型。PROCESSTIME字段用来表示数据被抽取加载到ODS表的系统时间,该字段也能够省略。另外若是ODS表中的数据来自于多个数据源,则能够增长一个审计字段来表示数据的来源。

对于某些没有时间戳的维度表、代码表,其对应的ODS表要如何设计呢?其实也和上边的表同样,只须要在源表的结构以前增长批次号等审计字段便可,好比用户信息表:

clipboard[1]

若是没法经过时间戳或操做日志来判断哪些用户信息发生了改变的话,则每次抽取数据时选择全量抽取,即将源表中的这个时点的数据所有抽到ODS表,因为每次的快照都已存储下来,虽然有较大的冗余,但却很是便于在后续的ETL中利用比对的方式来判断哪些数据发生了变化。若是数据量较大,也能够采用表分区的方式。

如何快速批量的建立ODS表?

源系统的数据库类型多种多样,其中的表成百上千,针对这么多须要抽取的源表,有什么简便的方式能快速生成对应这些源表的ODS表吗?HaoheDI提供了一个的功能能够快速生成这些表,操做步骤以下:

一、在数据链接中选择要生成ODS表的目标数据库(数据中心),点击建立ODS表按钮:

clipboard[2]

二、弹出页面后,点击“选择源表”,选择对应的源链接和源表。如图:选择源数据库LOCALMYSQL中的这6张源表做为在HYDW目标数据库中对应的ODS表的模板。

clipboard[3]

三、删减部分表中没必要要的字段,这样在ODS表中将不会建立这个字段,默认是建立所有字段。

clipboard[4]

四、设置ODS表的命名规则,好比在源表名以前增长O_,也能够在表名以后添加后缀。

clipboard[5]

五、在自定义字段一栏中,选择要在ODS表中添加的审计字段:

clipboard[6]

示例:每一个表都将建立三个审计字段,设定其名称、字段类型、字段长度以及建立位置,保存。

clipboard[7]

六、其它表若是各项设定相同则选择同上便可,按Ctrl键选择所有或部分表,点击建立ODS表按钮

clipboard[8]

显示ODS表建立成功或失败的信息,建表语句在后台hhdilogs\common\日志中查看。

clipboard[9]

七、在目标数据链接的元数据中将新生成的ODS表结构导入:

clipboard[10]

查看表结构,检查表结构是否符合设定的规则。

clipboard[11]

 

建立完ODS表后,能够经过导入Excel模板的方式批量建立数据抽取任务。

相关文章
相关标签/搜索