hive篇-----【变量和属性的命名空间】

       Hive中变量和属性命名空间有4种:hivevar、hiveconf、system、env。hivevar命名空间指的是用户自定义的变量,hiveconf命名空间指的是Hive相关属性的配置,system命名空间指的是Java定义的配置属性,env命名空间指的是Shell环境定义的变量信息,如HADOOP_HOME。

    进入Hive的CLI,可以使用set这个命令来显示或者修改变量值。使用

     set;或者 set -v;

    可以显示命名空间 hivevar、hiveconf、system、env 中所有的变量,使用-v参数,还可以显示出Hadoop中定义的所有属性,例如控制HDFS和MapReduce的属性。

1)hivevar
     如何定义一个命名空间为hivevar的变量呢?
                $ hive --define key=value
        简写 $hive  -d key=value
             或$hive --hivevar key=value
     sql语句:

   $ hive --define foo=bar;
       Logging initialized using configuration in jar:file:/usr/hive/hive-0.12.0/lib/hive-common-0.12.0.jar!/hive-log4j.properties
   $hive> set foo;
         foo=bar
   $hive> set hivevar:foo;
         hivevar:foo=bar
   $hive> set hivevar:foo=bar2; 
   $hive> set hivevar:foo;
          hivevar:foo=bar2
   $hive> set foo;
          foo=bar2


       由此可以看出,hivevar命名空间中hivevar:前缀是可以省略的,但是system、env等前缀是不可以省略的。所以下面的两个        sql语句是等价的。


     $hive> create table toss1(i int, ${hivevar:foo} string);hive> create table toss2(i2 int, ${foo} string);
       注意:在CLI中查询语句中的变量引用会先被替换掉,然后才会将查询语句交给查询处理器。

2)hiveconf
        hiveconf命名空间下有一个hive.cli.print.current.db属性,该属性的值默认是false,开启该属性可以在CLI提示符前打印出当       前所在的数据库名,默认的数据库名是default。
     sql语句

     $ hive --hiveconf  hive.cli.print.current.db=true
        Logging initialized using configuration in jar:file:/usr/hive/hive-0.12.0/lib/hive-common-0.12.0.jar!/hive-log4j.properties
     $hive (default)> set hiveconf:hive.cli.print.current.db;
           hiveconf:hive.cli.print.current.db=true
     $hive (default)> set hiveconf:hive.cli.print.current.db=false;
     $hive> set hiveconf:hive.cli.print.current.db=true;
     $hive (default)> 

3)system和env

          system命名空间,Java系统属性对这个命名空间具有可读可写权利;而env命名空间,对于环境变量只提供可读权权限。
    用户使用system变量和env变量时,必须使用system:和env:前缀来指定系统属性和环境变量。
    env命名空间可以作为向Hive传递变量的一个可选方式,例如:

    $ YEAR=2012  hive -e "slect * from mytable where year = ${env:YEAR}";    

     查询处理器会在where子句中查看到实际的变量值2012。

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值