2017-01-31 2 views
0

ビーラインを通じて別のハイブクエリの変数としてハイブクエリの出力を使用する必要があります。だから、ビーイングを介して動的にクエリする変数を設定する

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

のようなものは、しかし、ハイブは句は私が代わりにシェルコマンドを通してそれを行うだろうどこにあるサブクエリをサポートしていません。

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

その後、私は実行します:my_shell_varが包囲されているので、

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

をしかしビーライン出力が国境を含み、これは、標準のハイブのCLIを使用して十分に簡単ですが、私はちょうどこのような何かをするだろうこのよう

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

としてだから、余分な文字が私の文字列を変更するので、私は次のクエリにこれを挿入することはできません。ビーライン出力からボーダーを削除する方法があるのですか、あるいは私が何をしようとしているのかを達成するための代替方法がありますか?

答えて

0

なぜin節を使用しないのですか?

は123からどこsome_variable

+0

ハイブではなくて、それはハイブ0.13 https://cwiki.apache.org/confluence/display/Hive/LanguageManual+SubQueries興味深い – user3124181

+0

にサブクエリをサポートしていません、EXISTS、NOT EXISTS私は '='を使用していたが、それはうまくいかなかった。 – hlagos

+0

ああから、それはINだけをサポートしていないwhere句 – user3124181

0

(xyzからABCを選択)で選択*私はあなたが置くことができる、方法を見つけた:あなたの真っすぐCLIコマンドをIEで

--showHeader=false --outputformat=tsv2

を。

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

次に、あなたの次のクエリにその変数を置くためにシェルを使用します。

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

出力は任意のヘッダ(--showHeader =偽)やボーダーを持たないであろう(--outputformat = tsv2)。

関連する問題