摘要:ETL是将业务系统的数据经过抽取、清洗转换之后加载到数据仓库的过程,是构建数据仓库的重要一环,用户从数据源抽取出所需的数据,经过数据清洗,最终按照预先定义好的数据仓库模型,将数据加载到数据仓库中。目的是将企业中的分散、零乱、标准不统一的数据整合到一起,为企业的决策提供分析依据。
ETL算法概览
> 算法应用场景概览
以上共计累积了8种ETL算法,其中主要分成4大类,增量类加、拉链算法是更符合数据仓库历史数据追踪的算法,但现实中基于业务及性能考虑,往往存在全删全插、增量类全算法的数据表应用。
全删全插模型
即Delete/Insert实现逻辑;
> 应用场景
主要应用在维表、参数表、主档表加载上,即适合源表是全量数据表,该数据表业务逻辑只需保存当前最新全量数据,不需跟踪过往历史信息。
> 算法实现逻辑
1.清空目标表;
2.源表全量插入;
> ETL代码原型.
-- 1. 清理目标表
TRUNCATE TABLE <目标表>;
-- 2. 全量插入
INSERT INTO <目标表> (字段***)
SELECT 字段***
FROM <源表>
***JOIN <关联数据>
WHERE ***;
增量类全模型
即Upsert实现逻辑;
> 应用场景
主要应用在参数表、主档表加载上,即源表可以是增量或全量数据表,目标表始终最新最全记录。
> 算法实现逻辑
- 利用PK主键比对;
- 目标表和源表PK一致的变化记录,更新目标表;
- 源表存在但目标表不存在,直接插入;
> 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数据表;
益处
根据开链、闭链日期可以快速提取对应日期有效数据;
对于跟踪源系统非事件流水类表数据,拉链算法发挥越大作用,源业务系统通常每日变化数据有限,通过拉链加工可以大大降低每日打快照带来的空间开销,且不损失数据变化历史;
示例,提取指定日期有效数据
提取2020年2月5日当日有效数据
Select *
From <目标表>
Where 开始日期<=date'2020-02-05'
And 结束日期 >date'2020-02-05';
最终提取到数据:
> 应用场景
全历史拉链,跟踪源表全量变化历史,若源表记录不存在,则说明数据闭链;根据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算法。
相关推荐
PBS(Predictive-Based Scheduling)是一种面向集群环境的ETL(Extract-Transform-Load)调度算法,旨在提高数据抽取、转换和加载过程的执行效率。随着企业对大数据分析需求的增长,传统的集中式ETL处理方式在面对...
为了解决ETL任务调度效率低下、关键任务等待时间过长、资源利用率不高等问题,本文提出了一种基于ISE(Integrated Scheduling Execution)算法的分布式ETL任务调度策略。该策略通过构建分布式ETL任务调度框架,采用...
1. ETL的定义:是数据抽取(Extract)、转换(Transform)、清洗(Cleansing)、装载(Load)的过程。是构建数据仓库的重要一环,用户从数据源抽取出所需的数据,经过数据清洗,最终按照预先定义好的数据仓库模型,将数据...
在了解“粒子群算法在分布式ETL任务调度中的应用”这一主题之前,需要先明白几个关键概念:分布式ETL、任务调度以及粒子群优化算法。 分布式ETL(Extraction, Transformation, Loading)是数据仓库构建过程中的核心...
ETL拉链算法的使用,详细介绍各种拉链算法的使用,及开发过程
根据提供的文件内容,以下是对标题“基于MapReduce的分布式ETL调度优化方法.pdf”和描述中知识点的详细解读。 分布式ETL调度优化方法是近年来大数据处理领域的一个热点技术。在大数据处理过程中,ETL(抽取 Extract...
因此,本文提出了一种基于Kettle、Sqoop、Oozie、Redis等开源技术框架的分布式ETL作业调度方案。这一方案基于B/S(浏览器/服务器)架构模式设计,可支持高效的数据处理并具备高可靠性。Kettle是一款C/S模式的开源ETL...
这是一个企业级ETL调度系统, 在成熟的spring框架基础上,实现ETL调度服务. 权限管理部分,采用asofdate项目,asofdate项目采用golang开发,asofdate-etl采用java重写了asofdate后台api,由于两个项目都是采用jwt加密用户...
ETL工具算法构建企业级数据仓库五步法 ETL(Extract、Transform、Load)是数据仓库构建的关键步骤,它将OLTP系统中的数据抽取、转换、加载到数据仓库中,以便于多维分析和多角度展现。ETL工具算法构建企业级数据...
ETL拉链算法以及简单个人理解
ETL(Extract, Transform, Load)调度系统是数据仓库或大数据处理中不可或缺的一部分,它负责从各种源系统抽取数据,经过清洗、转换后加载到目标系统。本技术方案说明书主要探讨了ETL调度系统的构建,旨在确保系统的...
然后,结合数据质量校验的ETL调度装置利用这些元数据生成的作业和调度视图执行ETL任务,确保数据的准确性和完整性。 1.1.2 设计思路与原则 ETL平台的设计基于SUN公司的J2EE工业标准,采用B/S架构,使用BEA公司的...
**ETL调度工具TASKCTL详解** ETL,即Extract-Transform-Load的缩写,是数据处理领域中的关键环节,用于从不同的数据源抽取数据,进行清洗、转换,然后加载到目标系统中。而在大数据环境下,高效、稳定的ETL调度工具...
ETL Automation 是由 Teradata 公司发布的 ETL 流程调度产品,使用 JAVA 程序开发,支持跨平台部署,安装、维护简单。
### ETL实施规范总结 #### 一、概述 在数据仓库和大数据处理领域,ETL(Extract, Transform, Load)是一种常见的数据处理流程,用于从不同的数据源中抽取数据、清洗转换数据,并将数据加载到目标数据库或数据仓库...
### ETL调度系统技术方案说明书知识点解析 #### 一、背景与目的 **背景:** 在分析类系统中,ETL(Extract, Transform, Load)调度处理占据了大量的维护工作量。若缺乏有效的ETL调度系统,则会在后期运维过程中...
ETL Automation 使用手册 ETL Automation 是一个自动化的数据集成工具,旨在帮助用户快速高效地完成数据提取、转换和加载(ETL)过程。本手册将详细介绍 ETL Automation 的安装、配置、使用和管理。 ETL ...
TASKCTL是ETL调度领域专业的调度产品,适用于各行业的企业级、项目级ETL调度平台建设。此版是在C/S桌面客户端的基础上,TASKCTL 重新构建了一套基于web浏览器的B/S版本; 其中 TASKCTL 基础版的设计核心是以开发...