hive命令的3中呼叫方式

逸卿發表於2014-05-08

hive命令的3種呼叫方式 

方式1:hive –f  /root/shell/hive-script.sql(適合多語句)

hive-script.sql類似於script一樣,直接寫查詢命令就行

例如:

[root@cloud4 shell]# vi hive_script3.sql

select * from t1;

select count(*) from t1;

不進入互動模式,執行一個hive script 

這裡可以和靜音模式-S聯合使用,通過第三方程式呼叫,第三方程式通過hive的標準輸出獲取結果集。

 $HIVE_HOME/bin/hive -S -f /home/my/hive-script.sql (不會顯示mapreduct的操作過程)

方式2:hive -e  'sql語句'(適合短語句)
直接執行sql語句 
例如:
[root@cloud4 shell]# hive -e 'select * from t1'
靜音模式:
[root@cloud4 shell]# hive -S -e 'select * from t1'  (用法與第一種方式的靜音模式一樣,不會顯示mapreduce的操作過程)
此處還有一亮點,用於匯出資料到linux本地目錄下
例如:
[root@cloud4 shell]# hive -e 'select * from t1'  > test.txt
有點類似pig匯出分析結果一樣,都挺方便的
方式3:hive (直接使用hive互動式模式)
都挺方便的
介紹一種有意思的用法:
1.sql的語法

#hive     啟動

hive>quit;     退出hive

hive> show databases;   檢視資料庫

hive> create database test;  建立資料庫

hive> use default;    使用哪個資料庫

hive>create table t1 (key string); 建立表
對於建立表我們可以選擇讀取檔案欄位按照什麼字元進行分割
例如:
hive>create table t1(id ) '/wlan' 
partitioned by (log_date string)  表示通過log_date進行分割槽
row format delimited fields terminated by '\t'
   表示代表用‘\t’進行分割來讀取欄位
stored as textfile/
sequencefile/rcfile/;  表示檔案的儲存的格式

儲存格式的參考地址:

textfile 預設格式,資料不做壓縮,磁碟開銷大,資料解析開銷大。
可結合Gzip、Bzip2使用(系統自動檢查,執行查詢時自動解壓),但使用這種方式,hive不會對資料進行切分,從而無法對資料進行並行操作。
例項:

[plain] 我在csdn收藏的有

  1. > create table test1(str STRING)  

  2. > STORED AS TEXTFILE;   

  3. OK  

  4. Time taken: 0.786 seconds  

  5. #寫指令碼生成一個隨機字串檔案,匯入檔案:  

  6. > LOAD DATA LOCAL INPATH '/home/work/data/test.txt' INTO TABLE test1;  

  7. Copying data from file:/home/work/data/test.txt  

  8. Copying file: file:/home/work/data/test.txt  

  9. Loading data to table default.test1  

  10. OK  

  11. Time taken: 0.243 seconds  

SequenceFile是Hadoop API提供的一種二進位制檔案支援,其具有使用方便、可分割、可壓縮的特點。
SequenceFile支援三種壓縮選擇:NONE, RECORD, BLOCK。 Record壓縮率低,一般建議使用BLOCK壓縮。
示例:

[plain] 我在csdn收藏的有

  1. > create table test2(str STRING)  

  2. > STORED AS SEQUENCEFILE;  

  3. OK  

  4. Time taken: 5.526 seconds  

  5. hive> SET hive.exec.compress.output=true;  

  6. hive> SET io.seqfile.compression.type=BLOCK;  

  7. hive> INSERT OVERWRITE TABLE test2 SELECT * FROM test1;   

rcfile是一種行列儲存相結合的儲存方式。首先,其將資料按行分塊,保證同一個record在一個塊上,避免讀一個記錄需要讀取多個block。其次,塊資料列式儲存,有利於資料壓縮和快速的列存取。RCFILE檔案示例:


例項:

[plain] 我在csdn收藏的有

  1. > create table test3(str STRING)  

  2. > STORED AS RCFILE;  

  3. OK  

  4. Time taken: 0.184 seconds  

  5. >  INSERT OVERWRITE TABLE test3 SELECT * FROM test1;  

 

總結:
相比textfile和SequenceFile,rcfile由於列式儲存方式,資料載入時效能消耗較大,但是具有較好的壓縮比和查詢響應。資料倉儲的特點是一次寫入、多次讀取,因此,整體來看,rcfile相比其餘兩種格式具有較明顯的優勢。
 

hive>show tables;  檢視該資料庫中的所有表

hive>show tables  ‘*t*’;    //支援模糊查詢

hive>show partitions t1;  //檢視錶有哪些分割槽 

hive>drop table t1 ; 刪除表

hive不支援修改表中資料,但是可以修改表結構,而不影響資料

local的速度明顯比沒有local慢:

hive>load data inpath '/root/inner_table.dat' into table t1;   移動hdfs中資料到t1表中

hive>load  data local inpath '/root/inner_table.dat' into table t1;  上傳本地資料到hdfs中

hive> !ls;  查詢當前linux資料夾下的檔案
hive> dfs -ls /; 查詢當前hdfs檔案系統下  '/'目錄下的檔案

希望通過共享自己的筆記,來找到一群和我一樣願意分享筆記和心得的朋友,讓大家一起進步

我的QQ:529815144,外號:小頭

相關文章