關(guān)于糾正《Hive權(quán)威指南》中的結(jié)論~“hive在使用set自定義變量時(shí),hivevar命名空間是可選的”~的論證

背景:
根據(jù)《Hive權(quán)威指南》上講,在hive-0.8.0以后可以使用--define key=value命令定義用戶自定義的變量以便在Hive腳本中引用。當(dāng)用戶使用這個(gè)功能時(shí),Hive會(huì)將這個(gè)鍵值對(duì)放在hivevar命名空間下。并且,hivevar這個(gè)命名空間在使用過程中是可選的,也就是說可寫可不寫,自定義的變量都會(huì)放在hivevar這個(gè)命名空間下。

為了支持上面的觀點(diǎn),書上做了下面的操作。我為了親自體會(huì),使用的是hive-0.13.0。
1.使用hive --define foo=bar語句,在hive中定義一個(gè)變量名為foo,值為bar;
效果圖如下:


image.png

2.使用set foo;查看變量foo的值,從效果圖可以看出,foo的值確實(shí)為bar。
效果圖如下:

image.png

3.再使用set hivevar:foo;查看hivevar命名空間下的變量foo的值,從效果圖可以看出,hivevar命名空間下的變量foo的值確實(shí)為bar。測(cè)試到這里,已經(jīng)可以給人感覺加不加hivevar:這個(gè)命名空間名結(jié)果都是一樣的。
效果圖如下:

image.png

4.書中為了更確定的證明結(jié)論的正確性,又使用set hivavar:foo=bar2;改變foo的值,并使用set fool;和set hivevar:foo;查看不帶命名空間和帶命名空間的foo的值是否都已經(jīng)改變。根據(jù)效果圖可以看出,兩個(gè)foo確實(shí)已經(jīng)改變,證畢。于是書中給了開篇所說的結(jié)論。
效果圖如下:

image.png

5.注意:下面我們來分析一下,既然hivevar:命名空間是可選的,那么我們使用set foo=bar3;再次改變foo的值,帶命名空間和不帶命名空間的foo的值都應(yīng)該變成bar3,下面我們做此測(cè)試,根據(jù)效果圖可以看到,結(jié)果并不如我們推測(cè)的那樣,而是不帶命名空間的foo值變成了bar3,帶命名空間的foo的值竟然沒有變化!
效果圖如下:

image.png

結(jié)論:
“在hive中使用set操作自定義變量時(shí),hivevar:命名空間不是可選的,應(yīng)該是在使用set定義變量時(shí)時(shí)刻加hivevar:命名空間,以免出現(xiàn)難以找出的錯(cuò)誤。”
附加:
“因?yàn)?-define key=value實(shí)際上與--hivevar key=value是等價(jià)的,所以無論你習(xí)慣使用上面哪個(gè)操作自定義變量,都要加命名空間,不然都存在以上說的問題”

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容