単一のキー列を持つ 2 つのテーブルがあります。テーブル a のキーは、テーブル b のすべてのキーのサブセットです。テーブル a にないキーをテーブル b から選択する必要があります。
Hive マニュアルからの引用は次のとおりです。 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);
しかし、私がする必要があるのは、「NOT IN;」を使用した最初の例です。残念ながら、この構文は Hive 0.13 ではサポートされていません。これは説明のみを目的としています。
SELECT a.key, a.value FROM a WHERE a.key NOT IN (SELECT b.key FROM B);
このサイトで推奨事項を検索したところ、次の例が表示されました。
SELECT a.key FROM a LEFT OUTER JOIN b ON a.key = b.key WHERE b.key IS NULL;
期待どおりに動作しません。a.key NOT in b と a.key IN b に参加すると、この方法では元の a を取得できません。太字のテキストに注意してください - b.key は WHERE に表示されるべきではありません。
じゃあどうすればいいの?他のトリックはありますか?ありがとう!
PS私は実際のデータを共有することはできません。これは非常に単純な例で、a のキーはすべて b に含まれ、a は b のサブセットです。