hive指令碼執行方式

2021-09-01 02:27:55 字數 4125 閱讀 8958

hive指令碼的執行方式

hive指令碼的執行方式大致有三種:

usage: hive

commands. e.g. -d a=b or --define a=b

--database specify the database to use

-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)

1.1. hive控制台執行

顧名思義,是進入hive控制台以後,執行sql指令碼,例如:

hive>

set mapred.job.queue.name=pms;

hive>

select page_name, tpa_name from pms.pms_exps_prepro limit 2;

total mapreduce jobs

= 1launching job 1 out of 1

...job running in-process (local hadoop)

2015-10-23 10:06:47,756 null map = 100%, reduce = 0%

2015-10-23 10:06:48,863 null map = 23%, reduce = 0%

2015-10-23 10:06:49,946 null map = 38%, reduce = 0%

2015-10-23 10:06:51,051 null map = 72%, reduce = 0%

2015-10-23 10:06:52,129 null map = 100%, reduce = 0%

ended job = job_local1109193547_0001

execution completed successfully

mapred local task succeeded . convert the join into mapjoin

oktime taken: 14.279 seconds

hive>

1.2. hive -e "sql"方式執行

利用hive -e "sql"的方式進入hive控制台並直接執行sql指令碼,例如:

hive -e "

set mapred.job.queue.name=pms;

set mapred.job.name=[hql]exps_prepro_query;

select page_name, tpa_name

from pms.pms_exps_prepro

limit 2;"

1.3. hive -f sql檔案方式執行

執行sql檔案中的sql指令碼,例如:

pms_exps_prepro.sql檔案內容如下:

set mapred.job.queue.name=pms;

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

2. hive轉義字元的問題

下面以乙個業務場景闡述關於hive轉義字元的問題

track_exps記錄**資料,現在小a希望獲取2015-10-20有效的**資料

其中有效的**記錄是指,

extfield1欄位滿足request-字串,section-數字的格式,

例如request-b470805b620900ac492bb892ad7e955e,section-4

對於這個問題,小a寫出了如下sql指令碼:

select 

*from track_exps

where ds =

'2015-10-20'

and relatedinfo rlike '^4.\d+.\d+.\d+.\d+$'

and extfield1 rlike '^request.+section-\d+$'

;

但是由於正規表示式是被包含在sql裡面,所以裡面的特殊字元需要轉義

2.1. hive -e "sql"的方式執行

改動如下:

hive -e "

set mapred.job.queue.name=pms;

explain select

cityid

from track_exps

where ds = '2015-10-20'

and relatedinfo rlike '\\^4\\.\\\d\\+\\.\\\d\\+\\.\\\d\\+\\.\\\d\\+\\$'

and extfield1 rlike '\\^request\\.\\+section\\-\\\d\\+\\$';"

檢視執行計畫,可以確定正規表示式解析正確了:

...

predicate:

expr: ((relatedinfo rlike '^4.\d+.\d+.\d+.\d+$'

) and (extfield1 rlike '^request.+section-\d+$'

)) type: boolean

...

分析如下:

在hive -e 「sql"的執行方式中,」『正規表示式』",正規表示式先被乙個單引號括起來,再被乙個雙引號括起來的,所以正規表示式裡面,\^的第乙個\用來解析第二個\,第二個\才真正起到了轉義的作用

2.2. hive -f sql檔案的方式執行

改動如下:

pms_exps_prepro.sql檔案內容如下:

select 

*from track_exps

where ds =

'2015-10-20'

and relatedinfo rlike '\^4\.\\d\+\.\\d\+\.\\d\+\.\\d\+\$'

and extfield1 rlike '\^request\.\+section\-\\d\+\$'

;

分析如下:

不同於hive -e "sql"的執行方式,因為是sql檔案,所以正規表示式只被乙個單引號括起來而已,乙個\就起到了轉義的作用了

Hive指令碼執行方式

1.hive e 將hive查詢的結果直接輸出到.taopaiche.txt 本地目錄非hdfs目錄 hive e select x.car number,x.area name,x.etcname,x.idcard,x.color,y.area name area name1,y.color co...

Hive 指令碼執行

繼上篇ddl中load的資料繼續進行指令碼操作。hive執行指令碼 hive e sql語句 會將查詢的結果列印在控制台上。hive e sql語句 會將查詢的結果重定向到 檔案中,會顯示ok和抓取的資料條數 hive s e sql語句 會將查詢的結果重定向到 檔案中,不會顯示ok和抓取的資料條數...

hive指令碼的三種執行方式

1.hive控制台執行,安裝了hive之後直接命令列輸入hive,進入控制台。2.hive e sql語句 直接輸入就會有結果,sql語句根據具體情況自己書寫 a.sql的內容如下 set mapred.job.queue.name default set hive.exec.reducers.ma...