1. 程式人生 > >Hive入門初體驗

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;

 

 

成功。