2017-01-31 43 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)。