在配置单元中安全地设置字符串变量?

axr492tv  于 2021-06-26  发布在  Hive
关注(0)|答案(0)|浏览(205)

问题

我可以在运行时在配置单元中设置变量:

$ 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: )

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题