[原创]-数据仓库ETL开发

[原创]-数据仓库ETL开发ETL开发概述ETL是数据仓库的后台,主要包含抽取、清洗、规范化、提交四个步骤,传统数据仓库一般分为四层模型。分层的作用:1.划分ETL阶段工作重心,便于管理2.降低开发和维护成本3.减…

大家好,又见面了,我是你们的朋友全栈君。

[原创]-数据仓库ETL开发

ETL开发

概述

ETL数据仓库的后台,主要包含抽取、清洗、规范化、提交四个步骤,传统数据仓库一般分为四层模型。

[原创]-数据仓库ETL开发

分层的作用:

1.划分ETL阶段工作重心,便于管理

2.降低开发和维护成本

3.减少需求变化带来的冲击

4.便于数据问题跟踪

名词解释:

  • ODS——操作性数据

  • DW——数据仓库

  • DM——数据集市

[原创]-数据仓库ETL开发

STG层

在维度建模阶段已经确定了源系统,而且对源系统进行了数据评估。STG层是根据CDC策略把各个源系统的数据抽取到数据仓库中。STG层主要是面向批处理的形式,如果是根据日志信息实时同步,可以跳过STG层直接进入ODS层。

STG作用: 减轻源系统压力;数据备份,支持重跑;便于问题跟踪;数据质量检查,主要起到缓冲的作用。

开发步骤:

  1. 确定CDC策略,根据源系统的数据状况选择一个合适的CDC策略。

  2. 设计Mapping文档。

  3. 设计物理模型,STG的物理模型一般包括源系统的所有字段和审计字段,例如:源系统名称,源表名称,加载时间,加载方式。可以去掉其他约束条件,比如主键、索引,默认值。如果源表和目标表的数据库类型不同,最好字段长度要进行扩充,一般目标表的数据类型就选择几种常用,长度就选择几个固定的长度。

  4. 抽取数据,STG层面向异构数据源,最好选择用ETL工具,一般ETL工具都支持多种数据源。STG层不做数据转换。

  5. 加载数据,STG层一般保留7天或一月的数据

ODS层

ODS层是把STG层数据进行历史存档,保留源系统的所有历史数据,如果是流式的,可以跳过STG层,实时同步到ODS层。

ODS作用: 全量存储源系统的数据;支持下游系统实时查询业务;数据质量检查

开发步骤:

  1. 设计Mapping文档。

  2. 设计物理模型,ODS的物理模型一般包括源系统的所有字段和审计字段,但是和源系统最主要的区别是ODS层加了逻辑删除标记和增量时间戳。因为很多源系统都可能进行物理删除数据,即使有逻辑删除标记,但是也可以在后台人工删除数据。

  3. 抽取数据,ODS层从STG层抽取数据,在同一个数据平台上,可以采用ETL工具,也可以手工编码。

  4. 加载数据,进行数据比较,判断是否有物理删除情况,如果有打上删除标记。ODS层保留全量数据。

DW层

DW层是清洗、规范化,提交一致化维度和事实的工作区,建立反规范化的维度模型。

数据清洗:数据清洗是发现数据质量问题并纠正数据的过程,通用的方法是戴明质量环

主要步骤:

  1. 定义数据质量需求,根据业务需求和数据剖析结果确定数据质量需求的优先级。

  2. 制定数据质量测量类型

  3. 提交数据质量测量结果表,通常异常数据处理策略有:中断处理;把拒绝记录放在错误时间表里;只做标记,数据继续处理

  4. 纠正数据分为四个优先级:必须在ETL处理;最好在ETL处理;最好在源头处理;必须在源头处理

数据规范化

由于数据仓库的数据来源各个业务系统,每个业务系统相对都是封闭的,他们在命名、取值上都有自己的特点。规范化就是经过标准化、去重、合并、拆分、整合等过程把各个业务系统的数据统一命名,统一取值,建立企业标准版本数据。

主要步骤:

1.数据标准化

从数据的内容、格式、命名、计算规则等输出为唯一的版本数据,把各个源系统的相同描述对象但是不同取值进行统一,比如:性别字段,有的源系统用0和1或Man和Wonen。通过映射表统一命名为M和F。

2.删除重复数据

如果源系统中存在重复数据或者多个源系统维护了相同对象的数据,这时候就要根据保留规则,删除重复数据,只保留唯一的一条数据。

3.数据共存

把各个业务系统的数据经过拆分、合并、整合。例如相同的客户号,二个源系统都维护了这个客户的联系方式,这时候就要根据业务规则来选择保留哪那个源系统的值。

维度表的提交

  • 1.确认粒度

维度表的粒度就是表的业务主键,根据业务主键来判断记录的唯一性。

  • 2.选择代理键生成器

ETL工具和数据库都有设置字段自增长的功能。

  • 3.选择维度表类型

根据业务系统的实际情况选择合适的维度表类型,一般采用缓慢变化维类型1和类型2。

  • 4.增量加载维度数据

维度表的每个字段都要设置默认值,不能为空。首次加载的时候要有一条代理键为-1的默认记录,为了防止事实表查找不到代理键。

  • 5.生成代理键管道

为了生成事实表的维度代理键,一般会建一个查找维表,查找维表包含业务主键和代理键的映射关系。

事实表的提交

  • 1.选择事实表类型

根据业务需求选择合适的事实表类型,一般会先建最细粒度的事务事实表,根据事务事实表建周期快照或累积事实表。

  • 2.用代理键替换主键

根据事实表中维表的业务主键关联查找维表替换成代理键,如果关联不上设置为-1。

  • 3.增量加载事实数据

事实表的每个字段不能为空,事实表主要包含事实粒度的业务主键、维表业务主键、维表代理键、源表的主键、逻辑删除标识和事实。便于重新加载事实表和问题跟踪。由于事实表的数据量大,一般采用分区的方式进行存储。

  • 4.提交错误事实表

把加载事实表的拒绝记录存储在错误事实表中,以便进行数据质量跟踪。

  • 5.事实表合并

一级事实表都是根据单个业务过程建立的,为了便于分析和重用,需要把多个业务过程的事实表进行合并,形成二级事实表。

  • 6.事实表归档

随着时间的推移,事实表中会存放大量的历史数据,如果这些数据很少再出现在统计分析中,需要把这些数据迁移到其他表中或以文件格式存储。

DM层

DM层根据业务需求把DW层数据进行聚合或生成宽表。

创建聚合事实表

前台展现的数据一般都是聚合后的数据,聚合后的数据量比最细粒度的事实表小很多,查询性也有很大的提升。

创建聚合表的方法

  • 1.增量加载,创建聚合表,增量加载聚合表。

  • 2.聚合导航,用户通过报表分析工具,根据用户请求把基础事实表自动生成聚合数据。

  • 3.物化视图,创建物化视图定时刷新聚合表。

创建缩小维度表

由于聚合事实表的粒度和基础事实表粒度不同,需要创建和聚合表相同粒度的维度表,这些维度表只是基础维度表的缩小版。

ETL优化

1.减少磁盘I/O

  • 关联查询的时候,尽可能把无效的数据过滤掉

  • 只查出需要的列

  • 大数据量尽量不要有排序

  • 在加载数据时关闭日志

2.分区和并行

  • 大数据量可以进行分区

  • 查询和任务调度都可以进行并行处理

3.增量加载

4.增加索引

5.大而化小,复杂的查询可以分成多个子任务来执行。

6.重用结果集,把多个查询任务的共用数据可以单独建临时表。

[原创]-数据仓库ETL开发

扫描下方二维码

加入优质社群一起交流吧!

[原创]-数据仓库ETL开发

如若二维码过期

请添加小编微信,回复关键词:[进群/加群],

[原创]-数据仓库ETL开发

-今日互动-

ETL规范你知道了吗?欢迎文章下方留言互动[原创]-数据仓库ETL开发

如果对你有帮助的话

❤️来个「转发朋友圈」和「在看」,是最大的支持❤️
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/135787.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 设计类图

    设计类图

    2021年11月18日
  • [线性代数] 经常使用定义与公式[通俗易懂]

    [线性代数] 经常使用定义与公式

  • java线程与cpu线程_坑惨了什么意思

    java线程与cpu线程_坑惨了什么意思在java中,线程间的通信可以使用wait、notify、notifyAll来进行控制。从名字就可以看出来这3个方法都是跟多线程相关的,但是可能让你感到吃惊的是:这3个方法并不是Thread类或者是Runnable接口的方法,而是Object类的3个本地方法。下图是我总结的Java资料,想要资料的话请点795983544暗号CSDN。其实要理解这一点也并不难,调用一个Object的wait与notify/notifyAll的时候,必须保证调用代码对该Object是同步的,也就是说必须在作用等.

  • 编译原理实验1词法分析器的设计_编译原理实验一 词法分析

    编译原理实验1词法分析器的设计_编译原理实验一 词法分析实验目的 掌握词法分析器的功能。 掌握词法分析器的实现。 实验内容及要求 对于如下文法所定义的语言子集,试编写并上机调试一个词法分析程序:<程序>→PROGRAM<标识符>;<分程序>.<分程序>→<变量说明>BEGIN<语句表>END<变量说明>→VAR<变量表>:&l…

    2022年10月24日
  • linux 移动 文件,linux移动文件命令[通俗易懂]

    linux 移动 文件,linux移动文件命令[通俗易懂]linux移动文件命令mv命令功能:为文件或目录改名或将文件由一个目录移入另一个目录中。该命令如同DOS下的ren和move的组合。语法:mv[选项]源文件或目录目标文件或目录说明:视mv命令中第二个参数类型的不同(是目标文件还是目标目录),mv命令将文件重命名或将其移至一个新的目录中。当第二个参数类型是文件时,mv命令完成文件重命名,此时,源文件只能有一个(也可以是源目录名),它将所给的源…

  • 利用#ZipLib,完成C#下的解压缩「建议收藏」

    利用#ZipLib,完成C#下的解压缩「建议收藏」 ICSharpCode.SharpZipLib.dll是一个压缩的类库,似乎不是微软提供的1.BZip2    加入ICSharpCode.SharpZipLib.dll的引用,在#Develop的安装目录下的/SharpDevelop/bin目录下。然后在程序中使用using语句把BZip2类库包含进来。压缩:使用BZip2的静态方法Compress。    它的第一个参数是所要压缩

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号