今天帮一同学导入一个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文件遇到的坑相关推荐

  1. 向oracle中导入*.csv文件

    向oracle中导入*.csv文件 1.什么是*.csv,如何得到? 里面存放的是数据表.每行代表数据库表格的一行, 每行中,每两个数据中间由逗号","分割. *.csv可以通过& ...

  2. 关于通过DDMS向Android系统的模拟器的sdcard中导入mp3文件的问题

    在DDMS中,在mnt/sdcard中导入歌词文件, 点击右上角第二个图标导入文件.但是报错,Failed to push selection: Read-only file system. 解决方法 ...

  3. 如何向IPython Notebook中导入.py文件

    相关文章链接 如何向IPython Notebook中导入.py文件 如何将 ipynb 发布到 blog 中(html, markdown格式) Introducing IPython Notebo ...

  4. mysql中导入csv文件_怎么把csv文件导入mysql?

    将CSV文件导入mysql数据库的方法: (1)准备csv文件. 把数据集正确地保存为csv文件即可,保存后的文件名和路径为"D:/train.csv" (2)在数据库中新建一个用 ...

  5. PADS9.5—layout中导入.asc文件时遇到的问题

    一.学习总结 在Layout中导入.asc文件时遇到的问题: 当我们在PASD Layout中导入.asc文件时,提示我们当前设计处于默认层模式,而文件处于增加层模式,你不能导入文件时的解决方法. 1 ...

  6. 3D Slicer 中导入STL文件

    3D Slicer 中导入STL文件,模型不显示 两种方法: 1.点击"DATA" 获取 STL 文件路径 2. 直接将STL 文件拖拽到视图中. 文件不显示的原因是STL文件的路 ...

  7. linux mysql命令行导入_在linux中导入sql文件的方法分享(使用命令行转移mysql数据库)...

    因导出sql文件 在你原来的网站服务商处利用phpmyadmin导出数据库为sql文件,这个步骤大家都会,不赘述. 上传sql文件 前面说过了,我们没有在云主机上安装ftp,怎么上传呢? 打开ftp客 ...

  8. vue中导入excel文件

    vue中导入excel文件 1.安装插件 npm install -S file-saver xlsxnpm install -D script-loader 2.在utils中创建excel文件夹放 ...

  9. Python中导入cx-Oracle文件配置

    Python中导入cx-Oracle文件配置 连接方式# 1 2 3 4 5 6 7 8 9 import cx_Oracle as cx #第一种 con = cx.connect('apps',  ...

最新文章

  1. 对Mapreduce代码进行单元测试
  2. Effective Java读书笔记七:泛型(部分章节需要重读)
  3. jmetter持续时间_Jmeter常用线程组设置及场景运行时间计算
  4. 统计csv词频_基于给定词语列表统计词频
  5. 学习笔记-JMeter 进行接口压力测试
  6. sql2008中打开“外围应用配置器”和启用 OpenRowSet 和 OpenDataSource函数
  7. 14-2 正则表达式
  8. 雷电模拟器 脚本_精灵盛典辅助雷电模拟器使用教程
  9. Hadoop安装部署
  10. python制作词云图
  11. 【笔记】排列组合公式、二项式定理
  12. H5 及 web 页面微信授权登录流程
  13. 20172328 2018-2019《Java软件结构与数据结构》第七周学习总结
  14. 用HTML+CSS简单做了张简历表格
  15. PPT、word破解加密文档
  16. seleniumxpath打码平台
  17. USB Type A/B/C的区别和基本知识
  18. ucb计算机硕士专业,美国CS、CE、ECE硕士项目你能区分开吗?
  19. Ghost高级教程——克隆备份
  20. Kotlin从入门到『放弃』系列 视频教程

热门文章

  1. from rfc 2068 hypertext怎么解决_你好,打工人!用英语怎么表达“打工人”?可别直接说 worker...
  2. mysql sqlite 性能优化_MySQL和Sqlite3性能测试
  3. 为什么建议你使用枚举?
  4. NTFS USN的Create和工具代码汇总
  5. MFC中CString类字符串与长整型、浮点型、字符数组char数据之间的相互转换
  6. Tensorflow 神经网络作业手写数字识别 训练、回测准确率
  7. 一款轻量级的消息提示插件 —— toastr
  8. python爬虫源码项目_32个Python爬虫实战项目,满足你的项目慌(带源码)
  9. php js跨域上传文件,Jquery实现跨域异步上传文件步骤详解
  10. php与eCharts结合,23.安装php和echarts进行结合展示图表