【问题标题】:Hadoop Impala: Format datatype integer to date/timestamp to use addtime functionHadoop Impala:将数据类型整数格式化为日期/时间戳以使用 addtime 函数
【发布时间】:2018-03-16 09:30:14
【问题描述】:

我正在使用下表在 Impala 中工作:

customer_id | day_id    | return_day_id
ABC           20170830    20170923
BCD           20170830    20170901

不幸的是,day_id 和 return_day_id 字段都是 INT 而不是日期。

如何将他们的数据类型更改为日期,以便我可以在 day_id 之后的 4 天内仅使用 return_day_id 计算不同的 customer_id。我是否需要将其转换为日期,然后转换为时间戳,以便我可以使用 adddate 函数?

【问题讨论】:

  • 使用unix_timestamp和from_unixtime的组合并将结果转换为timestamp以使用date_add函数。
  • @philantrovert 谢谢 - 我对 Impala 还很陌生,你介意发布一个例子来说明你将如何做作为答案吗?这样我也可以投票/接受它。非常感谢

标签: date hadoop timestamp type-conversion impala


【解决方案1】:

其中一位 cmets 正确指出,您需要使用 unix_timestamp 和 from_unixtime,但您不需要使用 cast。 stackoverflow 上的许多其他问题都遇到了类似的问题,每个问题都尝试使用强制转换,但在许多情况下最终返回 NULL 值或不起作用。

下面应该给你你需要的时间对象,格式为 YYYY-MM-dd,你也可以选择添加 hh-mm-ss 到它。

SELECT TBL.day_id, from_unixtime(unix_timestamp(cast (TBL.day_id as string), "yyyyMMdd"))

FROM yourTable as TBL

LIMIT 10 

要记住的一个小问题是,这会将字符串转换为日期,因此我们将其转换为cast (TBL.day_id as string), "yyyyMMdd"))的字符串

示例:

20160220 -> 2016-02-20 00:00:00

您可以在文档here 中找到更多信息。

希望对您有所帮助, 朱利安

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-05-15
    • 1970-01-01
    • 2022-11-26
    • 2021-01-25
    • 1970-01-01
    • 1970-01-01
    • 2010-09-09
    • 2022-01-18
    相关资源
    最近更新 更多