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'(,因为 reflect 被哨兵阻止了。

UUID函数是在 2.2.0 中添加的,不幸的是,它有一个错误,因为它没有被标记为非确定性。如果您更新到 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;
 }
}

最新更新