后置UDF数据处理功能
更新时间: 2024-12-04 15:45:14
该功能支持客户对API的返回数据格式进行一定程度的自定义处理,原理是客户编写一个java UDF处理函数,数据服务在请求返回数据前,调用用户UDF函数处理数据后再返回。
对于API创建者,在创建API的第二步,向导或者脚本模式下,平台均支持通过上传UDF Jar包的方式,对返回参数进行二次处理,操作步骤如下:
下载数据服务提供的的模板jar,并安装进本地maven仓库中,并在自定义UDF工程里引入该依赖。
<dependency> <groupId>com.netease.hz.bdms</groupId> <artifactId>eds-udf</artifactId> <scope>provided</scope> <version>x.y.z</version> </dependency>
其中scope为provided,不用打包到jar中可以减小用户UDF jar体积。
实现模板jar定义的ProcessingApi接口中的process方法,该方法的实现就是处理返回数据的逻辑。process方法定义:
List<Map<String, Object>> process(HashMap<String, Object> parameter, List<Map<String, Object>> data);
其中parameter是包含普通入参和函数入参在内的所有入参,data是返回的Result里数据部分的结果,可以进行处理后返回同样的List<Map<String, Object>>
结构。例如:
package com.demo.czh;
import com.netease.hz.bdms.eds.udf.processing.ProcessingApi;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* 实现ProcessingApi接口定义的process方法
*/
public class TestDemo implements ProcessingApi {
/**
* 返回数据后置处理
*
* @param parameter 用户传入的参数集合
* @param data 数据服务查出的原始数据
* @return 返回一个List,表示多行数据,每行中是一个map结构
*/
public List<Map<String, Object>> process(HashMap<String, Object> parameter,
List<Map<String, Object>> data) {
// 这里的逻辑是将原始data数据直接抛弃,然后自定义一行新数据,作为结果返回
List<Map<String, Object>> result = new ArrayList<>();
Map<String, Object> map1 = new HashMap<>();
map1.put("k1", "v1");
map1.put("k2", "v2");
result.add(map1);
return result;
// 用户实际的场景,可能更复杂,需要按照自己的业务逻辑,基于parameter和data再计算出自定义数据返回
}
}