为什么要介绍ETL中的数据结构?前面我们说过了什么是数据集结,不同的数据结构在集结区里的意义和作用不尽相同,我们应该根据不同的数据结构来规划和设计集结区,从而来支持所需的元数据。元数据是个大话题,就连本书的作者在书中也都是围绕着元数据来谈数仓的。
数据应该存在哪?
数据的存储要么在内存,要么在硬盘。两者的利弊大家都很清楚,前者访问速度快但数据已丢失,后者虽能保证数据安全但是I/O成本太高,如何在二者中均衡是针对业务的所有架构设计的挑战,无论在关系型数据库还是在数仓中,我们的目标都应该是:
- 将数据以最快的速度从数据源获取提供给最终用户
- 在处理过程中发生错误时能够进行恢复,无需从头开始
数据在进入数仓前清洗前一定要集结,前面我们介绍过,ETL数据流主线的每个阶段都要集结,之所以要在数据抽取阶段进行数据集结主要因为以下原因:
- 可恢复
- 备份
- 审计
数据集结区的数据是不断积累的,正如数仓的设计初衷一样,在数据仓库中,数据只增不减,而集结区中的数据有时甚至比整个数据仓库的数据量都大,所以集结区的设计和选择尤其重要。
数据集结区分为持久集结区和临时集结区。历史集结区是为了维护历史信息而使用的;临时集结区中的数据在每次加载过程后会被删除,这两种集结区在数据仓库中要混合使用。数据集结区必须按如下原则设定:
- 数据集结区的所有者必须是ETL小组
- 无论任何原因,用户都不许进入数据集结区
- 报表不能从集结区访问数据
- 只有ETL流程才能够读写集结区
集结区创建完成后,ETL小组需要向运维人员提供数据规模估算表,估算表的中应该列出了集结区中每张表的如下信息:
- 表名称:集结区中表或者文件的名字,在估算表中,每个表名称占用一行
- 更新策略:表的维护方式,针对永久表和临时表维护方式不同。永久表的策略为追加、更新/删除;临时表的策略为删减和重新加载
- 加载频率:通常是每日一次,也可根据业务实际情况选择任意时间间隔
- ETL作业:估算表中应列出操作集结区表和文件的所有作业信息
- 初始行数:ETL小组必须估计在集结区初始的时候每个表中的记录数,通常和源表和目的表的行数有关
- 增长:定义集结区中表的增长时间、情况等
- 预计每月行数:根据历史和业务规则
- 预计每月字节数:平均行长度*每月行数
- 初始表大小:平均行长度*初始行数
- 6个月表大小:(平均行长度 * 初始行数) +(平均行长度 * 预计月行数 * 6)) /1,048,576
ETL系统中的数据结构
ETL中的数据类型除了关系型数据库中的数据表还有许多形式,包括:
- 平面文件
- XML数据集
- 关系表
- 非关系型数据源
- 维度数据模型
平面文件相对于关系型数据库存存取的优点在于它是出于保护和恢复的目的而进行的源数据的集结;在排序方面,文件系统可能相较与DBMS效率更高;在数据过滤方面,关系型数据库需要在源端和目的端强制创建索引,再通过where条件筛选,使得事务的处理得到妨碍。而对于文件只需要使用grep工具就可以做到;类似的在文本串替换的时候也可以直接使用tr工具;在关系型数据库中使用聚合功能也是对数据库产生巨大的压力;而针对源数据方面来说,平面文件不存在格式转换和内容中数据类型的转换工作,相对于不同的关系型数据库兼容性更高。
XML数据集一般在数仓中不用于永久型集结区,更适合做ETL系统的输入和输入的标准格式。
关系表的数据结构,意味着利用数据库存储集结区的数据,主要有以下优点:
- 直观的元数据
- 关系能力
- 开放的资料库
- DBA支持
- SQL接口
集成非关系型数据源时需要作一些完整性检查。由于非关系型数据源不能保证参照的完整性,导致非关系型的数据源中多少都会有些数据质量的问题。而针对数据质量的问题,在ETL系统中应该有相应的作业进行处理。
维度数据结构时从后台提交到前台的成果。就现在的数仓市场情况而言,数据中台大部分都是使用维度数据结构。维度模型除了创建简单、结构稳定之外,也是满足通常的关系型查询最快的数据结构,并且也是构成OLAP立方体的基础。维度模型是围绕着度量过程建立的,包括事实表和维度表 ,后续我们会通过案例来详细介绍维度数据模型的使用。
规划和设计标准
数据集结区同数据库相比需要进行更多的管理和维护。ETL的规划和设计标准应包括影响分析 、元数据捕获、命名规则、审计数据的转换步骤等。
所谓影响分析是指在源系统和目标系统出现变化时,ETL系统应该明确这些变化会带来哪些影响,因为只有ETL系统的流程使用才知道这些分散的元素之间的关系。
从集结区衍生出来的元数据类型包括:
- 数据谱系:也称逻辑数据映射,阐述数据元素从原始数据源到最终数据仓库目标之间的转换方式
- 业务定义:用来在展示区维持数据一致性
- 技术定义:表设计的详细文档
- 过程元数据:集结区表的加载过程和数据仓库表加载过程的信息统计
命名规则应该有详细的标准,能够做到见命知意并能与其它表进行区分。命名上要有特定的标记表明是数据集结区中的表。
数据转换体现了ETL系统中复杂的业务规则,ETL需要对全部的数据转换过程进行全程审计,所包含的任务如下:
-
用代理键代替自然键
-
对实体进行组合和去重
-
对维度的常用实体进行规格化
-
对计算进行标准化,创建规格化的KPI
-
在数据清洗过程中对数据进行更正和强制转换
以上就是ETL中常见的数据结构,其实数仓近几年伴随着大数据发展的很快,除了常见的E-R模型、维度模型还有DataVault等其它的数据模型,感兴趣的同学可以了解一下。下一篇我们将介绍详细的数据抽取内容。