Kar*_*rod 23 hadoop hive hiveql
来自hive -h:
--hiveconf <property=value> Use value for given property
--hivevar <key=value> Variable subsitution to apply to hive
commands. e.g. --hivevar A=B
Run Code Online (Sandbox Code Playgroud)
Mr.*_*ama 42
我觉得文档中的例子不够充分,所以这是我尝试回答的问题.
在一开始只有--hiveconf和变量替换不存在.
该--hiveconf选项允许用户从命令行设置Hive配置值,就是这样.所有Hive配置值都存储在hiveconf命名空间下,即hiveconf:mapred.reduce.tasks.这些值允许您控制映射器和缩减器的数量,如果应显示状态消息,以及脚本是否应继续出错.
后来,增加了变量替换.这意味着您现在可以使用${...}语法在查询中使用变量.但是,您可以从命令行设置的唯一变量是在hiveconf命名空间下使用--hiveconf,因此这是用户放置变量的位置.
将您的个人变量放在Hive配置命名空间下可能不会破坏任何内容,但它也不是好形式.后来,有人建议hivevar为用户变量添加一个名称空间,也可以在命令行中使用--hivevar.这意味着Hive配置值和用户定义变量之间的清晰分离.
总结:
该hiveconf命名空间和--hiveconf应该用来设置蜂巢配置值.
该hivevar命名空间,--hivevar应该被用来定义用户变量.
在hiveconf命名空间下设置用户变量可能不会破坏任何内容,但不建议这样做.
@Llama详细解释了它,并且两种类型的变量的访问方式不同.
该--hivevar变量是使用访问${var-name},而--hiveconf被访问${hiveconf:var-name}内部蜂巢.
例如,下面的示例访问变量并在配置单元中打印它的值.
hivevar:
hive --hivevar a='this is a' -e '!echo ${a};'
Run Code Online (Sandbox Code Playgroud)
输出:this is a
hiveconf:
hive --hiveconf a='this is a' -e '!echo ${hiveconf:a};'
Run Code Online (Sandbox Code Playgroud)
输出:this is a
小智 5
我们还可以在脚本的开头使用它们:
配置单元配置:
SET this_dt = CURRENT_DATE;
select ${hiveconf:this_dt};
Run Code Online (Sandbox Code Playgroud)
蜂巢变量:
set hivevar:cur_dt=current_date;
select ${hivevar:cur_dt};
Run Code Online (Sandbox Code Playgroud)