Альтернатива Hive Query с предложением NOT IN - PullRequest
2 голосов
/ 28 февраля 2020

У меня есть следующий набор таблиц улья:

create table image_additions (
    customer_id STRING,
    image_key STRING,
    image_size STRING
);
create table image_removals (
   customer_id STRING,
   image_key STRING,
   image_size STRING
);
create table images_stored (
   customer_id STRING,
   image_key STRING,
   image_size STRING
);

И я хочу запустить вставку из запроса, подобного следующему:

insert into images_stored
select ia.customer_id, 
       ia.image_key, 
       ia.image_size 
from image_additions ia 
where ia.image_key not in 
       (select ir.image_key from image_removals ir);

Это производит декартово произведение, и улей не позволяет мне запустить его. Как я могу это сделать, используя альтернативный запрос?

1 Ответ

2 голосов
/ 28 февраля 2020

Использование левого соединения +, где ноль;

insert into images_stored
select ia.customer_id, 
       ia.image_key, 
       ia.image_size 
from image_additions ia 
     left join image_removals ir on ia.image_key=ir.image_key 
where ir.image_key is null;

Использование не существует:

insert into images_stored
select ia.customer_id, 
       ia.image_key, 
       ia.image_size 
from image_additions ia  
where not exists (select 1 from image_removals ir where ia.image_key=ir.image_key);
...