Create Download Request

创建文件下载任务。

前提条件

已启动数据读取通道,用于创建文件下载任务,且数据读取通道未启用跨源分析功能。详细信息,参见 下载文件

请求格式

POST https://{apigw-address}/data-federation/v2.0/channels/read/{channelId}/download-request

请求参数(URI)

名称 位置(Path/Query) 必需/可选 数据类型 描述
orgId Query 必需 String 用户所属的组织ID。如何获取orgId信息>>
channelId Path 必需 String 通道ID。

请求参数(Body)

名称 必需/可选 数据类型 描述
taskName 必需 String 指定文件下载任务名称。
sourceName 必需 String 指定读通道绑定的数据源别名(目前支持HIVE(EnOS)数据源)。
querySql 必需 String 指定下载文件的SQL语句。
filePackageName 必需 String 指定下载文件的名称。
files 非必需 JSONObject 下载文件配置信息,详见 文件配置结构体
callbackURL 可选 String 通过 URL 回调下载结果,接口请求方法为 POST。返回参数详见 下载任务回调函数请求结构体
selfDefineQueuePara 可选 String 设置Hive下载任务参数,分隔符为 ;

文件配置结构体

名称 必需/可选 数据类型 描述
split 必需 Boolean 指定是否启用分区下载文件(true:分区;false:不分区)。
encoding 必需 String 指定文件编码方式(可选 utf-8 或 gbk)。
delimiter String Boolean 指定字段分隔符(可选 \t,、或 ;)。
fileHeader 必需 List<String> 指定文件表头,分隔符为 ,
fileRename 可选 List<JSONObject> 启用分区下载文件时,指定分区文件的名称,详见 分区文件名结构体

下载任务回调函数请求结构体

名称 数据类型 描述
id String 下载任务ID。
returnCode String 0:下载成功,返回 URL 为下载数据的链接;非 0:下载失败,返回的 URL 为对应下载失败的链接。
download_url String 如果成功,则返回文件下载路径。
log_url String 如果失败,则返回错误日志路径。
dataSize String 数据文件大小。

分区文件名结构体

名称 必需/可选 数据类型 描述
file1 必需 String 指定分区文件的名称。
file2 必需 String 指定分区文件的名称。
file3 必需 String 指定分区文件的名称。

响应参数

名称 数据类型 描述
data List<JSONObject> 返回文件下载任务信息,详见 下载任务信息结构体

下载任务信息结构体

名称 数据类型 描述
taskId String 创建的文件下载任务ID。

示例

请求示例

url: https://{apigw-address}/data-federation/v2.0/channels/read/{channelId}/download-request?orgId={}

method: POST

request body

{
  "taskName": "test_federation_download_openapi",
  "sourceName": "hive_enos"
  "querySql": "select * from students",
  "filePackageName": "studentsOpenAPI",
  "callbackURL":"http://localhost:8080",
  "selfDefineQueuePara":"set mapreduce.map.memory.mb=1024;set mapreduce.reduce.memory.mb=2048",
  "files": {
    "split": true,
    "encoding": "utf-8",
    "delimiter": ",",
    "fileHeader": [
      "c1",
      "c2",
      "c3",
      "c4",
      "c5",
      "c6"
    ],
    "fileRename": {
      "1": "group1",
      "2": "group2",
      "3": "group3",
      "4": "group4"
    }
  }
}

返回示例

{
  "msg": "OK",
  "code": 0,
  "data": {
    "taskId": "3049d82e949e47958246ff0136a77fba"
  }
}

Java SDK调用示例

import com.alibaba.fastjson.JSONObject;
import com.envision.apim.poseidon.config.PConfig;
import com.envision.apim.poseidon.core.Poseidon;
import com.envision.apim.poseidon.request.PoseidonRequest;
import com.google.common.net.HttpHeaders;
import org.apache.commons.codec.binary.Hex;
import org.junit.Test;

import java.nio.charset.StandardCharsets;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.HashMap;

public class Sample {

    private static String accessKey = "AccessKey of your APP";
    private static String secretKey = "SecretKey of your APP";
    private static String orgId = "yourOrgId";
    private static String chId = "yourChannelId";
    private static String url = "https://{domain_url}";

    private static class Request extends PoseidonRequest {

        public void setQueryParam(String key, Object value) {
            queryEncodeParams().put(key, value);
        }

        public void setMethod(String method) {
            this.method = method;
        }

        public void setBodyParams(String key, Object value) {
            bodyParams().put(key, value);
        }

        private String method;

        @Override
        public String baseUri() {
            return "";
        }

        @Override
        public String method() {
            return method;
        }
    }

    @Test
    public void downloadRequest() {
        Request request = new Request();
        request.setQueryParam("orgId", orgId);
        request.setMethod("POST");
        request.setBodyParams("taskName", "yourTaskName");
        request.setBodyParams("sourceName", "hive_enos");
        request.setBodyParams("querySql", "select * from students");
        request.setBodyParams("filePackageName", "studentsOpenAPI");
        request.setBodyParams("callbackURL", "http://localhost:8080");
        request.setBodyParams("selfDefineQueuePara", "set mapreduce.map.memory.mb=1024;set mapreduce.reduce.memory.mb=2048");
        Map<String, Object> files = new HashMap<>();
        files.put("split", true);
        files.put("encoding", "utf-8");
        files.put("delimiter", ",");
        List<String> fileHeaders = new ArrayList<>();
        fileHeaders.add("c1");
        fileHeaders.add("c2");
        files.put("fileHeader", fileHeaders);
        Map<String, String> fileRename = new HashMap<>();
        fileRename.put("1", "group1");
        fileRename.put("2", "group2");
        files.put("fileRename", fileRename);
        request.setBodyParams("files", files);
        try {
            JSONObject response = Poseidon.config(PConfig.init().appKey(accessKey).appSecret(secretKey))
                    .url(url + "/data-federation/v2.0/channels/read/" + chId + "/download-request")
                    .getResponse(request, JSONObject.class);
            System.out.println(response);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}