Hive入門初體驗
一.將本地檔案匯入Hive案例
在本地建立一張student.txt
在Hive中建立一個student表
匯入本地student.txt到student表
load data local inpath "/root/apps/hive-1.2.2/data/student.txt" into table student;
但是這樣是有問題的——我們應該在建立表的時候指定分隔符。
我們把這張表刪了重新建立一次,按正確方式匯入。
二.Hive管理資料方式
Hive並不儲存資料,甚至連元資料都不儲存,而是管理儲存在HDFS上的資料,通過Hive表匯入資料只是簡單地將資料移動(如果資料是在HDFS上)或複製(如果資料是在本地檔案系統中)
1)內部表
內部表和關係型資料庫中的表在概念上很類似,每個表在HDFS上都有相應的目錄來儲存表的資料,在建立表時,會在預設目錄下生成一個以檔名字首為名的目錄,該目錄下儲存表。
比如先前建立的student表就是屬於內部表:
在使用drop刪除表的時候將會刪除對應表的元資料和相應倉庫目錄下的資料。
2)外部表
外部表的資料不是儲存在自己表所屬的目錄中,而是儲存到別處,這樣的好處是如果要刪除這個外部表,外部表所指的資料時不會被刪除的,他只會刪除外部表對應的元資料
建立外部表時使用EXTERNAL關鍵字,告知Hive並不需要其管理外部表所操作的資料,該操作不會在資料倉庫目錄下自動建立以表名命名的目錄,資料儲存位置(HDFS下)由使用者在建立表的時候使用LOCATION關鍵字來指定(該操作甚至不會檢查使用者指定的外部表是否存在)
3)內部表與外部表之間的抉擇
如果所有在資料集上的處理都是使用Hive來完成,那麼使用內部表;如果多使用者之間共享同一資料集那麼使用外部表
4)分割槽
在Hive中,表的每一個分割槽對應表目錄下的一個子目錄,所有分割槽的資料都是儲存在對應的子目錄中
5)桶
對指定的列值計算其hash,根據hash值切分資料,目的是為了並行,每個桶對應一個檔案
三.Hive常用互動命令
我們還可以將結果(>)追加到檔案中
四.Hive其他命令操作
1.退出Hive視窗
exit和quit
exit:隱形提交資料,再退出
quit:不提交資料退出
新版本Hive就沒有這種區別了。
2.在Hive命令視窗檢視hdfs檔案系統和本地檔案系統
dfs -ls /
3.檢視Hive命令歷史記錄——預設是儲存在/root下。
五.常見屬性配置
/*
設定列印列名
*/
<property>
<name>hive.cli.print.header</name>
<value>true</value>
<description>Whether to print the names of the columns in query output.</description></property>
/*
設定列印當前db
*/
<property>
<name>hive.cli.print.current.db</name>
<value>true</value>
<description>Whether to include the current database in the Hive prompt.</description></property>
重新進入客戶端:
是不是更好看了一些呢~
配置hive的日誌儲存位置:
我們還可以通過命令列的方式來一次性地修改引數:
六.Hive資料型別
1)基本資料型別
其中的STRING與關係型資料庫中varchar類似,他可以儲存2GB的字元數。
2)集合資料型別
create table test(
name string,
friends array<string>,
children map<string,int>,
address struct<street:string,city:string>
)
row format delimited
fields terminated by ','
collection items terminated by '_'
map keys terminated by ':'
lines terminated by '\n';
load data local inpath"/root/apps/hive-1.2.2/data/test.txt" into table test;
成功。