odps项目中应用

交互图
项目改动自动同步odps & 每天更新
阿里云 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、自动创建的表,最好把所有数据汇总到一起处理

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值