用于 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 的正确数据类型的主要内容,如果未能解决你的问题,请参考以下文章

hive自定义UDF函数,步骤详解

如何在 Hive 中创建 UDF

用于 TOP 功能的 Hive Udf

Hive自定义函数UDF和UDTF

UDF 在 Hive 中转换日期格式

使用Python编写Hive UDF