Hive内置fucntion uuid()无法正常工作?

时间:2018-03-07 23:45:55

标签: hive uuid

在我的蜂巢中,我可以看到以下内置功能:

describe FUNCTION extended uuid
uuid() - Returns a universally unique identifier (UUID) string.
The value is returned as a canonical UUID 36-character string.
Example:
  > SELECT uuid();
'0baf1f52-53df-487f-8292-99a03716b688'
  > SELECT uuid();
'36718a53-84f5-45d6-8796-4f79983ad49d'

我正在尝试为表中的每一行生成一个uuid:

from (select *, uuid() as id from table1) t
insert into table table2
  select a,b,id
insert into table table3
  c,id;

每个表中的每一行都以相同的uuid值结束。但是,如果我用rand()函数替换uuid()函数,则每一行都会以不同的随机ID结束。 为什么uuid()只生成一个值?

我不能使用reflect('java.util.UUID','randomUUID'),因为反射被哨兵阻挡。

1 个答案:

答案 0 :(得分:0)

2.2.0中添加了UUID函数,不幸的是它有一个not tagged as non-deterministic错误。如果更新到2.2.3,它将按预期运行,如果不是这样,则可以在该位置创建自己的UUID生成器UDF

@UDFType(deterministic = false)
public class UUIDShim extends UDF {
 private final Text result = new Text();
 public Text evaluate() {
    result.set(UUID.randomUUID().toString());
    return result;
 }
}