hive 提供了經過腳本定製 mapper 和 reducer 的功能,這一功能須要用到 transform 函數。python
默認狀況下, transform 函數中帶入的參數會被用 '\t 分隔開,而且以字符串對方式傳入到用戶腳本中。輸入中 NULL 值會被轉換成字符串 '\N'。腳本的輸出使用的分隔符也是 '\t',同時 '\N' 會再次被轉化爲 NULL。須要注意的是,當 transform 當參數中含有 '\t' 的時候,用戶須要手動處理這些 '\t' 以避免腳本里面出錯。這裏是一個使用樣例:shell
FROM ( FROM pv_users TRANSFORM(pv_users.userid, pv_users.date) USING 'map_script' AS dt, uid CLUSTER BY dt) map_output INSERT OVERWRITE TABLE pv_users_reduced TRANSFORM(map_output.dt, map_output.uid) USING 'reduce_script' AS date, count;
'map_script' 的輸出,使用 '\t' 分割開之後,對應到 dt 和 uid 兩個字段。默認狀況下,若是不指定類型,默認認爲是 string 類型的。app
這樣一來,就經過腳本(shell、python等)實現了UDF的功能。函數