Hive語言手冊之二:變量替換



      博主按:近一段時間,一直在研究Hadoop及其上的應用技術,因爲之前一直做關係數據庫系統的開發與維護,在衆多基於Hadoop的技術中,HiveHbase的使用方法一直是自己關注的重點。爲了對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}'

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

  1. --hiveconf a=b                       設置在Hive命令中使用變量替換:a=b

  2. Set a;                                      定義在Hive CLI中的hiveconf變量a

  3. create table…                       創建一個名稱爲bHive數據表

  4. describe ${hiveconf:a}        使用變量替換,通過a引用b的值,顯示b的表結構

上面命令的執行結果爲:

       Hive historyfile=/tmp/edward/hive_job_log_edward_201011240906_1463048967.txt

       a=b

       hiveconf:a=b

       OK

       Time taken: 5.913 seconds

       OK

       col    int   

       Time taken: 0.754 seconds

hiveconf選項從Hive0.7.0開始加入進來,在Hive0.8.0增加了definehivevar選項,在Hive0.9.0中三者的含義沒有發生變化,在此不做贅述。

二、使用變量

變量分屬於三個命名空間:hiveconf, system, and env,或者說變量根據所屬的命名空間分爲三種類型。創建與使用變量替換可以通過Hive -e命令實現,也可以在Hive CLI中實現,創建與引用的hiveconf變量的方法如下:

set x=myvalue                    --創建hiveconf變量,並賦值myvaluemyvalue可能是常量也可能是一個變量

${hiveconf:x}                       --引用hiveconf變量x


下面是一些使用變量替換的示例,它們必須在Hive CLI中執行(來自腳本:ql/src/test/queries/clientpositive/set_processor_namespaces.q):

set zzz=5;            --定義hiveconf變量zzz並且賦初值5

set zzz;                --輸出zzz的值


set system:xxx=5;   --定義system變量xxx並賦初值5

set system:xxx;                 --輸出xxx的值


set system:yyy=${system:xxx};        --定義system變量yyy,並把xxx的值賦作初值

set system:yyy;                           --輸出yyy的值


set go=${hiveconf:zzz};             --定義hiveconf變量go,並且把同類型的變量zzz的值賦作初值

set go;                                  --輸出go的值


set hive.variable.substitute=false; --禁用Hive的變量替換功能

set raw=${hiveconf:zzz};          --定義hiveconf變量raw,並且把同類型的變量zzz的值賦作初值

set raw;                               --輸出raw的值,會發現zzz的值根本無法賦給raw


set hive.variable.substitute=true;  --啓用Hive的變量替換功能

EXPLAIN SELECT * FROM src wherekey=${hiveconf:zzz};       --hiveconf變量zzz用在查詢語句中

SELECT * FROM src wherekey=${hiveconf:zzz};


set a=1;

set b=a;

set c=${hiveconf:${hiveconf:b}};      --變量替換的嵌套使用

set c;


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

add file ${hiveconf:jar};             --使用變量替換添加資源文件

list file;

delete file ${hiveconf:jar};                 --使用變量替換刪除資源文件

list file;

三、變量替換的禁用與啓用

默認情況下,Hive的變量替換是啓用的,如果要禁用變量替換,在HiveCLI下,輸入如下命令:

set hive.variable.substitute=false;

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

sethive.variable.substitute=true;


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章