用戶定義函數UDF

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包
發佈

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章