第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在HIVE腳本中設(shè)置變量

如何在HIVE腳本中設(shè)置變量

我正在尋找SET varname = valueHive QL中的SQL等價物我知道我可以這樣做:SET CURRENT_DATE = '2012-09-16';SELECT * FROM foo WHERE day >= @CURRENT_DATE但后來我得到了這個錯誤:這里不支持字符'@'
查看完整描述

3 回答

?
largeQ

TA貢獻2039條經(jīng)驗 獲得超8個贊

您需要使用特殊的hiveconf進行變量替換。例如


hive> set CURRENT_DATE='2012-09-16';

hive> select * from foo where day >= '${hiveconf:CURRENT_DATE}'

同樣,你可以傳遞命令行:


% hive -hiveconf CURRENT_DATE='2012-09-16' -f test.hql

請注意,還有env和系統(tǒng)變量,因此您可以參考${env:USER}例如。


要查看所有可用變量,請從命令行運行


% hive -e 'set;'

或者從蜂巢提示符運行


hive> set;

更新: 我也開始使用hivevar變量,將它們放入hql片段中我可以使用source命令從hive CLI中包含(或從命令行傳遞-i選項)。這里的好處是,變量可以在有或沒有hivevar前綴的情況下使用,并允許類似于全局和本地使用的東西。


所以,假設(shè)有一些setup.hql設(shè)置一個tablename變量:


set hivevar:tablename=mytable;

然后,我可以帶入蜂巢:


hive> source /path/to/setup.hql;

并在查詢中使用:


hive> select * from ${tablename}

要么


hive> select * from ${hivevar:tablename}

我還可以設(shè)置一個“本地”表名,這會影響$ {tablename}的使用,但不會影響$ {hivevar:tablename}


hive> set tablename=newtable;

hive> select * from ${tablename} -- uses 'newtable'

VS


hive> select * from ${hivevar:tablename} -- still uses the original 'mytable'

從CLI可能并不意味著太多,但可以在使用source的文件中使用hql ,但是在本地的其余部分中設(shè)置一些“本地”變量。


查看完整回答
反對 回復(fù) 2019-09-19
?
慕容森

TA貢獻1853條經(jīng)驗 獲得超18個贊

這里的大多數(shù)答案都建議使用hiveconf或hivevar命名空間來存儲變量。所有這些答案都是正確的。但是,還有一個命名空間。


有三個namespaces可用于保留變量。


hiveconf - hive 從此開始,所有hive配置都存儲為此conf的一部分。最初,變量替換不是蜂巢的一部分,當(dāng)它被引入時,所有用戶定義的變量也作為其一部分存儲。這絕對不是一個好主意。因此創(chuàng)建了兩個名稱空間。

hivevar:存儲用戶變量

system:存儲系統(tǒng)變量。

因此,如果您將變量存儲為查詢的一部分(即date或product_number),則應(yīng)使用hivevar命名空間而不是hiveconf命名空間。


這就是它的工作原理。


hiveconf仍然是默認命名空間,因此如果您不提供任何命名空間,它會將您的變量存儲在hiveconf命名空間中。


但是,當(dāng)涉及引用變量時,情況并非如此。默認情況下,它指的是hivevar名稱空間。令人困惑,對吧?通過以下示例可以更清楚。


如果您沒有提供如下所述的命名空間,則變量var將存儲在hiveconf命名空間中。


set var="default_namespace";

因此,要訪問它,您需要指定 hiveconf名稱空間


select ${hiveconf:var};

如果你不提供命名空間,它會給你一個錯誤,如下所述,原因是默認情況下,如果你試圖訪問它只在hivevar命名空間中檢查的變量。并且hivevar沒有名為變量的變量var


select ${var}; 

我們已明確提供hivevar名稱空間


set hivevar:var="hivevar_namespace";

因為我們提供命名空間,這將起作用。


select ${hivevar:var}; 

默認情況下,在引用變量時使用的工作空間hivevar也是如此。


select ${var};


查看完整回答
反對 回復(fù) 2019-09-19
  • 3 回答
  • 0 關(guān)注
  • 3550 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號