@wddpct
2018-12-13T10:38:29.000000Z
字数 2559
阅读 1951
DSL 又称领域特定语言,旨在用特定的语言组织描述并解决某个特定领域下的问题。
通过定义注册数据引擎 DSL ,源数据库表,目标数据库表信息,经由数据引擎解析调用,完成针对源数据的提取处理传输(ETL)工作。
项目地址: http://git.sy/infrastructure/data_engine
def var 入院时间 scope visit_record <= sql(fmop.visit.visit_record.visit_time);
// 定义 scopelet visitScope = new Scope('visit_record');let parentScope = new Scope('patient_master_info');// 定义 scope 之间的关系visitScope.setParent(parentScope);
DATASOURCE,示例 postgres://user:password@localhost:port/databaseDATATARGET,示例 postgres://user:password@localhost:port/database
def var $VARIABLE_NAME type $TYPE_NAME scope $SCOPE_NAME <= $EXPRESSION;#def var $VARIABLE_NAME type $TYPE_NAME scope $SCOPE_NAME <= $EXPRESSION;
以 $ 开头的单词代表用户自定义或是系统指定的几种类别,# 代表注释。
$VARIABLE_NAME patient_id 或 病患标识,可以在 $EXPRESSION 重复使用$TYPE_NAME any,bool,number,text,time,timeSpan,integer$SCOPE_NAME $EXPRESSION $EXPRESSION 可看成是各种 $EXPRESSION 的组合。是比如数字 1 就是一个 $EXPRESSION,同理 1 + 1 也是一个 $EXPRESSION,$EXPRESSION 之间通过操作符,函数和操作过程连接。 select $EXPRESSION where $EXPRESSION end 以及 CASE WHEN $EXPRESSION THEN $EXPRESSION WHEN $EXPRESSION THEN $EXPRESSION ELSE $EXPRESSION endpatient_id,fmop 代表数据库名称,暂时固定。patient.patient_master_info.patient_id 代表完整的字段路径,即 patient schema 下 patient_master_info 表的 patient_id 字段。使用了 sql 函数。
def var patient_id type integer scope patient <= sql(fmop.patient.patient_master_info.patient_id);
def var 性别 scope patient <= sql(fmop.patient.patient_master_info.sex_name);
def var 出生日期 type time scope patient <= sql(fmop.patient.patient_master_info.birth_date);
def var 入院时间 scope visit <= sql(fmop.visit.visit_record.visit_time);
def var 首次入院时间 type time scope patient <= min(sql(fmop.visit.visit_record.visit_time));
- 操作符
def var 首次就诊年龄 type integer scope patient <= var 首次入院时间 - var 出生日期;
def var 首次肺癌确诊日期 type time scope patient <= select min(var 入院记录) where var 诊断为肺癌 == true end;
def var 是否诊断为肺癌 type bool scope patient <= CASE WHEN var 诊断为肺癌 == true THEN true WHEN var 诊断为肺癌 == true THEN true ELSE false end;