0

我需要通过直线将配置单元查询的输出用作另一个配置单元查询中的变量。所以像

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 +------+

所以我不能将它插入到下一个查询中,因为额外的字符会改变我的字符串。有没有办法从直线输出中删除边界,或者有没有替代方法来实现我想要做的事情?

4

2 回答 2

1

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

--showHeader=false --outputformat=tsv2

在您的直线 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)。

于 2017-01-31T16:00:29.290 回答
0

为什么不使用 in 子句?

select * from 123 where some_variable in (select abc from xyz)

于 2017-01-31T01:48:05.523 回答