ETL定义、四大模块及子系统说明

——《Pentaho Kettle解决方案》读书笔记 罗小川

目前公司正在进行数据仓库的建设的前期需求整理和项目启动阶段,想简单来谈一下自己对目前公司在用的ODS的kettle ETL的理解,针对日常运维中遇到的问题结合本书介绍的ETL子系统的建立可以更好的解决目前我们公司ODS系统的运维和运行效率问题,同时对后期数仓ETL的整体设计和四大组建进行梳理,笔记中有些内容直接引用原书。

一、什么是ETL

ETL: 抽取、转换和加载。将数据从OLTP系统中转移到数据仓库中的一系列操作的集合。

抽取:一般抽取过程需要连接到不同的数据源,以便为随后的步骤提供数据。这一部分看上去简单而琐碎,实际上它是ETL解决方案成功实施的一个主要障碍。

转换:在抽取和加载之间,任何对数据的处理过程都是转换。这些处理过程通常包括(但不限于)下面一些操作:

1.移动数据

2.根据规则验证数据

3.数据内容和数据结构的修改

4.集成多个数据源的数据

5.根据处理后的数据计算派生值和聚集值

加载:将数据机载到目标系统的所有操作。加载并不仅仅是将数据批量装载到目标表。加载过程还包括对代理键的管理和对维度表的管理等。

ELT(抽取、加载和转换)同ETL在数据整合的方法上略微不同。ELT下,数据首先从数据源进行抽取,加载到目标数据库中,再转换为所需要的格式。所有大数据量处理全部放在目标数据库中进行。这样做的好处在于,一般情况下,数据库系统更适合处理负载在百万级以上的数据集成。数据库系统也通常会对I/O(吞吐量)进行优化,用来提高数据处理速度。

数据模型:星型模型,每一个维度都是一个单独的维度表。除了日期和时间维,其它每个维表都使用自增列作为代理主键。

二、ETL系统的四大模块及34个子系统

ETL系统的四大块:抽取、清洗和更正、发布、管理。发布不仅仅是把数据写入到目标数据库中,也包括把数据写入到维度表或事实表中的那些转换。管理是对企业信息基础架构的管理。

ETL子系统被重构为34种子系统:

一、抽取

1. 数据剖析系统:目标是分析不同数据源的结构和内容。

2. 增量数据捕获系统:目标是捕获系统里数据的变化。

3. 抽取系统:从不同的数据源抽取数据,并输入到ETL流程里。

二、清洗和更正数据

4. 数据清洗和质量处理系统

5. 错误事件处理

6. 审计维度:审计维度表是一类特殊的维度表,数据仓库里所有的事实表都和审计维度表关联,审计维度表包含了对事实表变更的元数据,加载数据的日期和时间、数据的质量指标等。

7. 排除重复记录系统

8. 数据一致性:使来源于多个业务系统的事实数据遵照相同的维度。

三、数据发布:不仅是将数据插入到目标数据库那么简单。还要生成代理键、查询正确的维度键、加载事实数据。

9. 缓慢变更维度处理:几种缓慢变更维度方法:覆盖、增加新行、增加新列、增加一个小维度表、分离历史表、混合型。

10. 代理键生成系统

11. 层次维度构建:层次可以让用户分析查看维度不同级别上的数据。

12. 特殊维度生成系统:时间维度、杂项维度(垃圾维度)、小维度、收缩的或上卷的维度、静态维度(小的字典表或参照表)、用户自定义维度。

13. 事实表加载:事务粒度加载表、周期快照事实表、累积快照事实表。

14. 代理键管道:负责抽取正确的代理键,用于加载事实表。

15. 多值维度桥接表生成系统:处理不同深度的层次时或有多个维度项和事实表或其他维度表关联时。

16. 迟到数据处理:事实表和维度表数据都可能晚到。维度表迟到会比较麻烦。

17. 维度管理系统:中心控制系统,用来准备和向数据仓库发布正确的维度。

18. 事实表管理系统:负责任何创建、组织、管理和事实表相关的任务。

19. 聚集构建:聚集表能大幅提升性能,但需要维护聚集表。

20. OLAP Cube构建系统

21. 数据整合管理系统:从数据仓库获取数据,并把数据发送到其他环境中,通常用于离线数据分析或其他特殊目的,如给特定客户发送报表。

四、管理ETL环境

22. 作业调度

23. 备份系统。三个地方:1.抽取之后,改动之前;2.清洗、排重、更正之后;3.已经做完最后处理,写入数据仓库之前。通常数据仓库本身备份不是ETL工作。

24. 恢复和重新启动系统。

25. 版本控制子系统

26. 从开发环境到测试、生产环境的版本移植系统。

27. 工作流监控

28. 排序系统:分组、排序合并

29. 血统和依赖分析:提供血统分析和影响分析功能。

30. 问题报告系统

31. 并行/管道系统:任务的并行或在集群上执行。

32. 安全系统

33. 合规报告系统

34. 元数据资源库管理系统:目标是捕获到和ETL相关的所有业务、过程和技术元数据。重要的一部分就是系统文档化。

  以上34个配套子系统的建立对公司ETL系统的管理会更加精确、并易于维护人员的日常管理。在新的数仓建设的ETL过程中,我们会加强对ETL功能子系统的建设和标准要求,提升公司整体数据治理的规划性和数据准确性。

