web-dev-qa-db-ja.com

HiveでNOT INを使用する方法

以下に示すような2つのテーブルがあるとします。さて、sqlが使用する結果を達成したい場合、insert into B where id not in(select id from A)は表Bに3 Georgeを挿入します。

これをハイブに実装する方法は?

表A

id  name      
1   Rahul     
2   Keshav    
3   George

表B

id  name      
1   Rahul     
2   Keshav    
4   Yogesh   
7
user8167344

NOT IN相関のないサブクエリを含むWHERE句は Hive 0.13以降でサポートされています は3年以上前に21でリリースされました2014年4月。

select * from A where id not in (select id from B where id is not null);

+----+--------+
| id |  name  |
+----+--------+
|  3 | George |
+----+--------+

以前のバージョンでは、外部テーブルの列はテーブル名/エイリアスで修飾する必要があります。

Hive> select * from A where id not in (select id from B where id is not null);
FAILED: SemanticException [Error 10249]: Line 1:22 Unsupported SubQuery Expression 'id': Correlating expression cannot contain unqualified column references.

Hive> select * from A where A.id not in (select id from B where id is not null);
OK
3   George

追伸.
NOT INを使用する場合は、is not nullは、関連する列にnull値が含まれていないことを100%確信がない限り、内部クエリに追加します。
クエリが結果を返さないようにするには、1つのnull値で十分です。