您好,登錄后才能下訂單哦!
這篇文章主要講解了“hive命令的調(diào)用方式有哪些”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“hive命令的調(diào)用方式有哪些”吧!
hive命令的3種調(diào)用方式
官網(wǎng)地址:https://cwiki.apache.org/confluence/display/Hive/LanguageManual+Cli(可參考)
方式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;
不進入交互模式,執(zhí)行一個hive script
這里可以和靜音模式-S聯(lián)合使用,通過第三方程序調(diào)用,第三方程序通過hive的標準輸出獲取結(jié)果集。
$HIVE_HOME/bin/hive -S -f /home/my/hive-script.sql (不會顯示mapreduct的操作過程)
那么問題來了:如何傳遞參數(shù)呢?
demo如下:
start_hql.sh 內(nèi)容:
#!/bin/bash
# -S 打印輸出mapreduce日志
hive \
-hivevar id=1 \
-hivevar col2=2 \
-S -f test.sql
test.sql 內(nèi)容:
-- 數(shù)據(jù)庫
use tmp;
-- 表名
select *
from tmp_jzl_20140725_test11
where
id='${hivevar:id}' and col2='${hivevar:col2}';
方式2:hive -e 'sql語句'(適合短語句)
直接執(zhí)行sql語句
例如:
[root@cloud4 shell]# hive -e 'select * from t1'
靜音模式:
[root@cloud4 shell]# hive -S -e 'select * from t1' (用法與第一種方式的靜音模式一樣,不會顯示mapreduce的操作過程)
此處還有一亮點,用于導(dǎo)出數(shù)據(jù)到linux本地目錄下
例如:
[root@cloud4 shell]# hive -e 'select * from t1' > test.txt
有點類似pig導(dǎo)出分析結(jié)果一樣,都挺方便的
方式3:hive (直接使用hive交互式模式)
都挺方便的
介紹一種有意思的用法:
1.sql的語法
#hive 啟動
hive>quit; 退出hive
hive> show databases; 查看數(shù)據(jù)庫
hive> create database test; 創(chuàng)建數(shù)據(jù)庫
hive> use default; 使用哪個數(shù)據(jù)庫
hive>create table t1 (key string); 創(chuàng)建表
對于創(chuàng)建表我們可以選擇讀取文件字段按照什么字符進行分割
例如:
hive>create table t1(id ) '/wlan'
partitioned by (log_date string) 表示通過log_date進行分區(qū)
row format delimited fields terminated by '\t' 表示代表用‘\t’進行分割來讀取字段
stored as textfile/sequencefile/rcfile/; 表示文件的存儲的格式
存儲格式的參考地址:http://blog.csdn.net/yfkiss/article/details/7787742
textfile 默認格式,數(shù)據(jù)不做壓縮,磁盤開銷大,數(shù)據(jù)解析開銷大。
可結(jié)合Gzip、Bzip2使用(系統(tǒng)自動檢查,執(zhí)行查詢時自動解壓),但使用這種方式,hive不會對數(shù)據(jù)進行切分,從而無法對數(shù)據(jù)進行并行操作。
實例:
[plain] view plaincopy
> create table test1(str STRING)
> STORED AS TEXTFILE;
OK
Time taken: 0.786 seconds
#寫腳本生成一個隨機字符串文件,導(dǎo)入文件:
> LOAD DATA LOCAL INPATH '/home/work/data/test.txt' INTO TABLE test1;
Copying data from file:/home/work/data/test.txt
Copying file: file:/home/work/data/test.txt
Loading data to table default.test1
OK
Time taken: 0.243 seconds
SequenceFile是Hadoop API提供的一種二進制文件支持,其具有使用方便、可分割、可壓縮的特點。
SequenceFile支持三種壓縮選擇:NONE, RECORD, BLOCK。 Record壓縮率低,一般建議使用BLOCK壓縮。
示例:
[plain] view plaincopy
> create table test2(str STRING)
> STORED AS SEQUENCEFILE;
OK
Time taken: 5.526 seconds
hive> SET hive.exec.compress.output=true;
hive> SET io.seqfile.compression.type=BLOCK;
hive> INSERT OVERWRITE TABLE test2 SELECT * FROM test1;
rcfile是一種行列存儲相結(jié)合的存儲方式。首先,其將數(shù)據(jù)按行分塊,保證同一個record在一個塊上,避免讀一個記錄需要讀取多個block。其次,塊數(shù)據(jù)列式存儲,有利于數(shù)據(jù)壓縮和快速的列存取。RCFILE文件示例:
實例:
[plain] view plaincopy
> create table test3(str STRING)
> STORED AS RCFILE;
OK
Time taken: 0.184 seconds
> INSERT OVERWRITE TABLE test3 SELECT * FROM test1;
總結(jié):
相比textfile和SequenceFile,rcfile由于列式存儲方式,數(shù)據(jù)加載時性能消耗較大,但是具有較好的壓縮比和查詢響應(yīng)。數(shù)據(jù)倉庫的特點是一次寫入、多次讀取,因此,整體來看,rcfile相比其余兩種格式具有較明顯的優(yōu)勢。
hive>show tables; 查看該數(shù)據(jù)庫中的所有表
hive>show tables ‘*t*’; //支持模糊查詢
hive>show partitions t1; //查看表有哪些分區(qū)
hive>drop table t1 ; 刪除表
hive不支持修改表中數(shù)據(jù),但是可以修改表結(jié)構(gòu),而不影響數(shù)據(jù)
有l(wèi)ocal的速度明顯比沒有l(wèi)ocal慢:
hive>load data inpath '/root/inner_table.dat' into table t1; 移動hdfs中數(shù)據(jù)到t1表中
hive>load data local inpath '/root/inner_table.dat' into table t1; 上傳本地數(shù)據(jù)到hdfs中
hive> !ls; 查詢當前l(fā)inux文件夾下的文件
hive> dfs -ls /; 查詢當前hdfs文件系統(tǒng)下 '/'目錄下的文件
感謝各位的閱讀,以上就是“hive命令的調(diào)用方式有哪些”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對hive命令的調(diào)用方式有哪些這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關(guān)知識點的文章,歡迎關(guān)注!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。