我会传递变量, 我试试这个
SET x = 'user';
SELECT * FROM foo WHERE user == @user
但我有一个错误
然后我会尝试
set x='user';
select * from foo where user == '${hiveconf:x}'
但我有错误:
error while compiling statement: failed: parseexception line
1:38 missing eof at 'user' near ''''
有什么想法吗?
由于
答案 0 :(得分:2)
我认为这是你想要实现的目标的正确表示法:
SELECT * FROM foo WHERE user = ${hiveconf:x};
请注意,无需用引号括起${hiveconf:x}
,并且比较运算符为=
,而不是==
。从关系运算符Hive documentation开始,我们有两个摘录:
A = B. 如果表达式A等于表达式B则为TRUE,否则为FALSE。
A == B. 由于语法无效而失败。 SQL使用=,而不是==。
所以,鉴于以下愚蠢的测试表:
hive> SELECT user, fullname FROM foo;
OK
other_user Bar Bazfoo
user Foo Barbaz
Time taken: 0.228 seconds, Fetched: 2 row(s)
您的查询可能如下所示:
hive> SET x='user';
hive> SELECT * FROM foo WHERE user = ${hiveconf:x};
OK
user Foo Barbaz
Time taken: 0.229 seconds, Fetched: 1 row(s)