筱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 HLs设计手写数字识别程序编译通不过
  • ¥15 Stata外部命令安装问题求帮助!
  • ¥15 从键盘随机输入A-H中的一串字符串,用七段数码管方法进行绘制。提交代码及运行截图。
  • ¥15 TYPCE母转母,插入认方向
  • ¥15 如何用python向钉钉机器人发送可以放大的图片?
  • ¥15 matlab(相关搜索:紧聚焦)
  • ¥15 基于51单片机的厨房煤气泄露检测报警系统设计
  • ¥15 Arduino无法同时连接多个hx711模块,如何解决?
  • ¥50 需求一个up主付费课程
  • ¥20 模型在y分布之外的数据上预测能力不好如何解决