您当前的位置:首页 > 电脑百科 > 程序开发 > 算法

8种ETL调度算法归纳总结,看完这些你就全明白了

时间:2020-09-27 10:34:16  来源:  作者:

摘要:ETL是将业务系统的数据经过抽取、清洗转换之后加载到数据仓库的过程,是构建数据仓库的重要一环,用户从数据源抽取出所需的数据,经过数据清洗,最终按照预先定义好的数据仓库模型,将数据加载到数据仓库中。目的是将企业中的分散、零乱、标准不统一的数据整合到一起,为企业的决策提供分析依据。

 

ETL算法概览

8种ETL调度算法归纳总结,看完这些你就全明白了

 

> 算法应用场景概览

8种ETL调度算法归纳总结,看完这些你就全明白了

 

以上共计累积了8种ETL算法,其中主要分成4大类,增量类加、拉链算法是更符合数据仓库历史数据追踪的算法,但现实中基于业务及性能考虑,往往存在全删全插、增量类全算法的数据表应用。

全删全插模型

即Delete/Insert实现逻辑;

> 应用场景

主要应用在维表、参数表、主档表加载上,即适合源表是全量数据表,该数据表业务逻辑只需保存当前最新全量数据,不需跟踪过往历史信息。

算法实现逻辑

1.清空目标表;

2.源表全量插入;

> ETL代码原型.

--   1. 清理目标表
TRUNCATE TABLE <目标表>;
 --   2. 全量插入INSERT INTO <目标表>   (字段***)
SELECT 字段***FROM <源表>
***JOIN <关联数据>
WHERE   ***;

增量类全模型

即Upsert实现逻辑;

> 应用场景

主要应用在参数表、主档表加载上,即源表可以是增量或全量数据表,目标表始终最新最全记录。

> 算法实现逻辑

  1. 利用PK主键比对;
  2. 目标表和源表PK一致的变化记录,更新目标表;
  3. 源表存在但目标表不存在,直接插入;

ETL代码原型

-- 1. 生成加工源表
Create temp Table <临时表> ***;
INSERT INTO <临时表> (字段***)
SELECT 字段***  
FROM <源表>
***JOIN <关联数据>
WHERE ***
;
 
-- 2. 可利用Merge Into实现累全能力,当前也可以采用分步Delete/Insert或Update/Insert操作
Merge INTO <目标表> As T1 (字段***)
Using <临时表> as S1
on (***PK***)
when Matched then
update set Colx = S1.Colx ***
when Not Matched then
INSERT (字段***)   values (字段*** )
;

增量累加模型

Append实现逻辑;

应用场景

主要应用在流水表加载上,即每日产生的流水、事件数据,追加到目标表中保留全历史数据。流水表、快照表、统计分析表等均是通过该逻辑实现。


算法实现逻辑

1.源表直接插入目标表;


ETL代码原型

--   1.插入目标表
INSERT INTO <目标表>   (字段***)
SELECT 字段***FROM <源表>
***JOIN <关联数据>
WHERE   ***;

全立式拉链模型

> 拉链表背景知识

 概念

拉链表是一张至少存在PK字段、跟踪变化的字段、开链日期、闭链日期组成的数据仓库ETL数据表;

 益处

根据开链、闭链日期可以快速提取对应日期有效数据;

对于跟踪源系统非事件流水类表数据,拉链算法发挥越大作用,源业务系统通常每日变化数据有限,通过拉链加工可以大大降低每日打快照带来的空间开销,且不损失数据变化历史;

 示例,提取指定日期有效数据

8种ETL调度算法归纳总结,看完这些你就全明白了

 

提取2020年2月5日当日有效数据

Select *
From <目标表>
Where 开始日期<=date'2020-02-05'
And   结束日期 >date'2020-02-05';

最终提取到数据:

8种ETL调度算法归纳总结,看完这些你就全明白了

 

> 应用场景

全历史拉链,跟踪源表全量变化历史,若源表记录不存在,则说明数据闭链;根据PK新拉一条有效记录。

> 算法实现逻辑

1.提取当前有效记录;

2.提取当日源系统最新数据;

3.根据PK字段比对当前有效记录与最新源表,更新目标表当前有效记录,进行闭链操作;

4.根据全字段比对最新源表与当前有效记录,插入目标表;

ETL代码原型

——1. 提取当前有效记录
Insert into <临时表-开链-pre> (不含开闭链字段***)
Select 不含开闭链字段***From <目标表>
Where 结束日期 =date'<最大日期>';
;-- 2. 提取当日源系统最新数据<源表临时表-cur>
-- 3 今天全部开链的数据,即包含今天全新插入、数据发生变化的记录Insert Into <临时表-增量-ins>
Select 不含开闭链字段***From <源表临时表-cur>
where (不含开闭链字段***) not in   (Select 不含开闭链字段*** From <临时表-开链-pre>
   );-- 4 今天需要闭链的数据,即今天发生变化的记录Insert into <临时表-增量-upd>
