1. 概述
1.1 问题描述
很多客户希望采用FineDataLink搭建数据仓库,数据仓库中ETL任务的调度配置是非常关键的一方面。我们希望数仓层级中的ODS层、DW层和DM层,层层相关,并且每个层级的ETL任务都是以最高的效率来执行的。
1.2 目标场景
客户需要搭建包含ODS、DW、DM3层的数据仓库:
- ODS层是由业务系统直接拉取过来的原始数据。
- DW层是基于ODS层进行汇总处理的中间层数据。
- DM层是基于DW层,并且根据报表展示诉求而加工获得的结果层数据。
其中业务系统有3套,OA、ERP和线下Excel数据:
- ERP和线下Excel数据每天固定更新一次。
- OA数据不定期更新。
- 为提高执行效率,当OA系统数据有变化时,对应ODS层ETL任务才需要运行。
1.3 解决方案
通过参数赋值节点获取OA系统最新的更新时间,再通过参数设置功能和条件分析节点进行控制。
- 若ETL任务执行的当天OA系统有数据更新,ODS层则执行OA、ERP和Excel。
- 若OA系统当天未更新,ODS层则仅执行ERP和Excel数据,DW层和DM层基于ODS层数据进行处理。
由于每个层级内的ETL任务比较多,为方便查看,可以通过调用任务节点进行管理,形成数仓调度任务。
注意:由于DW层ETL任务需要引用OA系统对应ODS层数据,当数仓调度任务首次执行时,恰好当天OA系统数据并没有更新,此时DW层对应任务将会执行失败。
为避免此报错的产生,数仓调度任务开启运行前,需要单独运行ODS层中获取OA系统数据的同步任务一次,具体设计方法见下方。
2. 任务开发流程
我们累计需要创建4个ETL任务,分别是:数仓-ods层、数仓-dw层、数仓-dm层、数仓调度层。
2.1 数仓-ODS层
由于ODS层中OA系统相关数据表仅有1张,所以此表的数据抽取,创建于数仓调度层ETL任务中,通过独立的数据同步节点完成。
ERP和线下Excel数据预计有6张表,如果在数仓调度层的ETL任务中使用6个数据同步节点,会使ETL任务显示比较臃肿,所以我们创建一个ETL任务,命名:数仓-ODS层,在数仓调度层ETL任务中引用数仓-ODS层ETL任务即可。
为提高ODS层内多个ETL任务的执行效率,我们设置该层所有任务可并行运行,我们运用虚拟节点指向多个数据同步节点,完成此思路,具体设置见下方。
2.2 数仓-DW层
参考ODS层任务设计,我们再创建一个ETL任务,命名:数仓-DW层,该层中的3个数据同步节点,分别从ODS层的ERP、OA、Excel3类数据表汇总加工数据,并存储至DW层中间表。
2.3 数仓-DM层
参考ODS层、DW层任务设计,我们再创建一个ETL任务,命名数仓-DM层,数据同步中获取的数据,均来源于DW层数据表,具体设置见下方。
2.4 数仓调度层
2.4.1 获取OA最新更新时间
创建数仓调度层ETL任务,命名:数仓调度层,使用参数赋值节点,max()函数获取OA系统中更新时间的最大值,并将此时间点赋值给updatetime参数,sql语法和节点显示效果见下方。
select date_format(max(starttime),'%Y-%m-%d') from updatetime
2.4.2 判断OA系统今日是否更新
1)参数设置
使用自定义参数功能,创建today参数,类型选择日期,值为yyyy-mm-dd,含义为ETL任务运行时的日期。
2)条件分支
使用条件分支、数据同步、调用任务节点,将条件分支节点分别连向ODS层的2个流程;
条件分支节点中,进行设置:
- 当updatetime参数和today参数数值相等时,即OA系统最新更新时间为今日时,执行ODS层-OA、1-ODS层-ERP流程。
- 当两个参数数值不等时,即今天OA系统没有进行数据更新,执行2-ODS层-ERP流程。
具体设置如下:
2.4.3 调度配置
使用调用任务节点,将参数赋值、条件分支、数仓-ODS层、数仓-DW层、数仓-DM层衔接起来,设置调度配置,设置ETL任务的更新频率,数仓-ODS层、数仓-DW层、数仓-DM层,3个ETL任务不再需要设置单独的调度配置频率,跟随数仓调度层ETL任务的更新频率即可。
2.5 任务运行
为保证ODS层中OA数据表不为空,所以任务正式运行前,需要单独运行一次ODS层-OA节点;
若ETL任务运行当天,恰好OA系统进行了数据更新,运行日志效果如下,其中【2-ODS层-ERP、EXCEL】节点被跳过执行。
由0到1,带您进入FineDataLink的世界
|