以下に示すような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
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値で十分です。