hive中导入text文件遇到的坑
今天帮一同学导入一个excel数据,我把excel保存为txt格式,然后建表导入,失败!分隔符格式不匹配,无法导入!!!!怎么看两边都是\t,怎么不匹配呢?
做为程序员,最不怕的就是失败,因为我们有一颗勇敢的心!再来!又特么失败。。。
想了好久,看看了看我的表格式,我犯了一个好低级的错误:
hive表的存储格式设置为了orcfile!!!
众所周知:orcfile为压缩格式,可以节约大量存储空间,但orc还有个特点就是不能直接load数据!要想load数据,我们要建一个存储格式为textfile的中间表,然后再把数据抽取过去。因为这个错误太简单,网上有相关科普,因此很少有把它当错误写出来。遇到问题的朋友们可能要走些弯路,我来补个漏~~~~~~
举个栗子:
1.首先,导出excel表格为txt格式,(这个过程不再赘述,网上教程一大把)。
123,小明,666,1990-09-23 12:00:18
256,小伙,555,1989-10-06 03:57:32
142,小兰,444,1992-07-04 05:05:45
2.在hive中创建表模型:
CREATE TABLE IF NOT EXISTS STUDENTS
(
ID INT COMMENT'学生',
SNAME STRING COMMENT '姓名',
SCORE INT COMMENT '得分',
STIME STRING COMMENT '考试时间'
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
STORED AS ORCFILE;
3.创建临时表(中间表):
CREATE TABLE IF NOT EXISTS STUDENTS_TMP
(
ID INT COMMENT'学生',
SNAME STRING COMMENT '姓名',
SCORE INT COMMENT '得分',
STIME STRING COMMENT '考试时间'
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
STORED AS TEXTFILE;
与目标表只有名称和存储格式不同,其他都相同。
4.load 数据到临时表:
load data local inpath '/export/data/1.txt' into table students_tmp;
5.将数据导入目标表:
insert overwrite table students select * from students_tmp;
6.然后查看表数据,大功造成:
hive > select * from students;
OK
123 小明 666 1990-09-23 12:00:18
256 小伙 555 1989-10-06 03:57:32
142 小兰 444 1992-07-04 05:05:45
Time taken: 0.26 seconds, Fetched: 3 row(s)
其他存储格式如 SEQUENCEFILE、PARQUET 等,也要选存储为textfile格式,然后抽入目标表。
一定要按照导出格式的分隔符建表,不然load数据必然出错或全是null;
excel导出格式:
格式 分隔符 中文名称
text \t 制表符
csv , 逗号
7.还要注意一点是我们从excel导出的文件格式是gb2312 (无论是txt还是csv都是这个格式,都需要转码),我们需要把它转成utf-8才能Load。所以在load之前,我们一般会采取两种办法:
1. 在文本编辑器中进行转码,带不带bom关系不大,然后上传;
2.在文件所在本地目录下执行以下命令转码:
piconv -f gb2312 -t UTF-8 1.txt > 2.txt
注意,在本地目录下命令转码会改变文件名,因为此命令会把所文件写入到另一个文件,并清空原文件内容,如果我们不改名,文件内容会完全丢失。所以,我们Load的时候一定要选择修改后的文件名哦。
示例:
转码前数据:
hive> select * from students;
OK
112 �� 35 2017/8/19 15:30
113 ���� 45
114 ³�� 55 2017/8/21 15:30
115 ���� NULL
116 ������ 75 2017/8/23 15:30
117 ������ 85 2017/8/24 15:30
118 �˽� NULL 2017/8/25 15:30
119 ������ 90
120 СѾ NULL 2017/8/27 15:30
121 ���� 80 2017/8/28 15:30
122 ��߸ 75
123 ��«�� 70 2017/8/30 15:30
124 ���� NULL 2017/8/31 15:30
125 �繤 NULL
126 �峤 NULL 2017/9/2 15:30
127 ˾�� 50 2017/9/3 15:30
128 ������ 58 2017/9/4 15:30
129 ���� 66 2017/9/5 15:30
Time taken: 0.134 seconds, Fetched: 18 row(s)
去所在目录下转码,再Load
piconv -f gb2312 -t UTF-8 2.csv > 3.csv
# 在hive中选择正确的文件Load:
hive> load data local inpath '/export/data/3.csv' into table students;
结果:
hive> select * from students;
OK
112 小宝 35 2017/8/19 15:30
113 王明 45
114 鲁班 55 2017/8/21 15:30
115 苗苗 NULL
116 少林寺 75 2017/8/23 15:30
117 体育界 85 2017/8/24 15:30
118 八戒 NULL 2017/8/25 15:30
119 周芷若 90
120 小丫 NULL 2017/8/27 15:30
121 海宝 80 2017/8/28 15:30
122 哪吒 75
123 葫芦娃 70 2017/8/30 15:30
124 丹枫 NULL 2017/8/31 15:30
125 电工 NULL
126 村长 NULL 2017/9/2 15:30
127 司机 50 2017/9/3 15:30
128 王世间 58 2017/9/4 15:30
129 松鼠 66 2017/9/5 15:30
Time taken: 0.106 seconds, Fetched: 18 row(s)
hive中导入text文件遇到的坑相关推荐
- 向oracle中导入*.csv文件
向oracle中导入*.csv文件 1.什么是*.csv,如何得到? 里面存放的是数据表.每行代表数据库表格的一行, 每行中,每两个数据中间由逗号","分割. *.csv可以通过& ...
- 关于通过DDMS向Android系统的模拟器的sdcard中导入mp3文件的问题
在DDMS中,在mnt/sdcard中导入歌词文件, 点击右上角第二个图标导入文件.但是报错,Failed to push selection: Read-only file system. 解决方法 ...
- 如何向IPython Notebook中导入.py文件
相关文章链接 如何向IPython Notebook中导入.py文件 如何将 ipynb 发布到 blog 中(html, markdown格式) Introducing IPython Notebo ...
- mysql中导入csv文件_怎么把csv文件导入mysql?
将CSV文件导入mysql数据库的方法: (1)准备csv文件. 把数据集正确地保存为csv文件即可,保存后的文件名和路径为"D:/train.csv" (2)在数据库中新建一个用 ...
- PADS9.5—layout中导入.asc文件时遇到的问题
一.学习总结 在Layout中导入.asc文件时遇到的问题: 当我们在PASD Layout中导入.asc文件时,提示我们当前设计处于默认层模式,而文件处于增加层模式,你不能导入文件时的解决方法. 1 ...
- 3D Slicer 中导入STL文件
3D Slicer 中导入STL文件,模型不显示 两种方法: 1.点击"DATA" 获取 STL 文件路径 2. 直接将STL 文件拖拽到视图中. 文件不显示的原因是STL文件的路 ...
- linux mysql命令行导入_在linux中导入sql文件的方法分享(使用命令行转移mysql数据库)...
因导出sql文件 在你原来的网站服务商处利用phpmyadmin导出数据库为sql文件,这个步骤大家都会,不赘述. 上传sql文件 前面说过了,我们没有在云主机上安装ftp,怎么上传呢? 打开ftp客 ...
- vue中导入excel文件
vue中导入excel文件 1.安装插件 npm install -S file-saver xlsxnpm install -D script-loader 2.在utils中创建excel文件夹放 ...
- Python中导入cx-Oracle文件配置
Python中导入cx-Oracle文件配置 连接方式# 1 2 3 4 5 6 7 8 9 import cx_Oracle as cx #第一种 con = cx.connect('apps', ...
最新文章
- 对Mapreduce代码进行单元测试
- Effective Java读书笔记七:泛型(部分章节需要重读)
- jmetter持续时间_Jmeter常用线程组设置及场景运行时间计算
- 统计csv词频_基于给定词语列表统计词频
- 学习笔记-JMeter 进行接口压力测试
- sql2008中打开“外围应用配置器”和启用 OpenRowSet 和 OpenDataSource函数
- 14-2 正则表达式
- 雷电模拟器 脚本_精灵盛典辅助雷电模拟器使用教程
- Hadoop安装部署
- python制作词云图
- 【笔记】排列组合公式、二项式定理
- H5 及 web 页面微信授权登录流程
- 20172328 2018-2019《Java软件结构与数据结构》第七周学习总结
- 用HTML+CSS简单做了张简历表格
- PPT、word破解加密文档
- seleniumxpath打码平台
- USB Type A/B/C的区别和基本知识
- ucb计算机硕士专业,美国CS、CE、ECE硕士项目你能区分开吗?
- Ghost高级教程——克隆备份
- Kotlin从入门到『放弃』系列 视频教程
热门文章
- from rfc 2068 hypertext怎么解决_你好,打工人!用英语怎么表达“打工人”?可别直接说 worker...
- mysql sqlite 性能优化_MySQL和Sqlite3性能测试
- 为什么建议你使用枚举?
- NTFS USN的Create和工具代码汇总
- MFC中CString类字符串与长整型、浮点型、字符数组char数据之间的相互转换
- Tensorflow 神经网络作业手写数字识别 训练、回测准确率
- 一款轻量级的消息提示插件 —— toastr
- python爬虫源码项目_32个Python爬虫实战项目,满足你的项目慌(带源码)
- php js跨域上传文件,Jquery实现跨域异步上传文件步骤详解
- php与eCharts结合,23.安装php和echarts进行结合展示图表