百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

如何从0-1搭建ETL?

ccwgpt 2024-12-11 10:45 48 浏览 0 评论

编辑导语:通过ETL,我们可以将分散且凌乱的数据整合到一起,进而帮助企业利用已有数据驱动决策。而ETL产品的关键点就在于抽取、转换与加载。具体应该如何设计一款ETL产品?本篇文章里,作者介绍了从0-1搭建ETL产品的策略方法,一起来看一下。

领导提了个小需求,公司做的系统越来越多了,数据也越来越多,想做一个属于公司内部的ETL工具做数据清洗并归集。你无从下手,或许本文可以帮助你。

一、ETL是什么?

ETL( Extract-Load-Transform)是将业务系统的数据抽取到一个中间数据库里,在里面经过各种规则的转换之后,装载到数据仓库的过程。目的是将分散、凌乱、标准不统一的数据整合到一起,帮助企业将沉睡的数据最大价值利用起来。

一般常见的做法包括ETL或者ELT,一个是先抽取到中间库转换好后再装载到目标数据库,另一个是将数据抽取并装载到目的端,利用目的端的数据处理能力完成数据转换工作。

通常越大量的数据、复杂的转换逻辑、目的端为较强运算能力的数据库,越偏向使用ELT,以便运用目的端数据库的处理能力。

二、怎么设计ETL?

其实这款产品的设计很简单,根据该产品的名称,我们就可以把功能模块分为三部分:抽取、转换、加载。

1. 功能点一:抽取

设计数据抽取功能,需要解决几个问题:一是需要确定从哪些源系统进行数据抽取;二是数据抽取的方法,是主动抽取还是由源系统推送?是增量抽取还是全量抽取?三是数据抽取的频次,是按照每日抽取还是按照每月抽取。

1)数据库连接

首先我们需要把数据从业务系统中抽取出来,从哪些源系统抽取,就要知道这个源业务系统放数据的数据库是哪一个,想要人家的东西就要知道人家放东西的地址在哪,也就是数据库连接。

数据库的类型大致可分为三种:关系型数据库、非关系型数据库(NoSQL)、键值数据库,目前企业最常用的关系型数据库Oracle、MySQL,非关系型数据库BigTable、MongoDB等,可根据业务情况增添所需要的数据库种类。

  • 数据源名称:帮助用户在操作数据源连接时,给所连接的数据源起个名称,便于后续的选择使用;
  • 数据源描述:便于管理和记忆数据源的信息;
  • 数据库地址:想要连接数据库的地址;
  • 端口号:一台计算机可以提供多个服务,端口号就类似于这些服务的门牌号。例如:在一台电脑上,浏览网页服务、连接服务器服务、微信服务、钉钉服务等,每一项都对应一个端口号,只有通过这些端口号,客户端才能真正的访问到这些服务。MySQL端口号一般默认是3306;
  • 数据库名称:同一个数据库地址可以包括很多数据库,每个数据库都有自己的名字,每个数据库里面包含了很多张数据表;
  • 用户名和密码:由业务方来分配,他们会把你可操作的数据权限放权给该账户。

通过这样几项内容的设计,用户就可以连接到一个确定的数据库,并使用里面的数据表。

数据库连接好之后,还需要连接测试一下是否能连通,以防因为网络或者信息填写错误等原因导致没有连上,那就是表面看着连好了,实际上是无效的数据库。

2)数据抽取

连接好源数据库后,就可以开始抽取工作了。这时需要解决刚提出的第二个问题,如何抽取?

ETL的工作一般都是主动抽取,能推送的话那就太好了,不过源系统推送的可能性不大,因为这增加了源业务方的工作量,本来抽取数据都会多多少少影响业务的运行情况,现在还来增加工作量,这不是给人家添堵嘛。所以不推送也没关系,能让主动抽就可以。

是增量抽取还是全量抽取呢?这个是根据业务需求而定,全量抽取比较好操作,每次做数据清洗任务时,把需要的表全部抽取过来就可以了。而增量抽取是只抽取新增部分的数据,要实现增量抽取,就要准确地捕获到数据库中数据源表的变化。

数据的变化无非是增、删、改,只要能监测到数据有这三种形式的变化,并对变化做一些处理,就能实现增量抽取了。增量抽取有四种方式:

① 触发器方式