ETL定义、四大模块及子系统说明的更多相关文章

  1. 将对象的所有属性名放到一个数组中 || 获得对象的所有属性名 || return;不具有原子性 || 怎样自己制作异常|| 判断对象有没有某个属性 || 当传递的参数比需要的参数少的时候,没有的值会被赋予undefined || 获得函数实际传递的参数 || 怎么用函数处理一个对象 || 用一个名字空间定义一个模块所有的函数 || 给一个对象添加方法

    获得对象的所有属性名 || 将对象o的所有属性名放到数组中 var o = {x:1,y:2,z:3}; var arr = []; var i = 0; for(arr[i++] in o){};/ ...

  2. python之定义参数模块argparse(二)高级使用 --传参为函数的实现

    我们在文章python之定义参数模块argparse的基本使用中介绍了argparse模块的基本使用方法 当前传入的参数只能是int.str.float.comlex类型,不能为函数,这有点不方便,但 ...

  3. OpenCV 的四大模块

    前言 我们都知道 OpenCV 是一个开源的计算机视觉库,那么里面到底有哪些东西?本文将为你解答这个问题. 模块一:CV 这个模块是 OpenCV 的核心,它包含了基本的图像处理函数和高级的计算机视觉 ...

  4. thinkphp3.2定义多模块并设置默认模块

    前台入口文件index.php <?php // +---------------------------------------------------------------------- ...

  5. 第10.5节 使用__all__定义Python模块导入白名单

    一. 引言 <第10.4节 Python模块的弱封装机制>介绍了Python模块的的弱封装机制,除了使用弱封装机制来从一定程度上防止导入特定成员外,Python模块中还提供可另外一种类似白 ...

  6. python之定义参数模块argparse(一)基本使用

    在shell脚本中,若脚本带参数,则在脚本中使用$1.$2...等引用, 在python中,也可以定义类似的引用参数,可以为必选项也可以可选项. 基本用法如下三种: 1.必选项(位置参数) impor ...

  7. 将Angular6自己定义的模块发布成npm包

    创建自己的模块组件 1. ng new 一个工程 2. ng g m 创建模块 例如我这里的modules文件下创建header模块 3. ng g c modules/head 创建一个hear组件 ...

  8. AngularJS标准Web业务流程开发框架-4.AngularJS四大模块之一:Controller

    一.Controller的创建 angular.controller("name",funtion($scope){ }) 1.name:控制器的名称(建议参考Java包的命名规范 ...

  9. RequireJS 模块的定义与加载

    模块不同于传统的脚本文件,它良好地定义了一个作用域来避免全局名称空间污染.它可以显式地列出其依赖关系,并以函数(定义此模块的那个函数)参数的形式将这些依赖进行注入,而无需引用全局变量.RequireJ ...

随机推荐

  1. FlowPortal BPM 明细表中新添加的行一直排在最后的问题

    明细表中的数据提交过之后再编辑时,添加的行不管在第几行添加都显示在最后一行的问题 Solution:明细表的数据库表中加字段OrderIndex,设为必填,系统会自动排序

  2. Go 函数编程

    函数的声明 在 Go 语言中,函数声明通用语法如下: func functionname(parametername type) returntype { // 函数体(具体实现的功能) } 函数的声 ...

  3. 《数据结构与算法之美》 <06>栈:如何实现浏览器的前进和后退功能?

    浏览器的前进.后退功能,我想你肯定很熟悉吧? 当你依次访问完一串页面 a-b-c 之后,点击浏览器的后退按钮,就可以查看之前浏览过的页面 b 和 a.当你后退到页面 a,点击前进按钮,就可以重新查看页 ...

  4. IPC——管道

    概述 管道通信分为无名管道.有名管道 管道通信的本质 不管是有名管道,还是无名管道,它们的本质其实都是一样的,它们都是内核所开辟的一段缓存空间.进程间通过管道通信时,本质上就是通过共享操作这段缓存来实 ...

  5. centos7误删yum源的解决办法 ( -bash: yum: command not found)

    这里以安装阿里的yum源为例: 1.查看自己的centos版本 cat /etc/redhat-release 2.进入阿里云源站地址:http://mirrors.aliyun.com/centos ...

  6. MySQL进阶 9: 联合查询 - 查询语句1 union 查询语句2 union ...

    #进阶 : 联合查询 /* union 联合 合并: 将多条查询语句的结果合并成一个结果 语法: 查询语句1 union 查询语句2 union ... 应用语境: 要查询的结果来自多个表,但查询的列 ...

  7. MySQL-进阶7-子查询 - select后/where后/from后/ []where后/having后] / exists后面 的相关子查询

    /*SQL-进阶7-子查询 含义:出现在其他语句中的select 语句,称为子查询或内查询 外部的查询语句,称为主查询 或者 外查询 分类1:按子查询出现的位置———— select 后面:仅仅支持标 ...

  8. 跨域问题——学习ing

    问题 跨域:我写了一个页面,在js中写了请求,这个请求的url跟我这个页面不在一个域名,那么这个请求就是跨域请求. 跨域会怎么样:没见过,可能就不让你请求呗,为了安全考虑之类的.(涉及浏览器的同源策略 ...

  9. linux实操_shell自定义函数

    基本语法: #定义函数 function 函数名(){ 函数体 } #调用函数 函数名 参数1 参数2... 实例:计算两个数的和. 运行后

  10. 通过Chrome控制台详细查看ajax请求

    1.F12打开浏览器开发者工具 2.如图所示