Hive語言手冊之二 變數替換

2021-06-21 07:34:08 字數 3247 閱讀 7158



博主按:近一段時間,一直在研究hadoop

及其上的應用技術,因為之前一直做關係資料庫系統的開發與維護,在眾多基於

hadoop

的技術中,

hive

與hbase

的使用方法一直是自己關注的重點。為了對

hive

技術有乙個準確的認識,開始著手研究

hive

的官方技術文件。在閱讀的時候順手按照自己的理解翻譯出來,寫在部落格上,權當然閱讀本記,純屬自娛自樂,如果能給瀏覽的諸君帶來些許的參考,那真是不勝榮幸之至。而理解與翻譯不確切的地方,還請大家海涵。

一、介紹

hive

互動shell

模式下。通過使用

hive

變數替換,可以減少重複輸入那些可用於

hive

命令的被插入到指令碼語言中的一些**。例如:

$ a=b

$ hive -e " describe $a "

儘管hive

與指令碼語言的緊密結合讓使用者感覺複雜,但是當執行比較複雜的類似

hive –e

批處理命令時,可以有效減少

hive

啟動時間的佔比。

hive

變數跟set

配合使用,實現強大的替換能力,例如執行如下命令:

$ bin/hive --hiveconf a=b -e 'set a; sethiveconf:a;create table if not exists b (col int); describe $'

命令可以分解為以下步驟:

--hiveconf a=b

設定在hive

命令中使用變數替換:

a=b

set a;

定義在hive cli

中的hiveconf變數a

create table…

建立乙個名稱為b的

hive

資料表

describe $

使用變數替換,通過a引用

b的值,顯示

b的表結構

上面命令的執行結果為

: hive historyfile=/tmp/edward/hive_job_log_edward_201011240906_1463048967.txt

a=bhiveconf:a=b

oktime taken: 5.913 seconds

okcolint

time taken: 0.754 seconds

hiveconf

選項從hive0.7.0

開始加入進來,在

hive0.8.0

增加了define

和hivevar

選項,在

hive0.9.0

中三者的含義沒有發生變化,在此不做贅述。

二、使用變數

變數分屬於三個命名空間:

hiveconf, system, and env

,或者說變數根據所屬的命名空間分為三種型別。建立與使用變數替換可以通過hive -e命令實現,也可以在hive cli中實現,建立與引用的

hiveconf

變數的方法如下:

set x=myvalue--

建立hiveconf

變數,並賦值

myvalue

,myvalue

可能是常量也可能是乙個變數

$--引用hiveconf變數x

下面是一些使用變數替換的示例,它們必須在hive cli中執行

(來自指令碼:

ql/src/test/queries/clientpositive/set_processor_namespaces.q):

set zzz=5;--

定義hiveconf

變數zzz

並且賦初值

5set zzz;--

輸出zzz的值

set system:***=5;--

定義system

變數***

並賦初值

5set system:***;--

輸出***的值

set system:yyy=$;--

定義system

變數yyy

,並把***

的值賦作初值

set system:yyy;--

輸出yyy的值

set go=$;--

定義hiveconf

變數go,

並且把同型別的變數

zzz的值賦作初值

set go;--

輸出go的值

set hive.variable.substitute=false;--

禁用hive

的變數替換功能

set raw=$;--

定義hiveconf

變數raw,

並且把同型別的變數

zzz的值賦作初值

set raw;--

輸出raw

的值,會發現

zzz的值根本無法賦給

raw

set hive.variable.substitute=true;--

啟用hive

的變數替換功能

explain select * from src wherekey=$;--hiveconf

變數zzz

用在查詢語句中

select * from src wherekey=$;

set a=1;

set b=a;

set c=$};--

變數替換的巢狀使用

set c;

set jar=../lib/derby.jar;

add file $;--

使用變數替換新增資源檔案

list file;

delete file $;--

使用變數替換刪除資源檔案

list file;

三、變數替換的禁用與啟用

預設情況下,

hive

的變數替換是啟用的,如果要禁用變數替換,在

hive

的cli

下,輸入如下命令:

set hive.variable.substitute=false;

如果想重新啟用變數替換,則輸入如下命令:

sethive.variable.substitute=true;

C 學習系列之二 變數

1.什麼叫變數 變數是指在程式的執行過程中隨時可以發生變化的量。要使用變數,需要申明他們,所謂申明就是給變數指定型別和名稱。變數申明後就可以用它們做儲存單元,存放申明的資料型別的資料。變數名定義規則 變數名必須由字母 數字 下劃線組成不能與c 中關鍵字相同 格式 型別 變數名 例 string us...

go語言(二)變數

一 定義賦值 定義乙個int的 var myvar int 定義多個 var myvar,myvar1,myvar2 int 定義並賦予初始值 var myvar int 1 定義多個並賦予初始值 var myvar,myvar1,myvar2 int 1,2,3 麻煩是吧。其實可以簡單 var m...

C語言(二)變數

學習c語言,就不得不說一下資料。首先,要知道資料的型別和他們的大小,就我個人的理解,所謂型別就是對各種資料按用途進行劃分,便於程式設計師對他們進行使用和理解。cpu都是在記憶體中對資料進行操作,由於記憶體的儲存空間不大,所以為了節省空間,對不同型別的資料進行不同大小的劃分。如 char short ...