博主按:近一段時間,一直在研究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 ...