功能说明

适用模块

数据传输,api

具体说明

数据传输调用中台数据服务api(包含前置操作,udf)到hive
目前以apiget方式为案例,post方式可以参考get方式
用于一些api参数需要处理的操作

使用示例

1.新建数据服务apiget模式)
数据服务相关参数(具体见数据服务手册)
url
version
timestamp
appKey
AppSecret

INFO_数据传输调用中台数据服务api(包含前置操作,udf)到hive - 图1

数据服务json数据为(获取data.data数据的array即可)
{
    "code":0,
    "data":{
        "data":[
            {
                "cluster":"easyops-cluster",
                "product":"mammut_service",
                "project_id":15,
                "flow_id":"easycost-dim-easyops",
                "job_id":"dim_accountuser",
                "id":1
            },
            {
                "cluster":"easyops-cluster",
                "product":"mammut_service",
                "project_id":15,
                "flow_id":"easycost-dim-easyops",
                "job_id":"dim_user",
                "id":2
            }
        ],
        "page_num":1,
        "page_size":2,
        "result_num":2,
        "sql":"select `project_id`,`flow_id`,`job_id`,`product`,`cluster`,`id` from  easytaskops.eto_az_job where `product` = 'mammut_service'  limit 2 offset 0 ",
        "total_num":307
    },
    "message":"success"
}
2.创建数据源
这里不需要点测试数据源,因为数据服务api是无法测试通的(需要认证)
直接写地址即可

INFO_数据传输调用中台数据服务api(包含前置操作,udf)到hive - 图2

3.创建数据传输api任务(get模式)
如图输入get 地址,headers属性值,Params的参数,并开启前置操

INFO_数据传输调用中台数据服务api(包含前置操作,udf)到hive - 图3

这里product = mammut_service是数据服务api的入参,也可以直接写到udf里面

INFO_数据传输调用中台数据服务api(包含前置操作,udf)到hive - 图4

4.开启前置操,并开发udf

INFO_数据传输调用中台数据服务api(包含前置操作,udf)到hive - 图5

udf类和md5的计算逻辑(代码仅供参考),相当于集成了Map的接口,并重写实现。
这里说明:
Map<String, String> header = stringStringMap.get("header");
会获取你在数据传输界面输入的headers
Map<String, String> paramsMap = stringStringMap.get("params");
会获取你在数据传输界面输入的Params
把自己想要的数据插入到map的集合里面即可,数据传输会拿到这个map接口数据。

udf
package neteast;

import java.util.Date;
import java.util.Map;
import java.util.function.Function;

public class UDF implements
        Function<Map<String, Map<String, String>>, Map<String, Map<String, String>>> {
    @Override
    public Map<String, Map<String, String>> apply(Map<String, Map<String, String>> stringStringMap) {
        // 请求api的header
        Map<String, String> header = stringStringMap.get("header");
        // 请求参数(get请求会有)
        Map<String, String> paramsMap = stringStringMap.get("params");

        // 计算AppSecret的md5值
        String timestamp =  new Date().getTime()+"";
        String signature=MD5MsgDigest.digest(header.get("AppSecret")+timestamp);
        // 重点这里,就是放http header的参数。这里的header对象就是http的header整个对象。也可以放params
        header.put("signature", signature);
        header.put("timestamp", timestamp);

        return stringStringMap;
    }

}
这块是重点,
就是放http header的参数。这里的header对象就是httpheader整个对象。也可以放params。页面不需要传其他参数,完全这里处理逻辑放进参数。
header.put("signature", signature);
header.put("timestamp", timestamp);
return stringStringMap;
md5:
package neteast;

import java.nio.charset.Charset;
import java.security.MessageDigest;

public class MD5MsgDigest {
    public static String digest(String rawString) {
        return digest(rawString, "utf-8");
    }
    public static String digest(String rawString, String charset) {
        Charset cs = Charset.forName(charset);
        try {
            return compute(rawString, cs);
        } catch (Exception e) {
            return "";
        }

    }
    private static String compute(String inStr, Charset charset)
            throws Exception {
        MessageDigest md5 = MessageDigest.getInstance("MD5");
        byte[] md5Bytes = md5.digest(inStr.getBytes(charset));
        return toHexString(md5Bytes);
    }
    public static String toHexString(byte[] bytes) {
        StringBuffer hexValue = new StringBuffer();
        for (int i = 0; i < bytes.length; i++) {
            int val = ((int) bytes[i]) & 0xff;
            if (val < 16) {
                hexValue.append("0");
            }
            hexValue.append(Integer.toHexString(val));
        }
        return hexValue.toString();
    }

}

INFO_数据传输调用中台数据服务api(包含前置操作,udf)到hive - 图6 INFO_数据传输调用中台数据服务api(包含前置操作,udf)到hive - 图7

5.jar包上传udf_studio,数据传输并配置该udf,即可引用到函数名称udfstudio_api

INFO_数据传输调用中台数据服务api(包含前置操作,udf)到hive - 图8 INFO_数据传输调用中台数据服务api(包含前置操作,udf)到hive - 图9 INFO_数据传输调用中台数据服务api(包含前置操作,udf)到hive - 图10

6.在数据服务页面测试获取的数据
根据数据服务的json格式需要获取data.data下的array数据,
1)主体数据:$data.data
2)勾上数组数据
3)关闭分页(这里暂不提供分页案例)
4)点数据预览(数据主题根据jsonpath规则,?中有案例)
解析到的数据如下:

INFO_数据传输调用中台数据服务api(包含前置操作,udf)到hive - 图11 INFO_数据传输调用中台数据服务api(包含前置操作,udf)到hive - 图12

7.创建hive表,并设置目标端数据源,运行即可hive数据

INFO_数据传输调用中台数据服务api(包含前置操作,udf)到hive - 图13 INFO_数据传输调用中台数据服务api(包含前置操作,udf)到hive - 图14 INFO_数据传输调用中台数据服务api(包含前置操作,udf)到hive - 图15 INFO_数据传输调用中台数据服务api(包含前置操作,udf)到hive - 图16 INFO_数据传输调用中台数据服务api(包含前置操作,udf)到hive - 图17


作者:qianzhaoyuan