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();
        }
    }
}