Hive表日期列格式转换:将01/12/17转为12-2017格式方法咨询
在Hive中转换日期格式为月-年的方案
刚好碰到过类似的需求,用Hive自带的日期函数组合就能轻松搞定,核心思路是先把原字符串格式的日期解析成Hive能识别的日期类型,再按照你要的MM-yyyy格式输出就行。
给你两种常用的实现方式,适配不同的Hive版本:
方式一:兼容低版本Hive(适用于Hive 1.x及更早)
用unix_timestamp先把原格式的字符串转成时间戳,再用from_unixtime转成目标格式:
SELECT from_unixtime(unix_timestamp(your_date_column, 'dd/MM/yy'), 'MM-yyyy') AS month_year FROM your_hive_table;
- 解释一下:
unix_timestamp(your_date_column, 'dd/MM/yy'):告诉Hive原字段的格式是日/月/两位年,把它转换成对应的Unix时间戳from_unixtime(..., 'MM-yyyy'):把时间戳转换成两位月-四位年的字符串格式
方式二:Hive 2.1及以上版本推荐写法
Hive 2.1开始支持to_date函数直接指定输入格式,搭配date_format更直观:
SELECT date_format(to_date(your_date_column, 'dd/MM/yy'), 'MM-yyyy') AS month_year FROM your_hive_table;
- 解释:
to_date(your_date_column, 'dd/MM/yy'):直接将字符串解析成DATE类型date_format(..., 'MM-yyyy'):把DATE类型按指定格式输出为字符串
举个实际例子,如果你的表字段order_date里的值是01/12/17,用上面的语句就会输出12-2017,完全符合你的需求~
内容的提问来源于stack exchange,提问作者Melz




