Hive官方使用手册——变量替换

本文为自己翻译的译文,原文地址:https://cwiki.apache.org/confluence/display/Hive/LanguageManual+VariableSubstitution


Hive官方使用手册——变量替换


简介

Hive用于批处理和交互式查询。变量替换允许任务,例如将特定于环境的配置变量与代码分离。Hive变量替代机制的设计是为了避免在Hive之上的脚本语言中加入一些代码。例如下面的shell命令可能(不能有效地)用于在脚本中设置变量:

$ a=b
$ hive -e  " describe $a "

这很令人沮丧,因为Hive与脚本语言紧密结合。在执行数千次操作(如多个hive -e调用)时,几秒钟的Hive启动时间是非常重要的。

Hive变量将您所知道和喜爱的集合功能与一些有限但强大的替代能力结合起来。

样例如下:

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

结果输出:

Hive history file=/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

有关Hive命令行选项的一般信息,请参见Hive CLI。

Version information

The hiveconf option was added in version 0.7.0 (JIRA HIVE-1096). Version 0.8.0 added the options define and hivevar (JIRA HIVE-2020), which are equivalent and are not described here. They create custom variables in a namespace that is separate from the hiveconf, system, and env namespaces.

使用变量

变量有三个名称空间:hiveconf、system和env。 (在Hive 0.8.0和稍后的版本中自定义变量也可以使用definehivevar选项在一个单独的命名空间中创建。)

hiveconf变量设置为正常:

set x=myvalue

他们被取回使用:

${hiveconf:x}

带注释的例子使用请参见例子 ql/src/test/queries/clientpositive/set_processor_namespaces.q:

set zzz= 5 ;
--  sets zzz= 5
set zzz;
 
set system:xxx= 5 ;
set system:xxx;
-- sets a system property xxx to  5
 
set system:yyy=${system:xxx};
set system:yyy;
-- sets yyy with value of xxx
 
set go=${hiveconf:zzz};
set go;
-- sets go base on value on zzz
 
set hive.variable.substitute= false ;
set raw=${hiveconf:zzz};
set raw;
-- disable substitution set a value to the literal
 
set hive.variable.substitute= true ;
 
EXPLAIN SELECT * FROM src where key=${hiveconf:zzz};
SELECT * FROM src where key=${hiveconf:zzz};
--use a variable in a query
 
set a= 1 ;
set b=a;
set c=${hiveconf:${hiveconf:b}};
set c;
--uses nested variables.
 
 
set jar=../lib/derby.jar;
 
add file ${hiveconf:jar};
list file;
delete file ${hiveconf:jar};
list file;

替换发生在查询构造过程中

当用变量构造查询时,Hive会替换变量的值。

  • 如果您运行两个不同的Hive会话,变量值将不会在会话中混合。
  • 如果在同一个Hive会话中设置具有相同名称的变量,那么查询将使用最后一个设置值。

禁用变量替换

默认情况下是允许变量替换(hive.variable.substitute=true)。如果这导致了一个已经存在的脚本的问题,请使用以下命令禁用它:

set hive.variable.substitute= false ;
Hive语言手册目录

你可能感兴趣的:(Hive学习,Hive官方使用手册文档翻译)