程序员

DataWorks OpenAPI-数据开发API调用示例

作者:admin 2021-04-14 我要评论

String product dataworks-public ; IClientProfile profile DefaultProfile.getProfile(region, akId, akSecret); DefaultProfile.addEndpoint(region, product...

在说正事之前,我要推荐一个福利:你还在原价购买阿里云、腾讯云、华为云服务器吗?那太亏啦!来这里,新购、升级、续费都打折,能够为您省60%的钱呢!2核4G企业级云服务器低至69元/年,点击进去看看吧>>>)
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 ;

image

下图路径为 业务流程/test_create_business/通用/test_floder_123

image.png

在查询的是后返回的路径可能和页面上字面值不一样 对应关系如下(调用接口路径还是按页面看到的填写)

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 实战-数据开发全流程介绍

DataWorks OpenAPI 示例 元数据模块


DataWorks OpenAPI现开放7天免费试用 请使用钉钉扫码联系 提供试用账号的UID与Region即可。

提效神器 DataWorks OpenAPI开放7天免费试用

moyu二维码.png



本文转自网络,原文链接:https://developer.aliyun.com/article/783555

版权声明:本文转载自网络,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。本站转载出于传播更多优秀技术知识之目的,如有侵权请联系QQ/微信:153890879删除

相关文章
  • 四两拨千斤——你不知道的VScode编码Ty

    四两拨千斤——你不知道的VScode编码Ty

  • 我是如何在 Vue 项目中做代码分割的

    我是如何在 Vue 项目中做代码分割的

  • position:sticky 粘性定位的几种巧妙应

    position:sticky 粘性定位的几种巧妙应

  • 从零到一搭建React组件库

    从零到一搭建React组件库

腾讯云代理商
海外云服务器