一、背景
有4个业务表每天都要统计,按照天统计,并且把4个业务表的数据合并成一条,使用的是 Multiway Merge Join,问题,由于使用的 full outer join ,所以如果关联的字段是null会出现多条记录,因为有的业务表按照日期分组没有数,而我是安装日期关联4个业务表数据,所以就出现了问题,
二、解决问题
- 利用"检测是否空流"组件(官方解释:默认返回一条值为NULL数据行),使用JavaScript给定默认值(我的时间是动态的,如果时默认值是静态可以使用"将字段值设置为常量"组件)
如下图
- JavaScript中通过fireToDB函数查询统计的日期
if (data_time==null) {
var conn = "postgresql51"; //名字与转换中"DB连接"中定义的名称一致
var sql = "SELECT job_start_time,job_end_time FROM kettlejob where job_type =3 ORDER BY id DESC LIMIT 1";
var xArr = fireToDB(conn, sql);
var job_start_time = xArr[0][0]; // 统计的日期
//for(var i in xArr){ // 返回只有一行,所以我取第一行,如果多行可以遍历
//var job_start_time = xArr[i][0];
//}
//var job_start_time = dateAdd(new Date(), "d", -1);//获取系统时间,不用数据库
var newRow = createRowCopy(getOutputRowMeta().size()); //创建新的数据流行
newRow[0] = null;
newRow[1] = null;
newRow[2] = date2str(job_start_time, "yyyy/MM/dd"); //赋值
putRow(newRow);//加入流中
trans_Status = SKIP_TRANSFORMATION; //跳过“空检测”返回的一行空数据流
}
注意:同一个转换中的一个job是顺序执行,但是多个job是并行执行