I wrote a super simple UDF, but got some errors: UDF:
package yy; import org.apache.hadoop.hive.ql.exec.UDF; import java.util.Random; import java.util.UUID; import java.lang.management.*; public class MyUdf extends UDF { static Random rand = new Random(System.currentTimeMillis() + Thread.currentThread().getId()* 1000000); String name = ManagementFactory.getRuntimeMXBean().getName(); long startValue = Long.valueOf(name.replaceAll("[^\\d]+", "")) * 10000 + Thread.currentThread().getId() * 1000; public long evaluate(long x ) { //return (long)UUID.randomUUID().hashCode(); //return rand.nextLong(); return startValue++; } } sql script: CREATE TEMPORARY FUNCTION gen_uniq2 AS 'yy.MyUdf'; select gen_uniq2(field1), field2 from yy_mapping limit 10; field1 is bigint, field2 is int error: hive> source aa.sql; Added ./MyUdf.jar to class path Added resource: ./MyUdf.jar OK Time taken: 0.0070 seconds FAILED: SemanticException [Error 10014]: Line 2:7 Wrong arguments 'field1': No matching method for class yy.MyUdf with (bigint). Possible choices: _FUNC_() so I'm declaring a UDF with arg of long, so that should work for a bigint (more importantly it's complaining not long vs bigint, but bigint vs void ). I tried changing both to int, same failure thanks! yang