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實現邏輯
UDF實現邏輯
UDTF實現邏輯
UDAF實現邏輯
實現UDF需要繼承com.aliyun.odps.udf.Aggregator類
需要實現setup,newBuffer,iterate,terminate,merge,close等接口
用戶實現自定義的writable buffer
UDAF實現平均值
UDF開發流程
JavaUDF的開發流程
配置Java+eclipse的環境
新建項目
新增UDF類
添加邏輯處理
準備本地測試數據
編譯調試
導出Jar包
發佈