反映(通用)UDF

通常存在 Java 类和方法来处理用户希望在 Hive 中使用的确切功能。不必编写包装 UDF 来调用此方法,而可以使用反射 UDF 调用其中的大多数方法。 Reflect 使用 Java 反射来实例化和调用对象的方法;它也可以调用静态函数。该方法必须返回原始类型或 Hive 知道如何序列化的类型。

SELECT reflect("java.lang.String", "valueOf", 1),
       reflect("java.lang.String", "isEmpty"),
       reflect("java.lang.Math", "max", 2, 3),
       reflect("java.lang.Math", "min", 2, 3),
       reflect("java.lang.Math", "round", 2.5),
       reflect("java.lang.Math", "exp", 1.0),
       reflect("java.lang.Math", "floor", 1.9)
FROM src LIMIT 1;

1	true	3	2	3	2.7182818284590455	1.0

Version information

从 Hive 0.9.0 开始,java_method()是 reflect()的同义词。请参见 Hive 运算符和 UDF 中的Misc. Functions

请注意,Reflect UDF 是不确定的,因为不能保证在给定相同参数的情况下特定方法将返回什么。因此,在 WHERE 子句上使用 Reflect 时要小心,因为这可能会使谓词下推优化无效。