设计工程

设计工程

DMETL中的工程是一个个与数据清洗转换与同步相关的对象的集合;从逻辑上来说,工程包括转换、作业、函数、变量和调度等五种子集合。其中,转换和作业统称流程,负责执行业务逻辑;函数可扩展系统功能;变量用于在不同流程和流程组件之间传递参数和数据;流程可在流程设计器中手动执行,但一般多为其配置调度、以后台调度方式执行。

创建project-HOTEL_Management工程

在DMETL首页,用户可点击【设计】下的【工程】按钮,进入工程管理页面,选中【工程】,右键选择【新建工程】,在弹出的新建工程对话框中,输入工程名与描述,即可完成工程的创建。

之后,依次展开工程→project-HOTEL_Management,可在相应节点中创建各种工程子对象。

创建“转换--PERSON_INFO数据清洗转换与同步”转换

选中【转换】,右键选择【新建转换】,在弹出的新建转换对话框中,输入转化名与描述,即可完成转换的创建。

DMETL中的转换代表一个执行数据处理的流程,是由数据读取组件、数据转换组件、数据装载组件以及正确线、错误线组成,一个可以执行的转换必须包含至少一个组件。

双击“转换--PERSON_INFO数据清洗转换与同步”,进入流程设计界面,通过拖拽的方式进行转换设计;依次从右侧拖入【数据读取--增量表】、【数据转换--数据清洗转换】、【数据转换--列转换】、【数据装载--增量表】等组件,并按顺序用SUCCESS_CONNECTION(将鼠标指针移至组件图标上,用鼠标左键按住绿色下三角,即可拉拽出来)连接起来,然后给组件重命名(鼠标右键点击组件图标,选中“重命名”,即可给组件重命名,然后点击空白处,完成操作);设计结果如下图所示。

设计转换

各组件的主要配置情况如下各图所示。

增量表-数据读取组件

备注:选中【首次同步时同步基表数据】,则在该组件首时次运行时,先从基表(即本例中的PERSON_INFO表)中读取数据并包装成INSERT型增量数据、再从增量表(即本例中的PERSON_INFO_SHADOW_CDC表)中读取增量数据,向下游组件输出。

数据清洗转换组件

列转换组件

备注:函数inferAgeFromID的创建,见步骤(4)

增量表-数据装载组件

创建“作业--旅客信息更新与统计”作业

选中【作业】,右键选择【新建作业】,在弹出的新建作业对话框中,输入作业名与描述,即可完成作业的创建。

DMETL中作业是一个控制转换和其它作业节点的执行顺序和过程的流程,由作业节点和连接线构成;一个作业至少包含一个作业节点,但节点之间的连接不是必须的。用户可以通过作业控制转换及其它作业节点之间执行的先后顺序、依赖关系,因此,作业又被称为控制流。作业中的连接线表示作业节点的执行顺序,连接线分为成功线、失败线、完成线和条件线;成功线表示如果作业节点执行成功则继续执行后续节点,失败线表示作业节点执行失败后再继续执行后续节点,完成线表示无论作业执行成功还是失败,都继续执行后续节点,条件线表示当满足一定的条件时,才执行后续的节点。

双击“作业--旅客信息更新与统计”,进入流程设计界面,通过拖拽的方式进行作业设计;依次从右侧拖入【引用--转换】、【脚本--设置变量】、【脚本--SQL脚本】等组件,并按顺序用SUCCESS_CONNECTION(将鼠标指针移至组件图标上,用鼠标左键按住绿色下三角,即可拉拽出来)连接起来,然后给组件重命名(鼠标右键点击组件图标,选中“重命名”,即可给组件重命名,然后点击空白处,完成操作);设计结果如下图所示。

设计作业

各节点的主要配置情况如下各图所示。

引用转换

SQL脚本节点

SQL脚本节点

TRUNCATE TABLE HOTEL."旅客信息统计表";
INSERT INTO HOTEL."旅客信息统计表" VALUES('1、总人数', CAST((${guestCountTotal}) AS VARCHAR(50)));
INSERT INTO HOTEL."旅客信息统计表" VALUES('2、男性人数', CAST((${guestCountMale}) AS VARCHAR(50)));
INSERT INTO HOTEL."旅客信息统计表" VALUES('3、女性人数', CAST((${guestCountFemale}) AS VARCHAR(50)));

备注:${guestCountTotal}表示引用变量guestCountTotal的值;变量的创建见步骤(5);

创建inferAgeFromID函数

选中【函数】,右键选择【新建函数】,在弹出的对话框中输入函数名、函数内容、函数描述,点击【确定】,完成函数的创建。

函数名:

inferAgeFromID

函数内容:

import java.util.Calendar;
public static int inferAgeFromID(String id, int initialage)
{
	if ( id.length() != 18 )
 	{
		return initialAge;
	}

​	Calendar calendar = Calendar.getInstance();
​	int yearNow = calendar.get(Calendar.YEAR);
​	int monthNow = calendar.get(Calendar,MONTH) + 1:
​	int dayNow = calendar.get(Calendar.DATE);

​	int year = Integer. value0f( id.substring(6,10) );
​	int month = Integer.valueOf( id.substring(10,12) );
​	int day = Integer.valueOf( id.substring(12,14) );

​	return ( ( month < monthNow ) || ( month == monthNow && day = dayNow ) )
​		? ( yearNow - year ) : ( yearNow - year - 1 );
}

函数描述:

根据身份证号推算年龄

该函数的功能是,根据身份证号推算年龄。

**DMETL支持使用函数来对数据进行处理,扩展系统功能。**除了使用系统函数外,DMETL还支持用户自定义函数。用户自定义函数必须完全遵循java语言的函数语法规则,函数必须声明为“public”以及“static”类型,且函数名中填写的“函数名”与函数内容中填写的“函数名”必须一致,否则函数检验会报错。函数定义中可以调用系统函数,也可以调用第三方函数;将依赖的第三方包放到<执行器根目录>\function\third目录下即可。使用【检验函数】按钮可以检查函数定义的语法是否正确。同一工程中的函数不允许重名,工程函数与全局函数不允许重名。

创建变量

选中【变量】,右键选择【新建变量】,在弹出的对话框中输入变量名、变量值表达式、变量描述,点击【确定】,完成变量的创建。所需创建的变量的相关信息见下表:

变量名 变量值表达式 变量描述
guestCountTotal 0 用于在作业执行过程中,缓存旅客总人数
guestCountMale 0 用于在作业执行过程中,缓存男性旅客人数
guestCountFemale 0 用于在作业执行过程中,缓存女性旅客人数

DMETL中使用变量在不同的流程和流程组件之间传递参数和数据。变量的数据类型一般为java中的基本类型或者java类,由其值的类型决定。

创建perMinute调度

选中【调度】,右键选择【新建调度】,如下图所示,完成调度的创建。

创建调度

一个流程可以引用多个调度,一个调度也可以被多个流程引用。

为作业配置调度

选中“作业--旅客信息更新与同步”,右键选择【配置调度】,在弹出的流程调度配置对话框中,勾选需要引用的调度即可,如下图所示。

为流程配置调度

至此,一套较为完整的数据处理系统就搭建好了,后续可以对其进行简单地测试。

微信扫码
分享文档
扫一扫
联系客服