Hive的变量前面有一个命名空间,包括三个hiveconf,system,env,还有一个hivevar
1. hiveconf的命名空间指的是hive-site.xml下面的配置变量值。
2. system的命名空间是系统的变量,包括JVM的运行环境。
3. env的命名空间,是指环境变量,包括Shell环境下的变量信息,如HADOOP_HOME之类的
普通的变量可以使用
--define key=value
或者 --hivevar key=value
来声明,这都代表是hivevar,的变量。
如:
$ hive --define key=value
简写 hive -d key=value
或
$ hive --hivevar key=value
添加多个变量的时候如下:
- $ hive --define a='a' --define b='b'
对于使用hivevar,前缀是可有可无的,如:
- hive> create table toss1(i int, ${hivevar:foo} string);
等价于
- hive> create table toss2(i2 int, ${foo} string);
但是对于使用命名空间如hiveconf,system,env的,前缀则不可少
在hive下面,可以通过
set;
或者
set -v;
来查看现有环境的所有变量的值。加上 -v参数,可以获取到HDFS和MapReduce的环境变量信息。
一个简单的Sample
- hive> set CURRENT_DATE='2012-09-16';
- hive> select * from foo where day >= '${hiveconf:CURRENT_DATE}'
- similarly, you could pass on command line:
hive -f xxx.hql
$ hive -hiveconf CURRENT_DATE='2012-09-16' -hiveconf CURRENT_DATE='2012-09-16' -f test.hql
hive -hiveconf mapred.job.queue.name=queue2 -e "set mapred.job.queue.name;"