今天接到一批新数据,需要清洗入库,这些数据有些时间没有hour,只有年月日和分秒,细细观察后发现都是在第9小时的数据的时间格式不对,所以使用python重新将小时写进,入到hive的外部表,在使用hql将时间格式化入到另一个表,但是在最后的数据中,除了我修改过的时间值是null,其他均正常,我想不明白这是什么原因,还请大神帮助解决?
最初的源数据:(其中”|”前面试是时间,精确到毫秒,后面是一个数字串,外部表只有两个字段)
2016/09/04 07:54:03 109.636|0139
2016/09/04 07:54:03 133.878|1390
2016/09/04 07:54:03 133.753|1396
2016/09/04 37:19 974.281|1380
2016/09/04 37:19 974.414|1385
2016/09/04 37:19 975.497|1525
使用的py脚本,就是在分钟前加上 09:
# coding:utf-8
import sys
import os
lines=open('./'+sys.argv[1])
output=open(sys.argv[1]+'.p','wb')
r=lines.readlines();
for s in r:
if s[16]!=':':
output.write(s[:11] + '09:' + s[11:])
else:
output.write(s)
lines.close()
output.close()
入到hive中的外部表是对的,
hive>select * from zsyh_data;
2016/09/04 07:54:03 109.636 0139
2016/09/04 07:54:03 133.878 1390
2016/09/04 07:54:03 133.753 1396
2016/09/04 09:37:19 974.281 1380
2016/09/04 09:37:19 974.414 1385
2016/09/04 09:37:19 975.497 1525
下面是使用insert into 插入一个新表中,其中stat_time 是timastamp 类型的
insert into zsyh_data_new
select
from_unixtime(
unix_timestamp(
substr(stat_time,1,20),
'yyyy/MM/dd HH:mm:ss'
),
'yyyy-MM-dd HH:mm:ss'
) AS stat_time,Digital
from zsyh_data;
使用insert into到另一个表中之后,09小时的数据时间就为null
hive>select * from zsyh_data_new;
2016/09/04 07:54:03 0139
2016/09/04 07:54:03 1390
2016/09/04 07:54:03 1396
null 1380
null 1385
null 1525
查看编码方式是 uft-8 。如果以上的方式使用vi编辑则时间显示正常
博主学识浅薄,还望知道的大神们提醒一二。