Hive字符串转Timestamp失败求助:request_time字段转换问题
解决Hive中字符串转Timestamp的问题
针对你遇到的request_time字符串(格式dd-MM-yyyy HH:mm:ss)转Timestamp类型失败的问题,先分析下你之前方法的问题,再给出可行方案:
之前方法失效的原因
- 用
FROM_UNIXTIME()直接返回的是字符串类型,不是Timestamp,所以结果自然还是字符串; - 直接
CAST(request_time AS TIMESTAMP)失败,是因为Hive默认只识别yyyy-MM-dd HH:mm:ss格式的字符串,原格式不匹配导致转成null; - 正则替换的方法如果没有明确指定
UNIX_TIMESTAMP()的格式,或者原数据存在格式不规范的情况,也会出现null结果。
正确的转换方法
方法1:使用to_timestamp函数(推荐,Hive 2.1.0+支持)
这个函数可以直接指定原字符串格式,返回标准的Timestamp类型:
SELECT to_timestamp(request_time, 'dd-MM-yyyy HH:mm:ss') AS converted_timestamp FROM your_table;
方法2:兼容低版本Hive的方案
如果你的Hive版本低于2.1.0,没有to_timestamp,可以先转成unix时间戳,再通过CAST转成Timestamp:
SELECT CAST(FROM_UNIXTIME(UNIX_TIMESTAMP(request_time, 'dd-MM-yyyy HH:mm:ss')) AS TIMESTAMP) AS converted_timestamp FROM your_table;
额外注意事项
如果转换后仍有null,检查你的request_time字段是否存在格式不规范的数据(比如日期部分不是两位数字、分隔符错误等),可以用regexp过滤不符合格式的数据:
SELECT CASE WHEN request_time RLIKE '^\\d{2}-\\d{2}-\\d{4} \\d{2}:\\d{2}:\\d{2}$' THEN to_timestamp(request_time, 'dd-MM-yyyy HH:mm:ss') ELSE NULL END AS converted_timestamp FROM your_table;
内容的提问来源于stack exchange,提问作者Metehan Kürşat Güzel
相关产品推荐
相关产品推荐

