Hive下的变量使用

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;"

猜你喜欢

转载自dacoolbaby.iteye.com/blog/1908389