问题
我可以在运行时在配置单元中设置变量:
$ cat my_query.sql
select '${hiveconf:my_string_variable}'
$ hive -f my_query.sql -hiveconf my_string_variable=foobar
(返回)
foobar
但是如果我运行查询时忘记设置变量(否 -hiveconf
参数),配置单元将调用签名视为字符串:
$ hive -f my_query.sql
(返回)
${hiveconf:my_string_variable}
期望结果
我希望它给出一个错误(因为试图引用一个不存在的变量)。
我明白这不会发生,因为我的“变量”只是被当作一个字符串。所以,我在寻找其他方法,在设置变量时传递字符串,但在不存在变量时出错。
我试过:
使用前检查变量是否已设置
$ cat my_query2.sql
set my_variable; --hoping this errors out when hive realizes it's undefined
select '${hiveconf:my_string_variable'
$
$ hive -f my_query2.sql
(返回)
my_variable is undefined
OK
${hiveconf:my_string_variable
使用其他数据类型
如果字符串可以解释为int-literal,我可以让这个“工作”:
$ cat my_query3.sql
select cast(${hiveconf:my_string_variable} as string)
$
$ hive -f my_query3.sql --hiveconf my_string_variable=1234
(返回)
1234
但当我把一根真正的绳子放进去的时候它就失败了:
$ hive -f my_query3.sql --hiveconf my_string_variable=foobar
FAILED: SemanticException [Error 10004]: Line 1:12 Invalid table alias or column reference 'foobar': (possible column names are: )
暂无答案!
目前还没有任何答案,快来回答吧!