1.hive控制台互動式
執行;
2.hive -e "sql"
執行;或者 hive -s -e " sql" ,加了-s表示靜音模式,即不會顯示mapreduce的操作過程。
這種方式直接在bash shell終端裡邊輸入hive -e "sql"執行即可,不需要進入hive互動式介面,並且hql語句可以用單引號或者雙引號括起來都行,語句末尾可以沒有;號,但是我的hive1.2.2版本要求引號裡邊的hql必須在from的表名稱前加上所在資料庫字首,否則丟擲semanticexception [error 10001]: line 1:22 table not found 'table_name'錯誤。
此處還有一亮點,利用輸出定向將查詢結果匯出到linux本地目錄下。例如:
[root@cloud4 shell]$ hive -e 'select * from t1' > test.txt
3.hive [-s]-f sql檔案
執行;
不進入互動模式,執行sql檔案中的sql指令碼,可以和靜音模式-s聯合使用,通過第三方程式呼叫,第三方程式通過hive的標準輸出獲取結果集,使用場景是自動化報表等。
例如:$hive_home/bin/ hive -s -f /home/my/hive-script.sql (不會顯示mapreduct的操作過程).
那麼問題來了:如何傳遞引數呢?
假設pms_exps_prepro.sql檔案內容如下:
set mapred.job.queue.name=pms; #這裡的set是在設定配置變數。具體見文末附表。
set hive.exec.reducers.max=48;
set mapred.reduce.tasks=48;
set mapred.job.name=[hql]pms_exps_prepro;
drop table if exists pms.pms_exps_prepro;
create table pms.pms_exps_prepro as
select
a.provinceid,
a.cityid,
a.ieversion,
a.platform,
'$' as ds
from track_exps a;
上述檔案中的sql指令碼接收乙個日期,接收引數寫法類似$
,執行時如下執行:
date=2015-10-22
hive -f pms_exps_prepro.sql --hivevar date=$date
附表:
if 語句的三種形式
if 語句的三種形式 第一種形式為基本形式 if 如果表示式的值為真,則執行其後的語句,否則不執行該語句。第二種形式為 if else 如果表示式的值為真,則執行語句1,否則執行語句2。第三種形式為 if else if 依次判斷表示式的值,當出現某個值為真時,則執行其對應的語句。然後跳到整個if語...
insert into 語句的三種寫法
方式1 insert into t1 field1,field2 value v001,v002 明確只插入一條value 方式2 insert into t1 field1,field2 values v101,v102 v201,v202 v301,v302 v401,v402 在插入批量資料時...
三種迴圈語句的比較
同乙個問題,往往既可以用while語句解決,也可以用do while或者for語句來解決,但在實際應用中,應根據具體情況來選用不同的迴圈語句。如果迴圈次數在執行迴圈體之前就已經確定,一般用for語句。如果迴圈次數是由迴圈體的執 況確定的,一般用while語句或者do while語句。當迴圈體至少執行...