On this page
反映(通用)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 时要小心,因为这可能会使谓词下推优化无效。