Select 不含开闭链字段***,开始时间From <临时表-开链-pre>
where (不含开闭链字段***) not in   (Select 不含开闭链字段*** From <临时表-开链-cur>
   );-- 5 更新闭链数据,即历史记录闭链(删除-插入替代更新)DELETE FROM <目标表>
WHERE (PK***) IN(Select PK*** From <临时表-增量-upd>)
AND 结束日期=date'<最大日期>';
INSERT INTO <目标表>
      (不含开闭链字段***,开始时间,结束日期)Select 不含开闭链字段***,开始时间,date'<数据日期>'
From <临时表-增量-upd>;
-- 6 插入开链数据,即当日新增记录INSERT INTO <目标表> .
      (不含开闭链字段***,开始时间,结束日期)Select 不含开闭链字段***,date'<数据日期>',date'<最大日期>'
From <临时表-增量-ins>;

增量拉链模型

> 应用场景

增量拉链,目的是追踪数据增量变化历史,根据PK比对新拉一条开链数据;

算法实现逻辑

1.提取上日开链数据;

2.PK相同变化记录,关闭旧记录链,开启新记录链;

3.PK不同,源表存在,新增开链记录

> ETL代码原型

--   1. 提取当前有效记录
Insert into <临时表-开链-pre> (不含开闭链字段***)
Select 不含开闭链字段***From <目标表>
Where 结束日期 =date'<最大日期>';
--   2. 提取当日源系统增量记录<源表临时表-cur>
--   3. 提取当日源系统新增记录Insert into <临时表-增量-ins>
Select 不含开闭链字段***From <临时表-开链-cur>
where (***PK***) not in  (select ***PK*** from <临时表-开链-pre>);
--   4. 提取当日源系统历史变化记录Insert into <临时表-增量-upd>
Select 不含开闭链字段***From <临时表-开链-cur>
inner join <临时表-开链-pre>
on (***PK 等值***)where (***变化字段 非等值***);--   5. 更新历史变化记录,关闭历史旧链,开启新链update <目标表> AS T1
SET <***变化字段 S1赋值***>,结束日期 = date'<数据日期>'
FROM <临时表-增量-upd> AS S1
WHERE ( <***PK 等值***> )
AND   T1.结束日期 =date'<最大日期>'
;INSERT INTO <目标表>
      (不含开闭链字段***,开始时间,结束日期)SELECT 不含开闭链字段***,date'<数据日期>',date'<最大日期>'
FROM <临时表-增量-upd>;
--   6. 插入全新开链数据INSERT INTO <目标表>
      (不含开闭链字段***,开始时间,结束日期)SELECT 不含开闭链字段***,date'<数据日期>',date'<最大日期>'
FROM <临时表-增量-ins>;

增删拉链模型

> 应用场景

主要是利用业务字段跟踪增量数据中包含删除的变化历史。

> 算法实现逻辑

1.提取上日开链数据;

2.提取源表非删除记录;

3.PK相同变化记录,关闭旧记录链,开启新记录链;

4.PK比对,源表存在,新增开链记录;

5.提取源表删除记录;

6.PK比对,旧开链记录存在,关闭旧记录链;

ETL代码原型

--   1. 清理目标表《待续...》
TRUNCATE TABLE <目标表>;
 --   2. 全量插入INSERT INTO <目标表>   (字段***)
SELECT 字段***FROM <源表>
***JOIN <关联数据>
WHERE   ***;

全量增删拉链模型

> 应用场景

主要是利用业务字段跟踪全量数据中包含删除的变化历史。


> 算法实现逻辑

1.提取上日开链数据;

2.提取源表非删除记录;

3.PK相同变化记录,关闭旧记录链,开启新记录链;

4.PK比对,源表存在,新增开链记录;

5.提取源表删除记录;

6.PK比对,旧开链记录存在,关闭旧记录链;

7.PK比对,提取旧开链存在但源表不存在记录,关闭旧记录链;

ETL代码原型

--   1. 清理目标表,《待续...》
TRUNCATE TABLE <目标表>;
 --   2. 全量插入INSERT INTO <目标表>   (字段***)
SELECT 字段***FROM <源表>
***JOIN <关联数据>
WHERE   ***;

自拉链模型

> 应用场景

主要将流水表数据转化成拉链表数据。


> 算法实现逻辑

借助源表业务日期字段,和目标表开链、闭链日期比对,首尾相接,拉出全历史拉链;


> ETL代码原型

