INFO_数据传输调用中台数据服务api(包含前置操作,udf)到hive
更新时间: 2024-03-11 02:46:33
阅读 1036
功能说明
适用模块
数据传输,api
具体说明
数据传输调用中台数据服务api(包含前置操作,udf)到hive
目前以apiget方式为案例,post方式可以参考get方式
用于一些api参数需要处理的操作
使用示例
1.新建数据服务api(get模式)
数据服务相关参数(具体见数据服务手册)
url
version
timestamp
appKey
AppSecret
数据服务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是无法测试通的(需要认证)
直接写地址即可
3.创建数据传输api任务(get模式)
如图输入get 地址,headers属性值,Params的参数,并开启前置操
这里product = mammut_service是数据服务api的入参,也可以直接写到udf里面
4.开启前置操,并开发udf
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对象就是http的header整个对象。也可以放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();
}
}
5.把jar包上传udf_studio,数据传输并配置该udf,即可引用到函数名称udfstudio_api
6.在数据服务页面测试获取的数据
根据数据服务的json格式需要获取data.data下的array数据,
(1)主体数据:$data.data
(2)勾上数组数据
(3)关闭分页(这里暂不提供分页案例)
(4)点数据预览(数据主题根据jsonpath规则,?中有案例)
解析到的数据如下:
7.创建hive表,并设置目标端数据源,运行即可hive数据
作者:qianzhaoyuan
文档反馈
以上内容对您是否有帮助?