UDF和UDAF,UDTF的區別

2021-09-25 07:35:20 字數 711 閱讀 5855

udf(user-defined functions)使用者自定義函式,簡單說就是輸入一行輸出一行的自定義運算元。

是大多數 sql 環境的關鍵特性,用於擴充套件系統的內建功能。(一對一)

udaf(user defined aggregate function),即使用者定義的聚合函式,聚合函式和普通函式的區別是什麼呢,普通函式是接受一行輸入產生乙個輸出,聚合函式是接受一組(一般是多行)輸入然後產生乙個輸出,即將一組的值想辦法聚合一下。(多對一)

udaf可以跟group by一起使用,也可以不跟group by一起使用,這個其實比較好理解,聯想到mysql中的max、min等函式,可以:

select max(foo) from foobar group by bar;

表示根據bar欄位分組,然後求每個分組的最大值,這時候的分組有很多個,使用這個函式對每個分組進行處理,也可以:

select max(foo) from foobar;

這種情況可以將整張表看做是乙個分組,然後在這個分組(實際上就是一整張表)中求最大值。所以聚合函式實際上是對分組做處理,而不關心分組中記錄的具體數量。

udtf(user-defined table-generating functions),使用者自定義生成函式。它就是輸入一行輸出多行的自定義運算元,可輸出多行多列,又被稱為 「表生成函式」。(一對多)

寫UDF和UDAF的格式

1 udf 函式可以直接應用於 select 語句,對查詢結構做格式化處理後,再輸出內容。2 編寫 udf 函式的時候需要注意一下幾點 a 自定義 udf 需要繼承 org.apache.hadoop.hive.ql.udf。b 需要實現 evaluate 函式,evaluate 函式支援過載。3 ...

UDF 在udf當中新增幾個有意思的巨集

很多人的 udf都不是自己寫的,直接從網上覆制貼上的,編譯的時候經常報錯。我編寫了下面這段示例 我們使用小軟體編譯 結果報如下錯誤 我們在 中新增如下的巨集 define define define define 修改以後的 再次用小軟體編譯 編譯成功!加上上面的巨集以後,可大幅度減少由於編碼過程當...

Hive中UDF的使用

udf user defined function 是對hive自帶函式的一種補充,並極大擴充了hql的作用範圍,不僅使 更加簡潔,也減少了很多重複工作,提高任務執行效率。udf.rank 該函式用於分組limit輸出,如 拉取每個使用者的前100條語料 需要對使用者cuid進行分組後,再分別取每組...