Export Flow¶
Export the workflow configuration.
Prerequisites¶
The user must belong to the OU which the target workflow belongs to.
Request Format¶
GET https://{apigw-address}/dataflow-batch-service/v2.0/flows?action=export&flowId={}&userId={}&orgId={}
Request Parameters (URI)¶
Name | Location (Path/Query) | Required or Not | Data Type | Description |
---|---|---|---|---|
flowId | Query | true | Integer | Workflow ID |
userId | Query | true | String | User ID. How to get userId>> |
orgId | Query | true | String | Organization ID which the user belongs to. How to get orgId>> |
Response Parameters¶
Name | Data Type | Description |
---|---|---|
data | Flow Struct | Detailed information of the workflow. See Flow Struct |
Flow Struct¶
Sample¶
{
"name": "workflow1",
"cycle": "D",
"cron": "0 0 0 * * ? *",
"parameters": "[]",
"alert_mode": 3,
"alert_to": "",
"app_id": "",
"submitter": "data_oxxxxxx",
"owners": "xxxx",
"visitors": "xxxx;",
"type": 1,
"sync_type": 1,
"desc": "",
"start_time": "2019-07-25",
"tasks": [
{
"name": "tass",
"resource": "default",
"type": "COMMAND",
"sync_type": 1,
"cmd": "echo "hello"",
"submitter": "",
"filePackage": "",
"cron": "",
"priorityLevel": 0,
"timeout": 300,
"retryLimit": 3,
"retryInterval": 0,
"successCode": "0",
"waitCode": "",
"asLink": false
}
],
"flow_links": [],
"task_links": [],
"relations": [],
"link_relations": []
}
Parameters¶
Name | Data Type | Description |
---|---|---|
name | String | Name of the workflow |
cycle | String | Scheduling cycle (M: Month; W: Week; D: Day; H: Hour; mi: Minute) |
cron | String | If CronTab syntax is used when specifying the time to start the workflow in a scheduling cycle, a 7-character CronTab expression is used. For more information about CronTab, see http://cron.qqe2.com/ |
parameters | List<Map<key,value>> | Global parameters that are configured for the workflow to dynamically adapt to the environment changes (in the format of key=value). |
alert_mode | Integer | Alert mode (0: Not enabled; 1: Email; 2: SMS; 3: Email and SMS) |
alert_to | String | Receiver of alerts |
app_id | String | Null string |
submitter | String | User who submitted the workflow |
owners | String | Owner of the workflow |
visitors | String | Users who can access the workflow (separated by semicolon) |
type | Integer | Scheduling type of the workflow (0: Manual; 1: Periodic; 2: Temporary) |
sync_type | Integer | Sync type of the workflow (0: File synchronization; 1: Data synchronization) |
desc | String | Description of the workflow |
start_time | String | Effective date of the workflow |
tasks | List<Task> | Collection of task nodes in the workflow, with each element representing a task in the workflow. See Task Struct |
flow_links | List<FlowLink> | Collection of workflow references, with each element representing a source workflow that the current workflow depends on (Using the link_id field in the FlowLink Struct, you can find the related link relation in the link_relations collection. The link relation represents the relationship between a specific task in the current workflow with the source workflow). |
task_links | List<TaskLink> | Collection of task references, with each element representing a task in a source workflow that a task in the current workflow depends on (Using the link_id field in the TaskLink Struct, you can find the related link relation in the link_relations collection. The link relation represents the relationship between a specific task in the current workflow with the source workflow). |
relations | List<Relation> | Collection of relations, with each element representing the upstream and downstream dependency between tasks. See Relation Struct |
link_relations | List<LinkRelation> | Collection of link relations. See LinkRelation Struct |
Task Struct¶
Sample¶
{
"name": "tass",
"resource": "default",
"type": "COMMAND",
"sync_type": 1,
"cmd": "echo "hello"",
"submitter": "",
"filePackage": "",
"cron": "",
"priorityLevel": 0,
"timeout": 300,
"retryLimit": 3,
"retryInterval": 0,
"successCode": "0",
"waitCode": "",
"asLink": false
}
Parameters¶
Name | Data Type | Description |
---|---|---|
name | String | Name of the task |
resource | String | Task resource |
type | Integer | Task type (0: Data Integration; 1: WORMHOLE; 2: CALCULATE; 3: SHELL: 4: CANAAN; 5: HIVE; 6: MR) |
sync_type | Integer | Sync type of the task (0: File synchronization; 1: Data synchronization) |
cmd | String | Command line |
submitter | String | User who submitted the task |
filePackage | String | File location |
cron | String | Time for task scheduling |
priorityLevel | Integer | Priority level of the task |
timeout | Integer | Timeout value |
retryLimit | Integer | Retry times |
retryInterval | Integer | Interval for retry |
successCode | String | Returned code for success |
waitCode | String | Null string |
asLink | Boolean | Whether the task has dependency relation with other tasks |
FlowLink Struct¶
Sample¶
{
"link_id": "0",
"source_flow_name": "jin"
}
Parameters¶
Name | Data Type | Description |
---|---|---|
link_id | String | Link ID |
source_flow_name | String | Name of the upstream workflow |
TaskLink Struct¶
Sample¶
{
"link_id": "0",
"source_flow_name": "dw",
"source_task_name": "tass"
}
Parameters¶
Name | Data Type | Description |
---|---|---|
link_id | String | Link ID |
source_flow_name | String | Name of the upstream workflow |
source_task_name | String | Name of the upstream task (with source_flow_name, the exact upstream task can be found) |
Relation Struct¶
Sample¶
{
"source_task_name": "tass",
"target_task_name": "rf",
"rerun": true
}
Parameters¶
Name | Data Type | Description |
---|---|---|
source_task_name | String | Name of the upstream task |
target_task_name | String | Name of the downstream task |
rerun | Boolean | Whether the downstream task will be started when rerunning (effective only for task-level rerunning) |
Error Code¶
Code | Message | Description |
---|---|---|
62102 | Flow validation exception | Format of the request body is invalid |
62109 | Server internal exception | Server internal exception |
Sample¶
Request Sample¶
url: https://{apigw-address}/dataflow-batch-service/v2.0/flows?action=export&flowId={}&userId={}&orgId={}
method: GET
Return Sample¶
{
"status": 0,
"msg": "Success",
"data": {
"name": "nFlow",
"cycle": "D",
"cron": "0 0 0 * * ? *",
"parameters": "[]",
"alert_mode": 3,
"alert_to": "",
"app_id": "",
"submitter": "xxxx",
"owners": "xxxx",
"visitors": ";xxxx;",
"type": 1,
"sync_type": 1,
"desc": "ga",
"start_time": "2019-07-24",
"tasks": [
{
"name": "tass",
"resource": "default",
"type": "COMMAND",
"sync_type": 1,
"cmd": "echo "hello"",
"submitter": "",
"filePackage": "",
"cron": "",
"priorityLevel": 0,
"timeout": 300,
"retryLimit": 3,
"retryInterval": 0,
"successCode": "0",
"waitCode": "",
"asLink": false
}
],
"flow_links": [],
"task_links": [],
"relations": [],
"link_relations": []
}
}
Java SDK Sample¶
import com.alibaba.fastjson.JSONObject;
import com.envision.apim.poseidon.config.PConfig;
import com.envision.apim.poseidon.core.Poseidon;
public class Request extends PoseidonRequest {
public void setQueryParam(String key, Object value){
QueryParams().put(key, value);
}
public void setHeaderParam(String key, String value){
headerParams().put(key, value);
}
public void setBodyParam(Map<String, Object> bodyPara){
bodyParams().putAll(bodyPara);
}
public void setMethod(String method) {
this.method = method;
}
private String method;
public String baseUri() {
return "";
}
public String method() {
return method;
}
}
public void exportFlowTest(){
//1. Select Application Registration from the left navigation bar of EnOS Console.
//2. Open the App Detail page to get the AccessKey and SecretKey of the application.
String accessKey = "******************";
String secretKey = "******************";
//Create a request and save the required parameters in the map of the Query.
Request request = new Request();
request.setQueryParam("flowId","2924");
request.setQueryParam("userId","your_userId");
request.setQueryParam("orgId","your_orgId");
request.setMethod("GET");
try {
JSONObject response = Poseidon.config(PConfig.init().appKey(accessKey).appSecret(secretKey).debug())
.url("https://{apigw-address}/dataflow-batch-service/v2.0/flows?action=export")
.getResponse(request, JSONObject.class);
System.out.println(response);
} catch (Exception e) {
e.printStackTrace();
}
}