环境说明
操作系统版本:Windows 10
DMETL5版本:V5.0.3.05-Build(2021.12.20-104448)单机版
DM8源端库:本机Windows实例,端口5236
DM8目的库:本机Windows实例,端口5238
一、功能介绍
- 在我们使用ETL工具时,经常会需要配置许多简单的转换,这些转换使用的组件很少,但是需要配置的表很多,如果一个一个的配置就非常的麻烦,全都是重复的没技术含量的操作。这个时候,批量流程向导功能应运而生,专门解决这个问题。
- DMETL提供了基于模版的批量生成流程工具,使用批量生成工具可以帮助用户快速生成一系列的转换或者作业,从而避免用户手工去创建多个配置相似流程的繁琐过程。
- 批量流程向导主要支持单个独立属性的替换,对于节点前后有依赖传递的属性并不支持。所以有些组件虽然可以复制(比如数据清洗转换),但是内部配置不能更改,可能出现生成的转换执行报错的问题。
- 批量生成的转换可以直接执行无需再进行修改,帮助ETL工作者节省大量时间精力。
二、批量创建变量、函数释义
-
使用批量流程向导,相当于是将模板的转换名称,数据集等进行相应的更换,因此需要用到许多变量及函数,来告诉ETL工具如何替换相应转换名称及数据集等。灵活运用这些函数及变量,可以使批量流程向导实现更批量生成更复杂的转换。下面仅列举常用变量及函数,更多变量及函数请参考“DMETL用户手册“的”附录二“,”附录三“章节
-
批量创建变量
index 批量创建时的下标(序列)
date 系统当前日期
time 系统当前时间
dataSource1 数据读取数据源
dataSource2 数据装载数据源
dataSet1 数据源节点数据集
dataSet2 数据装载节点数据集
-
批量创建函数
cutCDCSuffixName 截取去除CDC表名后缀
getDataSetIdByName2 通过源数据集名,数据库名,模式名匹配
getDataSetIdByName 通过源数据集名匹配
-
批量创建变量及批量创建函数具体用法详见
“三、配置案例2.配置批量生成向导3)配置生成流程c)设置流程名称”以及
“三、配置案例2.配置批量生成向导5)配置节点信息c)装载节点属性配置”
三、配置案例
- 创建模板转换
-
创建具有代表性的模板流程,主要包含节点信息和连接线信息,后续将以该流程为准创建多个类似的流程。
-
本次案例采用的是影子表增量同步,在源数据集与目的数据集之间,配置了一个数据清洗转换。如下图:

-
源数据集属性如下图:

-
数据清洗转换配置如下图:

-
规则内部使用了乱码检测功能,将乱码替换为空,如下图:

-
目的数据集配置如下:

- 配置批量生成向导
2.1 打开批量流程向导

2.2 选择流程类型
在设计中打开批量生成工具,流程类型选择界面,如下图所示:

- 用户在此页需指定批量创建流程所在的工程,点击"选择"按钮即可从工程列表中选择相应工程,并选择批量创建流程类型。本次示例选择指定工程为“test”,选择创建类型为“转换”。
2.3 配置生成流程
在完成工程和流程类型选择后,点击"下一步"进入“配置生成流程”界面,本次示例以批量生成转换为例,界面如下图所示:

a) 指定转换目录:用于指定批量创建流程所在的目录,点击"选择目录"可以在已指定的工程中选择转换目录。
b) 指定转换模版:用于指定批量创建流程所基于的模版,点击"选择模版"可以在已指定的工程中选择任意转换作为批量生成转换的模版。
c) 设置流程名称:因为要保证批量流程名称不同这里使用了变量,变量使用#{}包含,流程名默认为"源数据集名称_#{index}_#
{current_timestamp_str()}"。#{index}表示批量创建时的下标,#{current_timestamp_str()}表示创建时的时间,可以使用变量date和time代替,一般建议保留#{index}保证名称不同。
2.4 配置节点信息
a) 源节点属性配置

- 选中节点"编辑属性"会弹出相应的属性编辑列表,如表源与表装载中支持数据集ID属性的批量配置,有些特殊节点不支持批量配置该页面不会显示属性列表。支持批量配置属性的节点有:CSV、EXCEL、TXT、XML文件装载读取节点,mongoDB、Hbase、表的装载读取节点,SQL脚本读取节点,SQL脚本执行转换节点。
- 点击表读取节点"编辑值",选择批量配置中表源的数据集,按住ctrl可多选,由于模板是增量同步,因此要在cdcs中选取cdc表,配置信息如下图所示:

b) 数据清洗转换节点
不支持配置,会直接复制,确保所有表均有NAME域即可
c) 装载节点属性配置

- 操作列,默认#{dataSet1.getColumns()[1].getName()},获取数据源节点数据集的第二列的名字,一般不需要更改,如下图:

- 数据集ID表达式
默认#{getDataSetIdByName2 ("dataSourceName","catalogName","scheamName" ,dataSet1.getDataSetName().split("_SHADOW_CDC")[0])}
需修改为#{getDataSetIdByName2 ("DM8目的端",null,"EMS_TEST" ,dataSet1.getDataSetName().split("_SHADOW_CDC")[0])}
此处null是由于dm8默认只有一个库,如果是类似dm6的多库形式则要按需填写,如下图:

- 点击”批量创建函数“,选择”getDataSetIdByName2“函数,编辑函数对应的三个参数”dataSourceName“,“catalogName“,“ scheamName ”,此次示例中函数编辑如上图所示,然后点击”确定”。
- 数据集在名字上存在一定关联性。这时候在属性配置表达式可使用批量创建函数getDataSetIdByName2依据数据源数据集名称在数据源下查找对应数据集返回ID。在本例中具体参数对应如下:
#{getDataSetIdByName2 (String dataSourceName,String catalogName,String scheamName ,String dataSetName)}
#{getDataSetIdByName2 ("DM8目的端",null,"EMS_TEST" ,dataSet1.getDataSetName().split("_SHADOW_CDC")[0])}
- 这里dataSet1是所有包含数据集的节点中变量的一个用法,dataSet1后面的序号"1"对应节点列表中的序号。如果存在特定的对应关系可以创建全局函数进行处理。
- 查找列属性与模板保持一致,如下图:

- 勾选,生成的目的表属性才会配置插入更新栏配置,如下图:

2.5 确认创建流程
配置完成后点击下一步,便会在缓存中构建流程信息,流程信息界面如下图所示:
- 选择需要创建的流程,或创建所有,亦或是有需求将所有转换的引用创建在同一个作业中。勾选上方法选择框,输入作业名称为“增量作业TEST“,再创建流程则会在指定的项目作业目录下创建作业,作业中包含所有流程的引用。

- 执行批量生成的转换
3.1 检查批量创建的转换及作业

3.2 执行作业
- 显示全部执行成功

3.3 检查目的表数据是否插入成功
四、总结
- 使用“批量流程向导”功能确实可以实现批量生成多个转换,避免了用户手工去创建多个配置相似流程的繁琐过程。节省时间精力。
- 但是该功能也存在一些不足,比如需要先配置模板、配置向导本身也需要一定的学习成本、不支持较复杂的转换、如果配置错误,那么生成的转换可能全都存在问题。
- 总的来说,利大于弊,学会了使用该功能,那么日后在碰到类似需求时便可做到胸有成竹,如鱼得水。