Hive的變量前面有一個命名空間,包括三個hiveconf,system,env,還有一個hivevar
- hiveconf的命名空間指的是hive-site.xml下面的配置變量值。
- system的命名空間是系統的變量,包括JVM的運行環境。
- env的命名空間,是指環境變量,包括Shell環境下的變量信息,如HADOOP_HOME之類的
實例:
set mapreduce.job.split.metainfo.maxsize=-1;
set hive.exec.parallel=true;
set day='2018-08-30';
set window_day=50
select
*
from
table_name
where
dt >= date_sub(${hiveconf:day}, ${hiveconf:window_day})
and dt <= ${hiveconf:day}
1 、hivevar與hiveconf的區別:
| 命名空間 | 使用權限 | 詳細描述 |
| hivevar | rw | 用戶自定義變量 |
| hiveconf | rw | hive相關配置屬性 |
| system | rw | java定義的配置屬性 |
| env | r | Shell環境屬性 |
通常我們可以使用hive -e查看有關hivevar與hiveconf的描述:
2、hivevar與hiveconf的作用域
之前項目中涉及兩個hive作業同時執行並需要傳入相同key的參數,因此顧慮不清楚是否是線程安全。
結論先行:hivevar與hiveconf作用域都是會話級別的,言外之意就是如果兩個並發同時跑的作業同時傳入一個相同key但是value不相同的值的參數,不會發生線程安全問題。
3、對於hivevar與hiveconf的使用
hiveconf變量取值必須要使用hiveconf作為前綴參數,具體格式如下:
${hiveconf:key}
但是對於hivevar取值可以不使用前綴hivevar,具體格式如下:
使用前綴:
${hivevar:key}
不使用前綴:
${key}
