2017-01-31 41 views
0

我需要在另一个蜂房查询中通过直线将蜂巢查询的输出用作变量。因此,像将变量设置为通过直线动态查询

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

但是蜂房不支持在where子句,所以我反而会做它通过一个shell命令的子查询。这是很容易的使用标准蜂巢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 +------+

所以我不能将它插回到下一个查询中,因为额外的字符会改变我的字符串。有没有一种方法可以从直线输出中删除边界,或者是否有另一种方法来完成我想要完成的任务?

回答

0

为什么不在子句中使用?

SELECT * FROM 123,其中some_variable中(选择XYZ ABC)

+0

Hive不支持在子句 – user3124181

+0

中的子查询它从hive 0.13 https://cwiki.apache.org/confluence/display/Hive/LanguageManual+SubQueries – hlagos

+0

啊有趣的是,它只支持IN,NOT IN ,EXISTS和NOT EXISTS我曾使用'=',但没有奏效。 – user3124181

0

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

--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)。