筱Mary 2017-03-06 07:41 采纳率: 25%
浏览 1406
已结题

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 。如果以上的python方式使用vi编辑则时间显示正常
请知道的大神指点一二。

  • 写回答

1条回答 默认 最新

  • devmiao 2017-03-06 19:34
    关注
    评论

报告相同问题?

悬赏问题

  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器