将变量设置为通过直线动态查询

时间:2017-01-31 00:16:09

标签: hive beeline

我需要通过直线将hive查询的输出用作另一个hive查询中的变量。像

这样的东西

select * from 123 where some_variable='select abc from xyz';

然而,hive不支持where子句中的子查询,所以我会通过shell命令来完成它。这很容易使用标准的hive cli,我会做这样的事情:

my_shell_var=$(hive -S -e "select abc from xyz;")

然后我会跑:

hive -e "select * from 123 where some_variable=$my_shell_var;"

然而,直线输出包括边框,因此my_shell_var被包围为

+------+ some output +------+

所以我无法将其插回到下一个查询中,因为额外的字符会更改我的字符串。有没有办法从直线输出中删除边界,或者是否有其他方法来实现我想要完全做的事情?

2 个答案:

答案 0 :(得分:1)

我找到了一种方法,你可以把:

--showHeader=false --outputformat=tsv2

在您的beeline cli命令即。

my_shell_var=$(beeline --showHeader=false --outputformat=tsv2 -e "your query")

然后使用shell将该变量放入下一个查询中:

beeline -e "select * from 123 where some_variable=$my_shell_var;"

输出没有任何标题(--showHeader = false)或边框(--outputformat = tsv2)。

答案 1 :(得分:0)

为什么不使用in子句?

从123中选择*,其中some_variable in(从xyz中选择abc)