Apache Spark 中的函数 typeof 和 PostgreSQL 中的pg_typeof 可以获取任何值或表达式的数据类型,例如
select typeof(1=1)
╭───────────────────╮
│ typeof((1 = 1)) │
├───────────────────┤
│ boolean │
╰───────────────────╯
Apache Hive中有类似的功能吗?
我找到了一种可以逐步实现这一目标的方法:
Hive 的文档建议使用 java_method UDF,可用于在 Hive 上运行 Java 类来获取结果。这是一个通用 UDF,它调用 GenericUDFReflect 类来运行 Java 方法,并使用 Hive 查询中传递的参数。
方法签名:
java_method(class, method[, arg1[, arg2..]])
可以转换为以下
SELECT java_method('java.lang.Object', 'getClass', (1==1));
获取作为参数传递的表达式的 Java 类型。在这种情况下,它应该返回
java.lang.Boolean
作为结果,这是布尔值的 Java 类。
另一种替代方法是使用 Hive 中的
reflect
方法来获得相同的结果:
SELECT reflect((1==1), 'getClass');