工欲善其数,必先利其器!
DataWorks OpenAPI现已正式发布,通过自带的100多个API 功能,可以快速进行批量操作与系统集成对接等,助您显著提升数据开发效率!
(DataWorks OpenAPI限企业版及以上版本使用)
DataWorks OpenAPI现开放7天免费试用,请使用钉钉扫码联系,提供试用账号的UID与Region即可。
本篇文章将详细介绍DataWorks OpenAPI从创建业务流程以及节点发布上线,到删除节点和业务流程,一整个闭环的使用方式,帮助您快速上手DataWorks OpenAPI的使用
一、整体流程图
二、 初始化
public class IdePopApiTest { // 账号信息 "${aliyun.akId}") ( private String akId; "${aliyun.akSecret}") ( private String akSecret ; // 例:cn-shanghai "${aliyun.region}") ( private String region; // 例:dataworks.cn-shanghai.aliyuncs.com "${aliyun.endpoint}") ( private String endpoint; private IAcsClient client; public void init() throws ClientException { String product = "dataworks-public"; IClientProfile profile = DefaultProfile.getProfile(region, akId, akSecret); DefaultProfile.addEndpoint(region, product, endpoint); client = new DefaultAcsClient(profile); } }
三、 接口调用
详细阅读DataWorks OpenAPI文档对开发非常有帮助,做API开发时如果对参数的约束不太理解时可参考DataWorks OpenAPI文档,里面对每个出入参、参数示例、错误码描述都有详细的解释。
以下是业务流程,文件夹和节点的创建、修改、删除和发布操作全流程。
1、 创建业务流程
public void createBusiness() throws ClientException { CreateBusinessRequest request = new CreateBusinessRequest(); //右上角小扳手里 工作空间ID request.setProjectId(78837L); //右上角小扳手里 工作空间名称 request.setProjectIdentifier("zxy_8221431"); //新业务流程名 唯一值 request.setBusinessName("test_create_business"); //NORMAL(数据开发)、MANUAL_BIZ(手动业务流程) request.setUseType("NORMAL"); CreateBusinessResponse acsResponse = client.getAcsResponse(request); log.info(acsResponse.toString()); }
UpdateBusiness和DeleteBusiness可以修改和删除业务流程 删除业务流程是要保证指定的业务流程中所有的节点已经删除 ListBusiness 可以查看指定工作空间下符合匹配条件的所有业务流程 GetBusiness可以查看查询业务流程的详情。
2、 创建文件夹
public void createFloder() throws ClientException { CreateFolderRequest request = new CreateFolderRequest(); request.setProjectId(78837L); // path “业务流程/” + 目标业务流程名 + 目录名 + 最新文件夹名 request.setFolderPath("业务流程/test_create_business/通用/test_floder_123"); CreateFolderResponse acsResponse = client.getAcsResponse(request); log.info(acsResponse.toString()); }
UpdateFolder可以修改文件夹的名称 DeleteFolder删除数据开发页面的文件夹(要确保此文件夹下掉节点已经全部删除)
3、 创建后ide目录结构
查看目录结构时首先隐藏引擎实例
下图为以下两个path创建的文件夹
folderPath = "业务流程/test1/MaxCompute/test_floder_123"
在MaxCompute中 文件夹刚创建成功时 目录结构时和数据开发同级的 在目录中新增一个节点后刷新页面会转移到对应的类型下 如下图新增一个odps_sql节点test_floder_123文件夹转移到数据开发下
folderPath = "旧版工作流/test_floder_123";
下图路径为 "业务流程/test_create_business/通用/test_floder_123"
在查询的是后返回的路径可能和页面上字面值不一样 对应关系如下(调用接口路径还是按页面看到的填写):
folderAlgm -> 算法
folderADBMysql -> AnalyticDB for MySQL
folderCDH -> CDH
folderDi -> 数据集成
folderEMR -> EMR
folderErd -> 数据模型
folderFlink -> Flink
folderGeneral -> 通用
folderHologres -> Hologres
folderADB -> AnalyticDB for PostgreSQL
folderJdbc -> 数据库
folderMaxCompute -> MaxCompute
folderUserDefined -> 自定义
4、 创建节点
public void createFile() throws ClientException{ CreateFileRequest request = new CreateFileRequest(); request.setProjectId(78837L); request.setProjectIdentifier("zxy_8221431"); request.setFileName("test_vi_file_name2"); request.setFileDescription("Description"); request.setFileFolderPath("业务流程/test_create_business/通用/test_floder_123"); //节点类型。 节点类型要符合目录类型 例如:fileType=23的离线同步节点 应该在数据集成目录下 request.setFileType(99); // 文件依赖的上游文件的输出 此处依赖跟节点 projectIdentifier + _root 必填 不然无法提交 request.setInputList("zxy_8221431_root"); // 对应ide页面调度配置重跑类型 必填 不然无法提交 //ALL_ALLOWED(运行成功或失败后皆可重跑) //FAILURE_ALLOWED(运行成功后不可重跑,运行失败后可以重跑) //ALL_DENIED(运行成功或失败皆不可重跑) request.setRerunMode("ALL_ALLOWED"); CreateFileResponse acsResponse = client.getAcsResponse(request); // acsResponse.getData() 为节点id 提交节点时使用 Long fileId = acsResponse.getData(); log.info(acsResponse.toString()); }
节点类型要符合目录类型 例如:fileType=23的离线同步节点 应该在数据集成目录下。您可以通过ListFile查询对应文件,GetFile获取文件的详情,在调用UpdateFile更新已有的文件节点时,填写的参数必须和该节点原本的文件配置不同。例如,源节点的某参数值为A,则需要变更为B后再提交。如果仍填写A,会报invalid异常。
5、 提交节点
public void submitFile() throws ClientException{ SubmitFileRequest request = new SubmitFileRequest(); request.setProjectId(78837L); request.setProjectIdentifier("zxy_8221431"); // 此节点id为创建节点时返回的id. 对应数据库file表的file_id. 不是ide页面上调度配置里的节点Id request.setFileId(501576542L); request.setComment("备注"); SubmitFileResponse acsResponse = client.getAcsResponse(request); //调用GetDeployment接口,获取本次发布的具体情况 Long deploymentId = acsResponse.getData(); log.info(acsResponse.toString()); }
若项目空间是标准模式 则还需要发布节点到生产环境,在删除节点时标准环境中要把删除操作发布到生成环境,
在提交节点或发布节点后可以调用GetDeployment获取发布包的详情。
6、 发布节点
public void deploy() throws ClientException{ DeployFileRequest request = new DeployFileRequest(); // request.setProjectId(78837L); request.setProjectIdentifier("zxy_8221431"); request.setFileId(501576542L); request.setComment("备注"); // 和file_id 二选一 nodeId 的值为 ide页面调度配置里基础属性中 节点Id request.setNodeId(700004537241L); DeployFileResponse acsResponse = client.getAcsResponse(request); // 调用GetDeployment接口,获取本次发布的具体情况 Long deploymentId = acsResponse.getData(); log.info(acsResponse.getData().toString()); }
如果项目空间是简单模式,则不区分生产和开发环境 只需要调用提交接口即可
完整发布流程:
1 新建节点 CreateFile
2 提交节点 SubmitFile
3 查询发布包状态 GetDeployment
4 提交成功后 标准模式发布到生产环境 DeployFile
5 查询发布包状态 GetDeployment
7、 获取发布包详情
public void getDeployment() throws ClientException{ GetDeploymentRequest request = new GetDeploymentRequest(); request.setProjectId(78837L); request.setProjectIdentifier("zxy_8221431"); //deploymentId为提交/发布的返回值 request.setDeploymentId(2776067L); GetDeploymentResponse acsResponse = client.getAcsResponse(request); log.info(acsResponse.getData().toString()); }
在提交和发布时 Response会返回deploymentId 此接口可获取发布包的详情。当返回状态为1时则表示发布成功
详细返回参数定义参考 deployment参数定义
8、 删除节点
public void deleteFile() throws ClientException{ DeleteFileRequest request = new DeleteFileRequest(); request.setProjectId(78837L); request.setProjectIdentifier("zxy_8221431"); request.setFileId(501576542L); DeleteFileResponse acsResponse = client.getAcsResponse(request); log.info(acsResponse.toString()); // 标准模式需要把删除发布到线上 DeployFileRequest deployFileRequest = new DeployFileRequest(); request.setProjectId(78837L); deployFileRequest.setProjectIdentifier("zxy_8221431"); deployFileRequest.setFileId(501576542L); deployFileRequest.setComment("备注"); // 和file_id 二选一 nodeId 的值为 ide页面调度配置里基础属性中 节点Id deployFileRequest.setNodeId(700004537241L); DeployFileResponse deployFileResponse = client.getAcsResponse(deployFileRequest); Long deploymentId = deployFileResponse.getData(); log.info(deployFileResponse.getData().toString()); }
在标准模式种删除节点是要记得调用发布接口DeployFileRequest把删除操作发布到线上
9、 删除文件夹
public void deleteFolder() throws ClientException{ //删除之前要先删除此目录下到所有节点 listFile查询节点 List<ListFilesResponse.Data.File> files = listFiles(); for (ListFilesResponse.Data.File file : files) { //删除此文件夹下所有节点 deleteFile(file); } DeleteFolderRequest request = new DeleteFolderRequest(); request.setProjectId(78837L); request.setProjectIdentifier("zxy_8221431"); // 调用listFolders获取folderId request.setFolderId("*****"); DeleteFolderResponse acsResponse = client.getAcsResponse(request); log.info(acsResponse.toString()); } /** * 查询节点 * @return * @throws ClientException */ public List<ListFilesResponse.Data.File> listFiles() throws ClientException{ ListFilesRequest request = new ListFilesRequest(); request.setProjectId(78837L); request.setProjectIdentifier("zxy_8221431"); request.setPageNumber(1); request.setPageSize(10); request.setFileFolderPath("业务流程/test_create_business/通用/test_floder_123"); //关键字匹配 //request.setKeyword(""); //文件所属的功能模块,包括NORMAL(数据开发)、MANUAL(手动任务)、MANUAL_BIZ(手动工作流)、SKIP(数据开发空跑调度)、ADHOCQUERY(临时查询)和COMPONENT(组件管理) request.setUseType("NORMAL"); //节点类型 多个用逗号分开 request.setFileTypes("10,23,99"); ListFilesResponse acsResponse = client.getAcsResponse(request); return acsResponse.getData().getFiles(); } /** * 查询文件夹 * @return * @throws ClientException */ public List<ListFoldersResponse.Data.FoldersItem> listFolders() throws ClientException{ ListFoldersRequest request = new ListFoldersRequest(); request.setProjectId(78837L); request.setProjectIdentifier("zxy_8221431"); request.setPageNumber(1); request.setPageSize(10); //父文件夹的路径 request.setParentFolderPath("业务流程/test_create_business/通用"); ListFoldersResponse acsResponse = client.getAcsResponse(request); return acsResponse.getData().getFolders(); }
删除文件夹是要先删除文件夹下所有节点和文件夹 ListFilesRequest 可以查询知道文件夹下的所有节点,逐个删除后才能删除文件夹 调用接口顺序为:
1 ListFolders 查询到要删除的文件夹id和对应的文件夹的路径,
2 ListFiles 查询此文件夹路径下所有的节点信息
3 DeleteFile删除所有节点 若为标准环境 还要调用deploy接口把删除操作发布到线上
4 DeleteFolder删除文件夹
10、 删除业务流程
public void deleteBusiness() throws ClientException{ //要先删除此业务流程下所有节点 DeleteBusinessRequest request = new DeleteBusinessRequest(); request.setProjectId(78837L); request.setProjectIdentifier("zxy_8221431"); //调用ListBusiness接口,根据名称查询对应业务流程的ID List<ListBusinessResponse.Data.BusinessItem> businessItems = listBusiness(); request.setBusinessId(businessItems.get(0).getBusinessId()); DeleteBusinessResponse acsResponse = client.getAcsResponse(request); log.info(acsResponse.toString()); } public List<ListBusinessResponse.Data.BusinessItem> listBusiness() throws ClientException{ ListBusinessRequest request = new ListBusinessRequest(); request.setProjectId(78837L); request.setProjectIdentifier("zxy_8221431"); request.setPageNumber(1); request.setPageSize(10); request.setKeyword("test_create"); ListBusinessResponse acsResponse = client.getAcsResponse(request); return acsResponse.getData().getBusiness(); }
删除业务流程时也要删除此业务流程下掉所有节点
1 ListFiles 查询业务流程下所有的节点信息
2 DeleteFile删除所有节点 若为标准环境 还要调用deploy接口把删除操作发布到线上
3 DeleteFolder删除文件夹
DataWorks OpenAPI实战系列:
DataWorks OpenAPI实现数据资产分布和排行分析
DataWorks OpenAPI-表结构变更时触发任务变更
DataWorks OpenAPI企业开发实战-运维监控大屏
DataWorks OpenAPI 实战-数据开发全流程介绍
DataWorks OpenAPI现开放7天免费试用,请使用钉钉扫码联系,提供试用账号的UID与Region即可。
提效神器,DataWorks OpenAPI开放7天免费试用!