Hive语言手册之二:变量替换



      博主按:近一段时间,一直在研究Hadoop及其上的应用技术,因为之前一直做关系数据库系统的开发与维护,在众多基于Hadoop的技术中,HiveHbase的使用方法一直是自己关注的重点。为了对Hive技术有一个准确的认识,开始着手研究Hive的官方技术文档。在阅读的时候顺手按照自己的理解翻译出来,写在博客上,权当然阅读本记,纯属自娱自乐,如果能给浏览的诸君带来些许的参考,那真是不胜荣幸之至。而理解与翻译不确切的地方,还请大家海涵。


一、介绍

Hive交互Shell模式下。通过使用Hive变量替换,可以减少重复输入那些可用于Hive命令的被插入到脚本语言中的一些代码。例如:

$ a=b

$ hive -e " describe $a "

尽管Hive与脚本语言的紧密结合让使用者感觉复杂,但是当执行比较复杂的类似Hive –e批处理命令时,可以有效减少Hive启动时间的占比。Hive 变量跟Set配合使用,实现强大的替换能力,例如执行如下命令:

$ bin/hive --hiveconf a=b -e 'set a; sethiveconf:a;create table if not exists b (col int); describe ${hiveconf:a}'

命令可以分解为以下步骤:

  1. --hiveconf a=b                       设置在Hive命令中使用变量替换:a=b

  2. Set a;                                      定义在Hive CLI中的hiveconf变量a

  3. create table…                       创建一个名称为bHive数据表

  4. describe ${hiveconf:a}        使用变量替换,通过a引用b的值,显示b的表结构

上面命令的执行结果为:

       Hive historyfile=/tmp/edward/hive_job_log_edward_201011240906_1463048967.txt

       a=b

       hiveconf:a=b

       OK

       Time taken: 5.913 seconds

       OK

       col    int   

       Time taken: 0.754 seconds

hiveconf选项从Hive0.7.0开始加入进来,在Hive0.8.0增加了definehivevar选项,在Hive0.9.0中三者的含义没有发生变化,在此不做赘述。

二、使用变量

变量分属于三个命名空间:hiveconf, system, and env,或者说变量根据所属的命名空间分为三种类型。创建与使用变量替换可以通过Hive -e命令实现,也可以在Hive CLI中实现,创建与引用的hiveconf变量的方法如下:

set x=myvalue                    --创建hiveconf变量,并赋值myvaluemyvalue可能是常量也可能是一个变量

${hiveconf:x}                       --引用hiveconf变量x


下面是一些使用变量替换的示例,它们必须在Hive CLI中执行(来自脚本:ql/src/test/queries/clientpositive/set_processor_namespaces.q):

set zzz=5;            --定义hiveconf变量zzz并且赋初值5

set zzz;                --输出zzz的值


set system:xxx=5;   --定义system变量xxx并赋初值5

set system:xxx;                 --输出xxx的值


set system:yyy=${system:xxx};        --定义system变量yyy,并把xxx的值赋作初值

set system:yyy;                           --输出yyy的值


set go=${hiveconf:zzz};             --定义hiveconf变量go,并且把同类型的变量zzz的值赋作初值

set go;                                  --输出go的值


set hive.variable.substitute=false; --禁用Hive的变量替换功能

set raw=${hiveconf:zzz};          --定义hiveconf变量raw,并且把同类型的变量zzz的值赋作初值

set raw;                               --输出raw的值,会发现zzz的值根本无法赋给raw


set hive.variable.substitute=true;  --启用Hive的变量替换功能

EXPLAIN SELECT * FROM src wherekey=${hiveconf:zzz};       --hiveconf变量zzz用在查询语句中

SELECT * FROM src wherekey=${hiveconf:zzz};


set a=1;

set b=a;

set c=${hiveconf:${hiveconf:b}};      --变量替换的嵌套使用

set c;


set jar=../lib/derby.jar;

add file ${hiveconf:jar};             --使用变量替换添加资源文件

list file;

delete file ${hiveconf:jar};                 --使用变量替换删除资源文件

list file;

三、变量替换的禁用与启用

默认情况下,Hive的变量替换是启用的,如果要禁用变量替换,在HiveCLI下,输入如下命令:

set hive.variable.substitute=false;

如果想重新启用变量替换,则输入如下命令:

sethive.variable.substitute=true;


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值