hive命令指的是hive_home/bin/hive.sh,hive表示用來執行互動式查詢和批量處理的指令碼。hive可以直接敲hive命令進入interactive模式,也可以hive -e 執行簡單命令或者hive -f 執行乙個sql指令碼檔案。具體官方給出的用法如下:
to get help, run "hive -h
" or "hive --help
".
usage (as it is in hive 0.9.0):
usage: hiveversion informationcommands. e.g. -d a=b or --define a=b
-e sql from command line
-f sql from files
-h,--help print help information
-h connecting to hive server on remote host
--hiveconf use value for given property
commands. e.g. --hivevar a=b
-i initialization sql file
-p connecting to hive server on port number
-s,--silent silent mode in interactive shell
-v,--verbose verbose mode (echo executed sql to the
console)
as of hive 0.10.0 there is one additional command line option:
--database specify the database to usenote: the variant "
-hiveconf
" is supported as well as "--hiveconf
".
see variable substitution for examples of using thehiveconf
option.
下面我們具體看一下三種用法的詳細介紹:
方式1:hive –f /root/shell/hive-script.sql(適合多條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的操作過程)
那麼問題來了:如何傳遞引數呢?
demo如下:
start_hql.sh 內容:
#!/bin/bash
# -s 列印輸出mapreduce日誌
hive \
-hivevar id=1 \
-hivevar col2=2 \
-s -f test.sql
test.sql 內容:
-- 資料庫
use tmp;
-- 表名
select *
from tmp_jzl_20140725_test11
where
id='$' and col2='$';
方式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; 使用哪個資料庫
textfile
預設格式,資料不做壓縮,磁碟開銷大,資料解析開銷大。
可結合gzip、bzip2使用(系統自動檢查,執行查詢時自動解壓),但使用這種方式,hive不會對資料進行切分,從而無法對資料進行並行操作。
例項:
[plain]
view plain
copy
> create table test1(str string)
> stored as textfile;
ok
time taken: 0.786 seconds
#寫指令碼生成乙個隨機字串檔案,匯入檔案:
> 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 plain
copy
> 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是一種行列儲存相結合的儲存方式。首先,其將資料按行分塊,保證同乙個record在乙個塊上,避免讀乙個記錄需要讀取多個block。其次,塊資料列式儲存,有利於資料壓縮和快速的列訪問。rcfile檔案示例:
例項:[plain]
view plain
copy
> create table test3(str string)
> stored as rcfile;
ok
time taken: 0.184 seconds
> 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檔案系統下 '/'目錄下的檔案
web客戶端的幾種儲存方式
1 cookie 特點 1 可以相容到包括ie6以上的所有瀏覽器 2 cookie在不同瀏覽器上數量和大小 不超過4kb 都有限制 3 cookie的生命週期是根據設定值得expire的時間來控制的。4 需要自己寫操作函式實現操作 適用範圍 1 低版本的瀏覽器相容 2 需要前後端進行傳遞的資料 比如...
幾種常見的服務端認證客戶端的方式
1 session 1 概念 使用者資料儲存在服務端,給瀏覽器乙個key,這個key是每次請求瀏覽器都會自己帶上來 2 存在問題 瀏覽器登入後,就具備session的key,這樣所有的連線都可以在這個瀏覽器執行,並且都可以攜帶session的key 是針對單個伺服器的,多個伺服器session共享比...
網頁呼叫 iOS Android 客戶端
如此便可以從網頁開啟客戶端了。這只是最簡單的 scheme 部分,除此之外,應該還有更多的引數,一般要約定好,讓網頁開發者和客戶端開發者兩者之間可以相互呼叫。具體邏輯如下 後記,還是相容性問題 另外,我這裡只是著重討論的網頁的部分。呼叫客戶端還是比較簡單的,如果需要呼叫客戶端裡面的某個乙個模組呢?客...