天天看點

使用者定義函數UDFUDF(user defined scalar function)UDTF(user defined table valued function)UDAF(user defined aggregation function)Java UDF支援的資料類型UDF實作邏輯UDTF實作邏輯UDAF實作邏輯UDAF實作平均值JavaUDF的開發流程

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包

釋出