@wddpct
2018-12-13T18:38:29.000000Z
字数 2559
阅读 1606
DSL 又称领域特定语言,旨在用特定的语言组织描述并解决某个特定领域下的问题。
通过定义注册数据引擎 DSL ,源数据库表,目标数据库表信息,经由数据引擎解析调用,完成针对源数据的提取处理传输(ETL)工作。
项目地址: http://git.sy/infrastructure/data_engine
def var 入院时间 scope visit_record <= sql(fmop.visit.visit_record.visit_time);
// 定义 scope
let visitScope = new Scope('visit_record');
let parentScope = new Scope('patient_master_info');
// 定义 scope 之间的关系
visitScope.setParent(parentScope);
DATASOURCE
,示例 postgres://user:password@localhost:port/database
DATATARGET
,示例 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 end
patient_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;