如何更改 hive 中的日期格式?

新手上路,请多包涵

我在蜂巢中的表格有一个格式为“2016/06/01”的日期文件。但我发现它与“2016-06-01”的格式不符。例如,他们无法比较。它们都是 string 。所以我想知道如何使它们和谐并可以比较它们。或者另一方面,如何将 ‘2016/06/01’ 更改为 ‘2016-06-01’ 以便他们可以比较。

非常感谢。

原文由 yanachen 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 605
2 个回答

要将日期字符串从一种格式转换为另一种格式,您必须使用 hive 的两个日期函数

  1. unix_timestamp(string date, string pattern) 将给定模式的时间字符串转换为unix时间戳(以秒为单位),如果失败则返回0。
  2. from_unixtime(bigint unixtime[, string format]) 将 unix 纪元 (1970-01-01 00:00:00 UTC) 的秒数转换为表示当前系统时区中那个时刻的时间戳的字符串。

使用以上两个功能,您可以达到您想要的结果。

示例输入和输出可以从下图中看到: 在此处输入图像描述

最后的查询是

select from_unixtime(unix_timestamp('2016/06/01','yyyy/MM/dd'),'yyyy-MM-dd') from table1;

其中 table1 是我的 hive 数据库中存在的表名。

我希望这对你有帮助!!!

原文由 Farooque 发布,翻译遵循 CC BY-SA 3.0 许可协议

这是我的解决方案(对于字符串到真实日期类型):

 select to_date(replace('2000/01/01', '/', '-')) as dt ;

ps:to_date() 返回 Date 类型, 此功能需要 Hive 2.1+ ;在 2.1 之前,它返回字符串。

ps2:hive _todate() 函数或 _dateformat() 函数,甚至 cast() 函数, 都无法 识别 ‘yyyy/MM/dd’ 或 ‘yyyymmdd’ 格式,我觉得这很可悲,让我有点抓狂。

原文由 Archi_Lantern 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进