本篇文章將詳細介紹DataWorks OpenAPI從初始化用戶端、建立商務程序以及節點發布上線,再到刪除節點和商務程序,協助您快速上手使用DataWorks OpenAPI。
背景資訊
DataWorks OpenAPI進行資料開發時,整體流程如下圖所示。
操作步驟
初始化用戶端。
public class IdePopApiTest { // 帳號資訊 @Value("${aliyun.akId}") private String akId; @Value("${aliyun.akSecret}") private String akSecret ; // 例:cn-shanghai @Value("${aliyun.region}") private String region; // 例:dataworks.cn-shanghai.aliyuncs.com @Value("${aliyun.endpoint}") private String endpoint; private IAcsClient client; @Before 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); } }
建立商務程序。
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可以查看查詢商務程序的詳情。
建立檔案夾。
public void createFloder() throws ClientException { CreateFolderRequest request = new CreateFolderRequest(); request.setProjectId(78837L); // 路徑:“商務程序/” + 目標商務程序名 + 目錄名 + 最新檔案夾名 request.setFolderPath("商務程序/test_create_business/通用/test_floder_123"); CreateFolderResponse acsResponse = client.getAcsResponse(request); log.info(acsResponse.toString()); }
說明UpdateFolder可以修改檔案夾的名稱,DeleteFolder刪除資料開發頁面的檔案夾(要確保此檔案夾下的節點已經全部刪除)。
建立、提交、發布節點。
建立節點。
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的離線同步節點,應該在Data Integration目錄下。 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的離線同步節點,應該在Data Integration目錄下。
您可以通過ListFile查詢對應檔案,GetFile擷取檔案的詳情。
在調用UpdateFile更新已有的檔案節點時,填寫的參數必須和該節點原本的檔案配置不同。例如源節點的某參數值為A,則需要變更為B後再提交。如果仍填寫A,會報invalid異常。
提交節點。
public void submitFile() throws ClientException{ SubmitFileRequest request = new SubmitFileRequest(); request.setProjectId(78837L); request.setProjectIdentifier("zxy_8221431"); // 此節點id為建立節點時返回的id,對應資料庫file表的file_id,不是資料開發頁面上調度配置裡的節點Id。 request.setFileId(501576542L); request.setComment("備忘"); SubmitFileResponse acsResponse = client.getAcsResponse(request); // 調用GetDeployment介面擷取本次發布的具體情況。 Long deploymentId = acsResponse.getData(); log.info(acsResponse.toString()); }
說明若專案空間是標準模式,則還需要發布節點到生產環境。在刪除節點時標準環境中要把刪除操作發布到產生環境,在提交節點或發布節點後可以調用GetDeployment擷取發布包的詳情。
發布節點。
public void deploy() throws ClientException{ DeployFileRequest request = new DeployFileRequest(); // request.setProjectId(78837L); request.setProjectIdentifier("zxy_8221431"); request.setFileId(501576542L); request.setComment("備忘"); // 和file_id二選一。NodeId的值為資料開發頁面調度配置裡基礎屬性中的節點Id。 request.setNodeId(700004537241L); DeployFileResponse acsResponse = client.getAcsResponse(request); // 調用GetDeployment介面,擷取本次發布的具體情況。 Long deploymentId = acsResponse.getData(); log.info(acsResponse.getData().toString()); }
說明如果專案空間是簡單模式,則不區分生產和開發環境,只需要調用提交介面即可。
擷取發布包詳情。
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時則表示發布成功,詳細返回參數定義參考GetDeployment。
刪除節點。
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 的值為資料開發頁面調度配置裡基礎屬性中節點Id。 deployFileRequest.setNodeId(700004537241L); DeployFileResponse deployFileResponse = client.getAcsResponse(deployFileRequest); Long deploymentId = deployFileResponse.getData(); log.info(deployFileResponse.getData().toString()); }
說明在標準模式中刪除節點是需調用發布介面DeployFileRequest,將刪除操作發布到線上。
刪除檔案夾。
刪除檔案夾是要先刪除檔案夾下所有節點和檔案夾。ListFilesRequest可以查詢檔案夾下的所有節點,逐個刪除後才能刪除檔案夾。調用介面順序為如下。
ListFolders查詢要刪除的檔案夾ID和對應的檔案夾的路徑。
ListFiles查詢此檔案夾路徑下所有的節點資訊。
DeleteFile刪除所有節點。若為標準環境,還要調用deploy介面將刪除操作發布到線上。
DeleteFolder刪除檔案夾。
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(); }
刪除商務程序。
刪除商務程序時也要刪除此商務程序下掉所有節點。調用介面順序為如下。
ListFiles 查詢商務程序下所有的節點資訊。
DeleteFile刪除所有節點。若為標準環境,還要調用deploy介面將刪除操作發布到線上。
DeleteFolder刪除檔案夾。
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(); }