日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

hive中导入text文件遇到的坑

發(fā)布時間:2025/3/12 编程问答 15 豆豆
生活随笔 收集整理的這篇文章主要介紹了 hive中导入text文件遇到的坑 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

今天幫一同學導入一個excel數(shù)據,我把excel保存為txt格式,然后建表導入,失敗!分隔符格式不匹配,無法導入!!!!怎么看兩邊都是\t,怎么不匹配呢?
做為程序員,最不怕的就是失敗,因為我們有一顆勇敢的心!再來!又特么失敗。。。
想了好久,看看了看我的表格式,我犯了一個好低級的錯誤:

hive表的存儲格式設置為了orcfile!!!

眾所周知:orcfile為壓縮格式,可以節(jié)約大量存儲空間,但orc還有個特點就是不能直接load數(shù)據!要想load數(shù)據,我們要建一個存儲格式為textfile的中間表,然后再把數(shù)據抽取過去。因為這個錯誤太簡單,網上有相關科普,因此很少有把它當錯誤寫出來。遇到問題的朋友們可能要走些彎路,我來補個漏~~~~~~

舉個栗子:

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中創(chuàng)建表模型:
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.創(chuàng)建臨時表(中間表):
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 數(shù)據到臨時表:
load data local inpath '/export/data/1.txt' into table students_tmp;
5.將數(shù)據導入目標表:
insert overwrite table students select * from students_tmp;
6.然后查看表數(shù)據,大功造成:
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數(shù)據必然出錯或全是null;

excel導出格式:

格式 分隔符 中文名稱 text \t 制表符 csv , 逗號
7.還要注意一點是我們從excel導出的文件格式是gb2312 (無論是txt還是csv都是這個格式,都需要轉碼),我們需要把它轉成utf-8才能Load。所以在load之前,我們一般會采取兩種辦法:
1. 在文本編輯器中進行轉碼,帶不帶bom關系不大,然后上傳;
2.在文件所在本地目錄下執(zhí)行以下命令轉碼:
piconv -f gb2312 -t UTF-8 1.txt > 2.txt

注意,在本地目錄下命令轉碼會改變文件名,因為此命令會把所文件寫入到另一個文件,并清空原文件內容,如果我們不改名,文件內容會完全丟失。所以,我們Load的時候一定要選擇修改后的文件名哦。
示例:
轉碼前數(shù)據:

hive> select * from students; OK 112 С�� 35 2017/8/19 15:30 113 ���� 45 114 3�� 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文件遇到的坑的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。