交互图
阿里云 dataWorks官方文档
https://help.aliyun.com/product/28850.html
手动执行流程:
创建连接
public class DataWorksManager {
private String accessKeyId;
private String accessKeySecret;
private String endPoint;
private static final Object lock = new Object();
private static volatile Client client = null;
public Client getClient() throws Exception {
if (client == null) {
synchronized (lock) {
if (client == null) {
Config config = new Config()
.setAccessKeyId(accessKeyId)
.setAccessKeySecret(accessKeySecret);
config.endpoint = endPoint;
client = new Client(config);
}
}
}
return client;
}
}
创建手动业务流程实例,返回DagId,业务日期必须小于当前日期
public Long createManualDag(Long ruleId) {
Date bizDate = DateUtils.addDays(new Date(), -1);
bizDate = DateUtils.getOfDayFirst(bizDate);
Date nowDate = DateUtils.getOfDayFirst(new Date());
//业务日期必须小于当前日期
if (bizDate.compareTo(nowDate) >= 1) {
return null;
}
String bizDateStr = DateUtils.formatDate(bizDate, DateUtils.DATE_YYYY_MM_DD_HH_MM_SS);
CreateManualDagRequest createManualDagRequest = new CreateManualDagRequest()
.setProjectEnv(projectEnv) //dataWorks环境
.setProjectName(projectName) //dataWorks项目名
.setFlowName(flowName) //业务流程名称
.setBizDate(bizDateStr) //日期
.setNodeParameters(buildNodeParameters(nodeIds, ruleId)); //节点 & 参数
try {
Client client = dataWorksManager.getClient();
CreateManualDagResponse manualDagResponse = client.createManualDag(createManualDagRequest);
if (manualDagResponse != null && manualDagResponse.getBody() != null && manualDagResponse.getBody().getDagId() != null) {
return manualDagResponse.getBody().getDagId();
} else {
//error
}
} catch (Exception e) {
//error
}
return null;
}
根据DagId 手动获取业务流程状态
public String getDagStatus(Long dagId) {
GetDagRequest getDagRequest = new GetDagRequest()
.setDagId(dagId)
.setProjectEnv(projectEnv);
try {
Client client = dataWorksManager.getClient();
GetDagResponse dagResponse = client.getDag(getDagRequest);
if (dagResponse != null && dagResponse.getBody() != null && dagResponse.getBody().getData() != null) {
return dagResponse.getBody().getData().getStatus();
} else {
return null;
}
} catch (Exception e) {
//error
}
return null;
}
手动创建流程可以在心间规则之后,同步调用。然后再通过job来查询业务流程的执行结果。
自动流程可以当作数据补充修正,每天凌晨自动执行一次。
需要注意的点:
自动 & 手动 的odps流程:
1、手动创建的表 建议拆分到每个规则,这样修改/新增规则的时候,只需要重新计算相关的表
2、自动创建的表,最好把所有数据汇总到一起处理