在被抽取的数据源表上建立插入、修改、删除3个触发器,当源表中的数据发生变化(是新增、修改,还是删除了),可以指定一个或多个具备唯一性的字段来监测,对应的触发器就将变化的数据写入一个增量日志表,抽取时则从增量日志中抽取,同时,增量日志表中抽取过的数据要及时被标记或删除。

② 时间戳方式

增量抽取时,通过比较指定抽取时间与抽取源表的时间戳字段的值决定抽取哪些数据。这种方式需要在源表中增加一个时间戳字段,源表数据更新或修改时,同时也会修改时间戳字段的值,这样就知道源表发生了哪些变化,将变化的数据重新抽取即可。

③ 全表比对方式

增量抽取时,ETL任务会逐条比较源表和目标表的记录,将新增或修改等变化的记录过滤读取出来,这种方式就比较考验硬件环境了。

④ 日志表方式

在数据库中创建业务日志表,增量抽取时,通过读日志表数据决定加载哪些数据,日志表的维护需要由业务系统程序编写代码完成。

以上四种增量抽取方式没有一种方式具有绝对优势,不同的方式在不同的企业中表现大体平衡。通常根据企业的业务需求和硬件环境来选择。

根据这四种方式描述,可以看出,我们比较好设计到产品中的就是触发器方式、时间戳方式、全表比对方式。

3)任务调度

如果需求是按日、按周或者按月抽取数据,并执行清洗任务,怎么办呢?可以通过任务调度功能来实现。

任务调度功能的设计就是来自于cron表达式。cron,是计划任务,指在约定的时间执行已经计划好的工作,是用代码来实现任务调度的用法。

任务调度的运行频次一般包括分、时、日、周、月,为什么没有秒调度,这玩意儿要求太高了,比较耗费资源,能满足到分的定时任务就可以了。调度任务的配置逻辑就是任务在什么时间开始运行,多久运行一次,什么时间结束运行。

2. 功能点二:转换

数据的清洗转换,主要任务是过滤掉不符合要求的数据,不符合要求的数据主要有不完整的数据、错误的数据、重复的数据三大类。

根据数据清洗的业务需求,在ETL产品中设计各种类型的清洗组件,在组件设置页面由用户配置清洗规则,完成数据清洗任务的设计。

例如,根据抽取、转换、加载的流程,组件可以分为三大类:输入、转换、输出。

  1. 输入组件包括数据表输入、Excel文件输入、SQL输入等;
  2. 转换组件包括过滤、聚合、合并、排序、数据脱敏、增加计算字段、行转列等;
  3. 输出组件包括数据表输出、Excel文件输出等。

3. 功能点三:加载

数据加载的主要任务是将数据从临时数据表或文件中加载到指定的数据仓库中。如果是全量方式则采用LOAD方式,如果是增量则根据业务规则,使用SQL语句MERGE进数据库。

对于一个ETL任务流,一般会在数据抽取时进行增量操作,将增量抽取的数据清洗之后再统一加载到目标表中。

三、如何使用ETL

业务场景:抽取商品销售订单数据表,商品数据表,计算出每日的销售订单总金额并入库。

第一步:制作ETL任务流程,抽取商品销售订单数据,商品数据表,通过商品ID关联成一张表。

第二步:计算每日销售订单总金额。增加一个订单总金额字段,并添加计算公式订单总金额=订单金额*数量。

第三步:设置调度任务,定时执行ETL任务。选择运行频次“天”,设定任务在哪一段时间内执行,也可以指定几个不在这段时间内的单个时间执行任务。

四、写在结尾

本文只是教大家如何搭建一个ETL产品的基础功能,搭建出来的产品要能真正的上线使用起来,除了需要考虑到:产品运作流程要使用的方案,是ETL还是ELT?如果要与BI产品共同使用,如何与其交互?

还需要认真思考一下,我们到底需要什么样的ETL?只是想做数据采集,支撑数据仓库的建设,还是作为一个数据交换平台,赋予其更多的应用场景。

这些大家在设计产品的时候都要考虑清楚,和相关开发团队以及领导多讨论沟通,有疑问的地方欢迎留言。

本文由 @金豌豆 原创发布于人人都是产品经理,未经许可,禁止转载

题图来自Pexels,基于 CC0 协议

相关推荐

自己动手写Android数据库框架_android开发数据库搭建

http://blog.csdn.net/feiduclear_up/article/details/50557590推荐理由关于Android数据库操作,由于每次都要自己写数据库操作,每次还得去...

谷歌开源大模型评测工具LMEval,打通谷歌、OpenAI、Anthropic

