1. 程式人生 > >Hive UDF進階

Hive UDF進階

Java的類中可以定義靜態程式碼塊, 每次我們使用hive的create [temporary] function語句時,會呼叫UDF中的靜態程式碼塊.

靜態程式碼塊是類載入時用到呼叫的.

UDF並不是每有一行記錄就會例項化一次, 而是複用的. Hive會在HiveQL語句執行之初就例項化若干個UDF的例項.

由於Hive的join語句對條件限制比較嚴格, 不能隨意使用大於或小於作join的條件.所以UDF有時可以用來代替join.

例如有兩張表A表大, B表小, 都一列時間. 現在要在兩張表的時間列上join, join的條件不是兩列時間相等, 而是兩列時間最接近.

這時候就可以使用UDF來代替join

建構函式:

把B表(因為它是小表), 相關列讀入記憶體

(注意Hive的compilation lock, 在UDF中執行HiveQL, 要開啟hive.driver.parallel.compilation=true)

evaluate函式:

遍歷A表, 返回對應最接近日期.