如何在Hive中安全设置STRING变量?未定义变量时触发报错
让Hive引用未定义变量时触发错误
刚好知道怎么解决这个问题!Hive默认的行为确实如你所说——当脚本里引用的hiveconf变量没被设置时,它会直接把${hiveconf:xxx}作为字符串返回,而不是抛出错误。要实现你想要的“未定义变量就报错”的效果,只需要开启Hive的变量严格检查即可,有两种简单的方式:
方式一:执行脚本时临时开启检查
在启动Hive的命令里额外加上-hiveconf hive.strict.checks.variables=true参数就行。比如:
$ hive -f my_query.sql -hiveconf hive.strict.checks.variables=true
这时候如果没设置my_string_variable,Hive会直接抛出语义错误终止执行,错误信息大概是这样的:
Error: Error while compiling statement: FAILED: SemanticException [Error 10096]: Failed to replace variables in Hive query. Undefined variable in query: my_string_variable (state=42000,code=10096)
方式二:在SQL脚本里全局配置
如果你不想每次执行都加参数,可以直接把检查配置写在你的SQL脚本开头,这样不管怎么执行脚本都会生效:
SET hive.strict.checks.variables=true; select '${hiveconf:my_string_variable}'
这样只要my_string_variable没被定义,脚本一执行就会触发错误,再也不会返回那个占位符字符串了。
小补充
这个hive.strict.checks.variables参数默认是false(宽松模式),开启成true后,Hive会在编译查询的阶段就扫描所有引用的变量,一旦发现未定义的就立刻报错,完全符合你期望的行为~
内容的提问来源于stack exchange,提问作者combinatorist
相关产品推荐
相关产品推荐

