江苏省建设注册中心网站,平面设计要素,东莞市电池网站建设,磁力搜索器项目最近需要做一些数据统计方面的东西,发现数据字段都是很长一串数字的字符串,Doris自带的函数无法对其进行相应的运算操作,需要扩展实现相关的操作运算。
主要参考官方的文档资料完成相关的自定义扩展。需要注意的是在使用Java代码编写UDAF时,有一些必须实现的函数(标记…项目最近需要做一些数据统计方面的东西,发现数据字段都是很长一串数字的字符串,Doris自带的函数无法对其进行相应的运算操作,需要扩展实现相关的操作运算。
主要参考官方的文档资料完成相关的自定义扩展。需要注意的是在使用Java代码编写UDAF时,有一些必须实现的函数(标记required)和一个内部类State。
SUM求和运算函数public class Sum {//Need an inner class to store data/*required*/public static class State {/*some variables if you need */public BigDecimal sum;}/*required*/public State create() {/* here could do some init work if needed */State state = new State();state.sum = new BigDecimal(0);return state;}/*required*/public void destroy(State state) {/* here could do some destroy work if needed */}/*Not Required*/public void reset(State state) {/*if you want this udaf function can work with window function.*//*Must impl this, it will be reset to init state after calculate every window frame*//**state.sum = new BigDecimal(0);**/}/*required*///first argument is State, then other types your inputpublic void add(State state, String value) throws Exception {try {/* here doing update work when input data*/if (null != value !"".equals(value)) {state.sum = state.sum.add(new BigDecimal(value));}} catch (Exception e) {log.info(e.getMessage());}}/*required*/public void serialize(State state, DataOutputStream out) {/* serialize some data into buffer */try {out.writeUTF(state.sum.toString());} catch (Exception e) {/* Do not throw exceptions */log.info(e.getMessage());}}/*required*/public void deserialize(State state, DataInputStream in) {/* deserialize get data from buffer before you put */String value = "0";try {value = in.readUTF();} catch (Exception e) {/* Do not throw exceptions */log.info(e.getMessage());}state.sum = new BigDecimal(value);}/*required*/