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

今天接到一批新数据,需要清洗入库,这些数据有些时间没有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编辑则时间显示正常
博主学识浅薄,还望知道的大神们提醒一二。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值