HiveでIn句を使用するにはどうすればよいですか?しかし、私はそれを行う方法を見つけていません。
これをHiveで行いたいです。誰かがHiveでこれを行う方法を知っているなら助けてください。
ありがとう、よろしく、Atul
https://cwiki.Apache.org/confluence/display/Hive/LanguageManual+Select :
「HiveはWHERE句でIN、EXISTS、またはサブクエリをサポートしていません。」
あなたが見たいと思うかもしれません: https://issues.Apache.org/jira/browse/Hive-801
準結合を使用できます( https://cwiki.Apache.org/Hive/languagemanual-joins.html ):
LEFT SEMI JOINは、相関するIN/EXISTSサブクエリセマンティクスを効率的な方法で実装します。 Hiveは現在IN/EXISTSサブクエリをサポートしていないため、LEFT SEMI JOINを使用してクエリを書き換えることができます。 LEFT SEMI JOINを使用する際の制限は、右側のテーブルは結合条件(ON句)でのみ参照し、WHERE句やSELECT句などでは参照しないことです。
SELECT a.key, a.value
FROM a
WHERE a.key in
(SELECT b.key
FROM B);
次のように書き換えることができます。
SELECT a.key, a.val
FROM a LEFT SEMI JOIN b on (a.key = b.key)
Hive 0.13はWHERE節でIN/EXISTSをサポートするようになりました。問題 https://issues.Apache.org/jira/browse/Hive-784 は4年後に解決されました:)
Hiveバージョン_0.7.1
_およびSELECT * FROM MYTABLE WHERE MYCOLUMN IN ('thisThing','thatThing');
を使用しています
列型STRING
でこれをテストしたので、上記のWawrzyniecのように、Hive言語マニュアルではサポートされていないと_LEFT SEMI JOIN
_ですが、私のテストではうまくいきました。
table t1(id,name)
とtable t2(id,name)
を想定
t2に存在するt1
からのIDのみをリストします(基本的にIN
句)
Hive>select a.id from t1 a left semi join t2 b on (a.id=b.id);
t1
にのみ存在し、t2にはないt1
のIDのみをリストします(基本的にNOT IN
句)
Hive>select a.id from t1 a left outer join t2 b on(a.id=b.id) where b.id is null;
Hiveは、Hive 0.13以降、制限の少ないIN/EXISTSステートメントをサポートしています。詳細については https://cwiki.Apache.org/confluence/display/Hive/LanguageManual+SubQueries を参照してください。
HiveはINを完全にサポートしています... WHERE句のサブクエリはサポートしていません
4年前からFacebookエンジニアからのオープン機能チケットがあります... https://issues.Apache.org/jira/browse/Hive-784?focusedCommentId=13579059