--   1. 清理目标表,《待续...》
TRUNCATE TABLE <目标表>;
 --   2. 全量插入INSERT INTO <目标表>   (字段***)
SELECT 字段***FROM <源表>
***JOIN <关联数据>
WHERE   ***;

其它说明

1.根据数据仓库最佳实践,所有数据表通常还会包含一些控制字段,即插入日期、更新日期、更新源头字段,这样对于数据变化敏感的数据仓库,可以进一步追踪数据变化历史;

2.ETL算法本身是为了更好服务于数据加工过程,实际业务实现过程中,并不局限于传统算法,即涉及到更多适应业务的自定义的ETL算法。



Tags:ETL调度算法   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
摘要:ETL是将业务系统的数据经过抽取、清洗转换之后加载到数据仓库的过程,是构建数据仓库的重要一环,用户从数据源抽取出所需的数据,经过数据清洗,最终按照预先定义好的数据仓库...【详细内容】
2020-09-27  Tags: ETL调度算法  点击:(67)  评论:(0)  加入收藏
▌简易百科推荐
前言Kafka 中有很多延时操作,比如对于耗时的网络请求(比如 Produce 是等待 ISR 副本复制成功)会被封装成 DelayOperation 进行延迟处理操作,防止阻塞 Kafka请求处理线程。Kafka...【详细内容】
2021-12-27  Java技术那些事    Tags:时间轮   点击:(1)  评论:(0)  加入收藏
博雯 发自 凹非寺量子位 报道 | 公众号 QbitAI在炼丹过程中,为了减少训练所需资源,MLer有时会将大型复杂的大模型“蒸馏”为较小的模型,同时还要保证与压缩前相当的结果。这就...【详细内容】
2021-12-24  量子位    Tags:蒸馏法   点击:(9)  评论:(0)  加入收藏
分稀疏重建和稠密重建两类:稀疏重建:使用RGB相机SLAMOrb-slam,Orb-slam2,orb-slam3:工程地址在: http://webdiis.unizar.es/~raulmur/orbslam/ DSO(Direct Sparse Odometry)因为...【详细内容】
2021-12-23  老师明明可以靠颜值    Tags:算法   点击:(7)  评论:(0)  加入收藏
1. 基本概念希尔排序又叫递减增量排序算法,它是在直接插入排序算法的基础上进行改进而来的,综合来说它的效率肯定是要高于直接插入排序算法的;希尔排序是一种不稳定的排序算法...【详细内容】
2021-12-22  青石野草    Tags:希尔排序   点击:(6)  评论:(0)  加入收藏
ROP是一种技巧,我们对execve函数进行拼凑来进行system /bin/sh。栈迁移的特征是溢出0x10个字符,在本次getshell中,还碰到了如何利用printf函数来进行canary的泄露。ROP+栈迁移...【详细内容】
2021-12-15  星云博创    Tags:栈迁移   点击:(19)  评论:(0)  加入收藏
一、什么是冒泡排序1.1、文字描述冒泡排序是一种简单的排序算法。它重复地走访要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地...【详细内容】
2021-12-15    晓掌柜丶韶华  Tags:排序算法   点击:(16)  评论:(0)  加入收藏
在了解golang的map之前,我们需要了解哈希这个概念。哈希表,又称散列表(Hash table),是根据键(key)而直接访问在内存储存位置的数据结构。也就是说,它通过计算出一个键值的函数,将...【详细内容】
2021-12-07  一棵梧桐木    Tags:哈希表   点击:(13)  评论:(0)  加入收藏
前面文章在谈论分布式唯一ID生成的时候,有提到雪花算法,这一次,我们详细点讲解,只讲它。SnowFlake算法据国家大气研究中心的查尔斯&middot;奈特称,一般的雪花大约由10^19个水分子...【详细内容】
2021-11-17  小心程序猿QAQ    Tags:雪花算法   点击:(24)  评论:(0)  加入收藏
导读:在大数据时代,对复杂数据结构中的各数据项进行有效的排序和查找的能力非常重要,因为很多现代算法都需要用到它。在为数据恰当选择排序和查找策略时,需要根据数据的规模和类型进行判断。尽管不同策略最终得到的结果完...【详细内容】
2021-11-04  华章科技    Tags:排序算法   点击:(37)  评论:(0)  加入收藏
这是我在网上找的资源的一个总结,会先给出一个我看了觉得还行的关于算法的讲解,再配上实现的代码: Original author: Bill_Hoo Original Address: http://blog.sina.com.cn/s/bl...【详细内容】
2021-11-04  有AI野心的电工和码农    Tags: KMP算法   点击:(36)  评论:(0)  加入收藏
相关文章
    无相关信息
最新更新
栏目热门
栏目头条