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}