hive 提供了通過腳本定制 mapper 和 reducer 的功能,這一功能需要用到 transform 函數。
默認情況下, transform 函數中帶入的參數會被用 '\t 分隔開,並且以字符串對方式傳入到用戶腳本中。輸入中 NULL 值會被轉換成字符串 '\N'。腳本的輸出使用的分隔符也是 '\t',同時 '\N' 會再次被轉化為 NULL。需要注意的是,當 transform 當參數中含有 '\t' 的時候,用戶需要手動處理這些 '\t' 以免腳本里面出錯。這里是一個使用樣例:
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 類型的。
這樣一來,就通過腳本(shell、python等)實現了UDF的功能。
