UDF簡介
UDF(user defined scalar function)
使用者自定義标量函數用于對傳遞給它的一個或者多個參數值進行處理和計算并傳回一個單一的值。
函數輸入和輸出是一對一的
傳回一個确定類型的标量值
可以在where過濾條件中
select myudf_low(name) FROM t_test;
select * from t_test where myudf_lower(name)='odps';
select * from t_test where myudf_lower(myudf_lower(name))='odps';
UDTF(user defined table valued function)
使用者自定義表值函數:解決一次函數調用輸出多行多列資料場景;唯一能傳回多個字段的使用者自定義函數;不支援在同一個select字句中與group by,distribute by/sort by聯用。
函數輸入和輸出是一對多的
同一個select字句不允許有其他表達式
不能嵌套使用
select myudf_vertical(name,score) as (name,score) from t_udtf;
UDAF(user defined aggregation function)
使用者自定義聚合函數:将多條輸入記錄聚合成一條輸出值後輸出。
輸入與輸出是多對一關系
可以與SQL中的group by語句聯用
select AggrAvg(score) from t_udaf;
select name,AggrAvg(score) from t_udtf group by name;
Java UDF支援的資料類型
UDF實作邏輯
UDTF實作邏輯
UDAF實作邏輯
實作UDF需要繼承com.aliyun.odps.udf.Aggregator類
需要實作setup,newBuffer,iterate,terminate,merge,close等接口
使用者實作自定義的writable buffer
UDAF實作平均值
UDF開發流程
JavaUDF的開發流程
配置Java+eclipse的環境
建立項目
新增UDF類
添加邏輯處理
準備本地測試資料
編譯調試
導出Jar包
釋出