用于 UDF 的 Hive DATE 和 TIMESTAMP 的正确数据类型
Posted
技术标签:
【中文标题】用于 UDF 的 Hive DATE 和 TIMESTAMP 的正确数据类型【英文标题】:Proper datatypes for Hive DATE and TIMESTAMP for UDF 【发布时间】:2017-03-15 20:53:14 【问题描述】:我为 Hive 项目编写了一个新的 UDF,但返回类型不是 DATE 对象,而是一个奇怪的结构。正确的返回类型是什么?
@Description(name = "udf_good_date", value = "_FUNC_(datestring):DATE", extended = "")
@UDFType(deterministic = true, stateful = false)
public class GoodDateAsDateUDF extends UDF
public Date evaluate(String a)
return Utils.getGoodDate(a);
尝试一下:
select default.udf_good_date('10/20/1983);
奇怪的是:
+----------------------------------------------------------------------------------------------------------------------+--+
| _c0 |
+----------------------------------------------------------------------------------------------------------------------+--+
| "fasttime":125733600000,"cdate":"cachedyear":1983,"cachedfixeddatejan1":720259,"cachedfixeddatenextjan1":720624 |
+----------------------------------------------------------------------------------------------------------------------+--+
【问题讨论】:
认真的吗? .... 我切换到 java.sql.Date 并且更多功能正在工作。但是,java.sql.Timestamp 没有解决 Impala 中可以使用 Hive 函数的 Timestamp 逻辑。 您正在返回函数Utils.getGoodDate
的结果,而没有提供其代码、接口或相关链接,您真的希望得到答案吗?感谢上帝,这是谷歌。您可能看到的是 sun.util.calendar grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/… 的 JSON 表示。检查以下源代码示例github.com/apache/hive/tree/…
github.com/apache/hive/blob/… 你给出的 URL 指向答案。
是的,这就是重点:-) 请添加答案
【参考方案1】:
当开源项目缺少文档时,需要访问实际源代码本身才能看到真正的答案。因此,关于各种基于时间的数据类型,最好阅读源代码中的代表性示例。这个特殊的类很好地说明了用法。
https://github.com/apache/hive/blob/ff67cdda1c538dc65087878eeba3e165cf3230f4/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFHour.java
【讨论】:
以上是关于用于 UDF 的 Hive DATE 和 TIMESTAMP 的正确数据类型的主要内容,如果未能解决你的问题,请参考以下文章