智东西编译|金碧辉编辑|程茜智东西5月28日消息,据科技媒体TheDecoder5月26日报道,当天,谷歌正式发布开源大模型评测框架LMEval,支持对GPT-4o、Claude3.7...

工信部:着力推动大模型算法、框架等基础性原创性的技术突破

工信部新闻发言人今日在发布会上表示,下一步,我们将坚持突出重点领域,大力推动制造业数字化转型,推动人工智能创新应用。主要从以下四个方面着力。一是夯实人工智能技术底座。通过科技创新重大项目,着力推动大模...

乒乓反复纠结“框架不稳定”的三个小误区

很多球友由于对框架的认知不清晰,往往会把“框架不稳定”当成一种心理负担,从而影响学球进度,其典型状态就是训练中有模有样,一旦进入实战,就像被捆住了手脚。通过训练和学习,结合“基本功打卡群”球友们交流发...

前AMD、英特尔显卡架构师Raja再战GPU,号称要全面重构堆栈

IT之家8月5日消息,知名GPU架构师拉贾科杜里(RajaKoduri)此前曾先后在AMD和英特尔的显卡部门担任要职。而在今日,由Raja创立的GPU软件与IP初创企...

三种必须掌握的嵌入式开发程序架构

前言在嵌入式软件开发,包括单片机开发中,软件架构对于开发人员是一个必须认真考虑的问题。软件架构对于系统整体的稳定性和可靠性是非常重要的,一个合适的软件架构不仅结构清晰,并且便于开发。我相...

怪不得别人3秒就知道软考案例怎么做能50+

软考高级统一合格标准必须三科都达到45分,案例分析也一直是考生头疼的一门,但是掌握到得分点,案例能不能50+还不是你们说了算吗?今天就结合架构案例考点,分享实用的备考攻略~一、吃透考点,搭建知识框架从...

UML统一建模常用图有哪些,各自的作用是什么?一篇文章彻底讲透

10万+爆款解析:9大UML图实战案例,小白也能秒懂!为什么需要UML?UML(统一建模语言)是软件开发的“蓝图”,用图形化语言描述系统结构、行为和交互,让复杂需求一目了然。它能:降低沟通成本避...

勒索软件转向云原生架构,直指备份基础设施

勒索软件组织和其他网络犯罪分子正越来越多地将目标对准基于云的备份系统,对久已确立的灾难恢复方法构成了挑战。谷歌安全研究人员在一份关于云安全威胁演变的报告中警告称,随着攻击者不断改进数据窃取、身份泄露和...

ConceptDraw DIAGRAM:释放创意,绘就高效办公新未来

在当今数字化时代,可视化工具已成为提升工作效率和激发创意的关键。ConceptDrawDIAGRAM,作为一款世界顶级的商业绘图软件,凭借其强大的功能和用户友好的界面,正逐渐成为众多专业人士的首选绘...

APP 制作界面设计教程:一步到位_app界面设计模板一套

想让APP界面设计高效落地,无需繁琐流程,掌握“框架搭建—细节填充—体验优化”三步法,即可一步到位完成专业级设计。黄金框架搭建是基础。采用“三三制布局”:将屏幕横向三等分,纵向保留三...

MCP 的工作原理:关键组件_mcp部件

以下是MCP架构的关键组件:MCP主机:像ClaudeDesktop、GitHubCopilot或旅行助手这样的AI智能体,它们希望通过MCP协议访问工具、资源等。MCP主机会...

软件架构_软件架构师工资一般多少

软件架构师自身需要是程序员,并且必须一直坚持做一线程序员。软件架构应该是能力最强的一群程序员,他们通常会在自身承接编程任务的同时,逐渐引导整个团队向一个能够最大化生产力的系统设计方向前进。软件系统的架...

不知不觉将手机字体调大!老花眼是因为“老了吗”?

现在不管是联系、交友,还是购物,都离不开手机。中老年人使用手机的时间也在逐渐加长,刷抖音、看短视频、发朋友圈……看手机的同时,人们也不得不面对“视力危机”——老花眼,习惯眯眼看、凑近看、瞪眼看,不少人...

8000通用汉字学习系列讲座(第046讲)

[表声母字]加(续)[从声汉字]伽茄泇迦枷痂袈笳嘉驾架咖贺瘸(计14字)嘉[正音]标准音读jiā。[辨形]上下结构,十四画。会意形声字,从壴从加,加也表声。注:从壴,字义与鼓乐有关;从加,字义与...

取消回复欢迎 发表评论: