hive 傳遞變量的兩種方式


在使用hive開發數據分析代碼時,經常會遇到需要改變運行參數的情況,比如select語句中對日期字段值的設定,可能不同時間想要看不同日期的數據,這就需要能動態改變日期的值。如果開發量較大、參數多的話,使用變量來替代原來的字面值非常有必要,本文總結了幾種可以向hive的SQL中傳入參數的方法,以滿足類似的需要。

准備測試表和測試數據

第一步先准備測試表和測試數據用於后續測試:

 

然后執行建表和導入數據的sql文件:

 

其中student.sql內容如下:

 

testdata_student測試數據文件內容如下:

 

方法1:shell中設置變量,hive -e中直接使用

測試的shell文件名:

 

運行結果:

 

由於hive自身是類SQL語言,缺乏shell的靈活性和對過程的控制能力,所以采用shell+hive的開發模式非常常見,在shell中直接定義變量,在hive -e語句中就可以直接引用;

注意:使用-hiveconf定義,在hive -e中是不能使用的

修改一下剛才的shell文件,采用-hiveconf的方法定義日期參數:

 

運行會失敗,因為該腳本在shell環境中運行的,於是shell試圖去解析${hiveconf:enter_school_date}和${hiveconf:min_age}變量,但是這兩個SHELL變量並沒有定義,所以會以空字符串放在這個位置。

運行時該SQL語句會被解析成下面這個樣子:

 

方法2:使用-hiveconf定義,在SQL文件中使用

因為換行什么的很不方便,hive -e只適合寫少量的SQL代碼,所以一般都會寫很多hql文件,然后使用hive –f的方法來調用,這時候可以通過-hiveconf定義一些變量,然后在SQL中直接使用。

先編寫調用的SHELL文件:

 
被調用的testvar.sql文件內容:

 
執行過程:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM