亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

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

如何在HIVE腳本中設置變量

如何在HIVE腳本中設置變量

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

3 回答

?
largeQ

TA貢獻2039條經驗 獲得超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和系統變量,因此您可以參考${env:USER}例如。


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


% hive -e 'set;'

或者從蜂巢提示符運行


hive> set;

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


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


set hivevar:tablename=mytable;

然后,我可以帶入蜂巢:


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

并在查詢中使用:


hive> select * from ${tablename}

要么


hive> select * from ${hivevar:tablename}

我還可以設置一個“本地”表名,這會影響$ {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 ,但是在本地的其余部分中設置一些“本地”變量。


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

TA貢獻1853條經驗 獲得超18個贊

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


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


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

hivevar:存儲用戶變量

system:存儲系統變量。

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


這就是它的工作原理。


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


但是,當涉及引用變量時,情況并非如此。默認情況下,它指的是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};


查看完整回答
反對 回復 2019-09-19
  • 3 回答
  • 0 關注
  • 3586 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號