增量|如何从0-1搭建ETL?( 二 )


是增量抽取还是全量抽取呢?这个是根据业务需求而定,全量抽取比较好操作,每次做数据清洗任务时,把需要的表全部抽取过来就可以了。而增量抽取是只抽取新增部分的数据,要实现增量抽取,就要准确地捕获到数据库中数据源表的变化。
数据的变化无非是增、删、改,只要能监测到数据有这三种形式的变化,并对变化做一些处理,就能实现增量抽取了。增量抽取有四种方式:
① 触发器方式
在被抽取的数据源表上建立插入、修改、删除3个触发器,当源表中的数据发生变化(是新增、修改,还是删除了),可以指定一个或多个具备唯一性的字段来监测,对应的触发器就将变化的数据写入一个增量日志表,抽取时则从增量日志中抽取,同时,增量日志表中抽取过的数据要及时被标记或删除。
② 时间戳方式
增量抽取时,通过比较指定抽取时间与抽取源表的时间戳字段的值决定抽取哪些数据。这种方式需要在源表中增加一个时间戳字段,源表数据更新或修改时,同时也会修改时间戳字段的值,这样就知道源表发生了哪些变化,将变化的数据重新抽取即可。
③ 全表比对方式
增量抽取时,ETL任务会逐条比较源表和目标表的记录,将新增或修改等变化的记录过滤读取出来,这种方式就比较考验硬件环境了。
④ 日志表方式
在数据库中创建业务日志表,增量抽取时,通过读日志表数据决定加载哪些数据,日志表的维护需要由业务系统程序编写代码完成。
以上四种增量抽取方式没有一种方式具有绝对优势,不同的方式在不同的企业中表现大体平衡。通常根据企业的业务需求和硬件环境来选择。
根据这四种方式描述,可以看出,我们比较好设计到产品中的就是触发器方式、时间戳方式、全表比对方式。
增量|如何从0-1搭建ETL?
文章插图
增量|如何从0-1搭建ETL?
文章插图
增量|如何从0-1搭建ETL?
文章插图
3)任务调度
如果需求是按日、按周或者按月抽取数据,并执行清洗任务,怎么办呢?可以通过任务调度功能来实现。
任务调度功能的设计就是来自于cron表达式。cron,是计划任务,指在约定的时间执行已经计划好的工作,是用代码来实现任务调度的用法。
任务调度的运行频次一般包括分、时、日、周、月,为什么没有秒调度,这玩意儿要求太高了,比较耗费资源,能满足到分的定时任务就可以了。调度任务的配置逻辑就是任务在什么时间开始运行,多久运行一次,什么时间结束运行。
增量|如何从0-1搭建ETL?
文章插图
2. 功能点二:转换数据的清洗转换,主要任务是过滤掉不符合要求的数据,不符合要求的数据主要有不完整的数据、错误的数据、重复的数据三大类。
根据数据清洗的业务需求,在ETL产品中设计各种类型的清洗组件,在组件设置页面由用户配置清洗规则,完成数据清洗任务的设计。
例如,根据抽取、转换、加载的流程,组件可以分为三大类:输入、转换、输出。

  1. 输入组件包括数据表输入、Excel文件输入、SQL输入等;
  2. 转换组件包括过滤、聚合、合并、排序、数据脱敏、增加计算字段、行转列等;
  3. 输出组件包括数据表输出、Excel文件输出等。
增量|如何从0-1搭建ETL?
文章插图
3. 功能点三:加载数据加载的主要任务是将数据从临时数据表或文件中加载到指定的数据仓库中。如果是全量方式则采用LOAD方式,如果是增量则根据业务规则,使用SQL语句MERGE进数据库。