IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> 大数据平台模型数据算法总结--抽象且形象的描述 -> 正文阅读

[大数据]大数据平台模型数据算法总结--抽象且形象的描述

? ? ? ?大数据平台数据来源于企业内部、外部各个源系统,包括企业内部的前端人工输入、智能设备采集、app端埋点日志、外部数据采购等等等等,可以说是千奇百怪五花八门,从以前的CDS到数据仓库,再到数据湖、数据中台,整个企业内部数据流向就如同一条条毛细血管中的血液,由全身各处流向心脏,在做有氧交换,处理、加工、汇总、分析再分发到需要他的地方。这个比喻可能有失偏颇,但是大致就是这么个意思吧。

? ? ? ?在整个ETL的过程中就会面临一个问题,那就是历史数据存储问题,怎么将历史数据存好、用好、好用是一个值得思考的问题,今天就简单的总结一下大数据平台对于历史数据储存的ETL算法,适用于数据仓、数据中台的湖仓一体架构(本文总结基于teradata的SDM-ETL POLICY算法)。

F1(DELETE/INSERT):

1 删除历史表中所有数据;

2 将最新增量加载日表数据全部插入历史表中。

?适用场景:

一般多用于全量数据,数据量较小,但对于历史情况不许过多关注,只关注最新有效数据情况,比如全国省份信息,企业内部全国机构信息。

F2(UPSERT):

1 根据业务逻辑确定对主键比字段(Upsert by);

2 生成当前临时表,将当日加载日表数据插入当前临时表;

3?根据当前临时表中数据要素,update历史表(T_PFS_CUS_ACC)中相对应的数据,where条件根据(upsert by);

4?插入数据,将当前临时表中的数据在历史表中不存在即新增数据(以upsert by为条件)的数据插入到历史表。

逻辑图如下:

?适用场景:

一般多用于全量数据,数据量相大,但对于历史情况不许过多关注,只关注最新有效数据情况,比如企业内部所所有客户信息情况。

?

?F3(History Chain):

1 恢复时间戳,即避免同一天多次运行造成数据重复

1)将历史表中开始日期等于要要加载的日期的数据删除 DELETE FROM ?histable WHERE ?开始日期=当前输入日期(start_dt=$tx_date);

2)将结束日期等于加载日期的数据,将结束日期更改为最大日期 UPDATE ?histable SET ?结束日期 Sttm_Dt= $MAXDATE WHERE ?Sttm_Dt= ${TX_DATE}‘; 根据业务逻辑确定对主键比字段(Upsert by)。

2?根据业务逻辑确定对主键比字段(Upsert by);

3?生成当前临时表,将当日加载日表数据插入当前临时表;

4?比较今日数据(即“当前数据临时表”中的数据)和当前有效数据(当前有效数据指历史表中结束日期等于最大日期),比较条件:除去开始日期和结束日期所有字段,当前数据不在历史表中的数据插入“增改临时表”(INS表)中;

5?根据Upsert by的条件更新历史表中数据,对更新数据进行封口,置结束日期为$tx_date;

6?将临时表中数据置开始日期(rep_dt)为$tx_date和结束日期(sttm_dt)为$MAXDATE,其他数据不变,“增改临时表”数据插入历史表中。

逻辑图如下:

?

适用场景:

一般用于增量数据,数据量较大的,变动频率不高的,反应历史情况的数据,比如协议的一些情况信息,如人行的征信信息,一些企业的风控系统对客户的评级数据等。

?F4(Economy History Chain):

1 F4算法同F3算法基本相同,是F3的一种特殊情况,即对新增临时表数据中指定某些特殊字段不为空,为空直接不进历史表,其他逻辑算法与F3完全一致。

适用场景:

一般用于增量数据,数据量较大的,变动频率不高的,反应历史情况的数据,存在特殊情况,按需选取。

?F5(FullData History Chain):

1?F5算法与F3的数据生成相同,区别在于多生成2个临时表,分别是PRE(以前)UPD(更改);

2?PRE中数据是以sttm_dt(结算日期)=$maxdate从历史表中取出的数据;

3?INS的生成数据是将“当前临时表”(cur_i)中数据在pre表中数据比较,不存在的数据插入到INS中;

4?UPD的生成数据是将pre表中数据在“当前临时表”(cur_i)中的数据比较,不存在数据插入到UPD中;

5?删除历史表中已UPD为条件的数据后将UPD数据插入历史表中;

6?将INS数据插入目标表中。

逻辑图如下:

适用场景:

一般用于增量数据,数据量较大的,变动频率不高的,反应历史情况的数据,存在特殊情况,按需选取。

?F6(Two-PK History Chain):

1 F6算法也是F4算法的另一种特殊情况(个人理解),即判断原先拉链具有可存在性,2个或者多个拉链都是合理存在

2 如果判断为多条主键存在为合理,建立“当前数据临时表”,将新增加载数据插入到“当前临时表”;

3?建立“增改临时表”,“当前临时表”与历史表比较,不存在的放入比较临时表中,比较的条件是“当前临时表”中的数据除去开始日期和结束日期的所有列与历史表中结束日期为$maxdate的所有数据相对应的列比较;

4?将增改临时表中的数据插入到目标表中,开始日期为输入日期,结束日期为$maxdate,历史表原拉链不变更;

5?如果判断主键唯一性时,更新历史表中数据,对更新数据封口,置结束日期为输入日期。条件为结束日期为$maxdate并且其他的列(除开始日期)的数据不在“当前临时表”中。

适用场景:

一般用于增量数据,数据量较大的,变动频率不高的,反应历史情况的数据,而且历史与现在的状态同时生效,感觉还是需要原子性拆分把,就是不同属性唯一依赖主键,实际中几乎没用到,平时建模都是三范建模,除非降范才能出现这种情况(个人理解,不喜勿喷哦)。

F7(Self History Chain):

1 F7算法是满足当传来数据为历史数据时,重新建立新的历史时间链;

2?建立“当前数据临时表”,将新增加载数据插入到“当前临时表”;

3?将历史表中数据导入“当前临时表”中,条件为 历史表中的user by 在 “当前临时表”中不存在的数据;

4?删除历史表中数据,将“当前临时表”用LEFT JOIN的方式重新生成新的历史拉链插入历史表中。

适用场景:

一般用于增量数据,数据量较大的,变动频率不高的,反应历史情况的数据,实际工作中几乎没碰到,感觉像是用于补历史拉链的一种算法,怎么都感觉像是修数算法

I(append):

1 Append 算法只是对历史表仅仅插入新的数据;

2?建立“当前数据临时表”,将新增加载数据插入到“当前临时表”;

3?删除历史表中开始日期为输入日期;

4?将当前临时表中数据插入到历史表中

适用场景:

一般用于增量数据,数据量较大的,变动频率较高的,反应历史情况的数据,这个没啥好说的啦,就是快照、切片算法啦,空间消耗极大,但是也没别的办法啦。

? ? ? ?一口气说了这么多,总而言之,言而总之,算法没有最好之说,只有最合适的,没必要苛求去追求那种算法,有的人就是觉得越复杂,越高级,个人觉得合适就好,一个合适的算法能够帮助你优化数据存储结构,并降低数据综合存储成本,提升平台执行效率。

? ? ? ? 本文都是总结的Teradata的SDM-ETL POLICY算法,三十多年来,teradata积累了大量的资产与方法支持这套算法的最佳实践,本人有幸加入但目前为止也只学到了点皮毛,但是受益匪浅,有感兴趣的童鞋欢迎一起交流、学习,文中有什么不对的地方也欢迎指正、批评。拜拜,下次总结数据生命周期相关。

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-12-18 16:03:48  更:2021-12-18 16:03:58 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 11:56:02-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码