Hive HQL中字符串转Timestamp的方法求助
解决Hive中字符串转Timestamp返回NULL的问题
你遇到的问题核心是格式串不匹配——你提供的格式字符串"yyyy-MM-dd'T'HH:mm:ss.SSSXXX"是带时区的ISO标准时间格式,但你的原始字符串是"08/03/2018 02:00:00",属于月/日/年 时:分:秒(或日/月/年)的格式,两者完全不兼容,所以unix_timestamp无法解析,返回NULL。
下面给你两种可行的解决方案,适配不同Hive版本:
方案1:使用to_timestamp函数(Hive 2.1.0及以上版本推荐)
这个函数可以直接将指定格式的字符串转换为Timestamp类型,用法更简洁:
- 如果你的日期是月/日/年格式(08=8月,03=3日):
SELECT to_timestamp('08/03/2018 02:00:00', 'MM/dd/yyyy HH:mm:ss') AS converted_timestamp;
- 如果你的日期是日/月/年格式(08=8日,03=3月):
SELECT to_timestamp('08/03/2018 02:00:00', 'dd/MM/yyyy HH:mm:ss') AS converted_timestamp;
方案2:使用unix_timestamp + from_unixtime(兼容低版本Hive)
如果你的Hive版本低于2.1.0,不支持to_timestamp,可以先通过unix_timestamp解析字符串得到Unix时间戳,再用from_unixtime转换为Timestamp:
-- 月/日/年格式 SELECT from_unixtime(unix_timestamp('08/03/2018 02:00:00', 'MM/dd/yyyy HH:mm:ss')) AS converted_timestamp; -- 日/月/年格式 SELECT from_unixtime(unix_timestamp('08/03/2018 02:00:00', 'dd/MM/yyyy HH:mm:ss')) AS converted_timestamp;
需要注意的是,Hive的日期格式匹配是严格的,必须保证格式串和原始字符串的每一部分完全对应:
MM代表两位月份,dd代表两位日期,yyyy代表四位年份HH代表24小时制的小时,mm是分钟,ss是秒
内容的提问来源于stack exchange,提问作者Sara
相关产品推荐
相关产品推荐

