您的位置:首页 > 编程语言 > Python开发

Python 使用write写进文件,在hive中转换数据出现null

2017-03-06 15:39 337 查看
今天接到一批新数据,需要清洗入库,这些数据有些时间没有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编辑则时间显示正常

博主学识浅薄,还望知道的大神们提醒一二。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  python 数据