【IT168 技术文档】一、DMETL介绍
DMETL是达梦数据库有限公司研制开发的具有自主知识版权的、商品化的数据交换平台,可以快速地实现对基于数据的企业应用集成。DMETL通过建立底层数据交换平台来联系整个企业的异构系统、应用、数据源等,实现在企业内部的ERP、CRM、SCM、数据库、数据仓库,以及其它重要的内部系统之间无缝地共享和交换数据。
二、模拟案例
去年以来,甲流H1N1肆虐全球,国内患者也逐渐增多,某市卫生部门启动紧急预案,要求各医院对感冒病人进行登记,隔离观察,对确诊甲流的病人,要及时治疗。这些数据必须每天报送市甲流中心办公室,甲流中心办公室需对确诊甲流的病人,建立档案,补充病人详细个人信息,以便及时对病人家属及其居住所采取防范措施。
三、实验环境准备
使用一台电脑,安装DM5.6数据库、Oracle数据库、DMETL,并按以下要求建好库、表环境。
医院:
使用DM5.6数据库,建立数据库HOSPITAL,用户HOSPITAL
执行建表语句
(
ID INTEGER IDENTITY(1,1) NOT NULL, --自增ID号
XM VARCHAR(50), --姓名
XB VARCHAR(2), --性别
SFZHM VARCHAR(18), --身份证号码
SFH1N1 VARCHAR(2), --是否H1N1患者
JCRQ TIMESTAMP(0), --检查日期
PRIMARY KEY(ID)
)
公安人口库:
使用Oracle10g数据库,实例名ORCL,用户GARKK
执行建表语句
(
ID NUMBER(10,0) NOT NULL, --主健ID
NAME VARCHAR2(50) NULL, --姓名
SEX VARCHAR2(2) NULL, --性别
HJSZD VARCHAR2(50) NULL, --户籍所在地
JZD VARCHAR2(50) NULL, --居住地
HYZK VARCHAR2(2) NULL, --婚姻状况
CSRQ TIMESTAMP(6) NULL, --出生日期
SFZHM VARCHAR2(18) NULL, --身份证号码
PRIMARY KEY(ID)
)
甲流中心办公室:
采用DM5.6数据库,建立数据库H1N1CENTER,用户H1N1CENTER
(
ID INTEGER IDENTITY(1,1) NOT NULL, --自增ID号
XM VARCHAR(50), --姓名
XB VARCHAR(2), --性别
SFZHM VARCHAR(18), --身份证号码
SFH1N1 VARCHAR(2), --是否H1N1患者
JCRQ TIMESTAMP(0), --检查日期
PRIMARY KEY(ID)
)
CREATE TABLE H1N1JL
(
ID INTEGER, --主键ID号
XM VARCHAR(50), --姓名
SFZHM VARCHAR(50), --身份证号码
QZRQ TIMESTAMP(0), --确诊日期
HJSZD VARCHAR(50), --户籍所在地
CSRQ TIMESTAMP(0), --出生日期
JZD VARCHAR(50), --居住地
SFYH VARCHAR(2), --是否已婚
PRIMARY KEY(ID)
)
四、甲流病人信息整合流程配置
根据需求,当医院发现某些病人确诊为甲流后,将会在GMBR表中将SFH1N1字段的值更新为“是”,这些变化将传递到甲流中心的GMBR表。甲流中心每天将检查GMBR中这些确诊为甲流的病人记录,并将其整合公安人口库当中的性别、户籍所在地、居住地、婚姻状况、出生日期等信息,然后写到专门的甲流人员记录表H!N!JL中。
分析以上需求,医院GMBR数据到甲流中心GMBR的同步已经在流程一完成,现在的任务是将甲流中心GMBR中的数据,筛选出SFH!N!=是的信息,并根据该记录的身份证号码,到公安的人口库的RKXX中去查找性别、户籍所在地、居住地、婚姻状况、出生日期信息,组合成完整的信息后,写入到甲流中心的H1N1JL表。
首先,我们先增加一个新的数据源GARKK,并添加表RKXX。注意这次是选择Oracle10数据库,填写用户名GARKK及相应密码,数据库名为ORCL,可点击测试连接来验证是否填写正确。
另外在H1N1CENTER数据源中,添加另一张表H1N1JL,下面的转换流程中要用到。
新建一个转换H1N1,先放上一个表数据源命名为GMBR,指向甲流中心的GMBR表,放上一个表目的,命名为H1N1JL,指向甲流中心的H1N1JL表。
先看第一个需求,筛选确诊为甲流的记录。从右边工具箱中—转换栏中,选择一个条件性拆分组件,添加到编辑区,并将表数据源与其连接起来。
双击条件性拆分,弹出属性编辑框,添加一个输出“确诊甲流”,表达式使用相等判断函数,equals(SFH1N1,”是”)。
确定后,将条件性拆分的绿色箭头拖向表目的H1N1JL,这是会弹出选择条件,选中确诊甲流,表示满足确诊甲流条件的数据将传递到表目的。
保存并执行流程,会发现H1N1JL表中输入了几条记录,正是GMBR表中SFH1N1=“是”的记录。
由于这次设计的GMBR是全量抽取,因此可在流程每次执行前,执行一个SQL脚本,清除表目的当中的记录,这样每次可将数据全部完整处理一遍。
从工具箱中,选择一个SQL脚本组件加入,双击属性,选则数据源H1N1CENTER,输入SQL语句 DELETE FROM H1N1JL,执行时机为 开始时,这样该语句只在流程开始时执行一次。
将其插入到表数据源GMBR与条件性拆分之间。
为实现对公安人口库的整合,可从工具箱中添加一个数据库查找组件,放到条件性拆分之后。配置其属性如下:
数据源:选中 GARKK,模式GARKK,表RKXX。
查找列:输入列SFZHM,引用列SFZHM,表示到数据库GARKK的表RKXX中去查找SFZHM字段等于进入该节点的待处理数据中的SFZHM字段的值,对流经该节点的每条数据都要进行查找。
在输出列中,选中以下字段,分别是性别、户籍所在地、居住地、婚姻状况、出生日期。
高级选项使用默认配置。
确定后,执行流程,可发现H1N1JL表中已经有部分字段集成了公安人口信息,但还有部分字段是空的。
双击表目的H1N1JL表,可看到部分字段前面没有绿色对勾,说明前面输入的字段与表目的的字段存在不匹配,需要采取另一个组件—列映射来解决。
选择列映射组件插入到数据库查找组件和表目的之间,配置属性,其中输入列JCRQ输出别名改为QZRQ,输入列HYZK改为SFYH。
到此,由于H1N1JL1每次将重新生成,希望每次生成的时候,其ID是连续的,而现在输入到H1N1JL中的ID值是原来感冒病人中的ID,经过甲流确诊条件过滤后,不连续,我们可以增加一个序列组件解决这个问题。
最后的完整流程图如下,实现了确诊甲流的感冒病人信息与公安人口信息的整合。
五、定期执行
根据需求,从医院到甲流中心的数据同步,以及甲流中心数据与公安数据的整合,最终形成甲流病人记录的过程,需要每天进行一次。
这个可以通过DMETL的作业调度功能来实现。
新建一个作业,名称为甲流数据同步
从工具箱—引用中,选择加入两个转换引用,分别配置其属性指向GMBR,H1N1,并将GMBR的绿色输出线指向H1N1。
在作业甲流数据同步节点上右键,选择属性,弹出属性对话框。
选择调度信息。
新建一个调度,选则反复执行,每天执行一次,于20:00:00执行。
配好调度之后,点击工具栏上的启动引擎按钮:
则该作业将于每天晚上8:00钟开始执行。
至此,我们已经实现了对甲流病人数据处理过程的定期执行,实现了高度自动化的数据处理过程,为卫生部门及时准确掌握甲流疫情提供了数据支持。