sql - 使用 NOT IN 子句替代 Hive 查询
问题描述
我有以下一组蜂巢表:
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);
这会产生一个笛卡尔积,而 hive 不允许我运行它。如何使用替代查询来做到这一点?
解决方案
使用左连接 + where is null;
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);
推荐阅读
- javascript - 有没有办法改变按键上按钮的css?
- python - 如何使用 Python 中已定义函数的打印语句
- stripe-payments - 使用 Stripe Billing API 自动生成付款和计划
- c++ - 给定岛的外围标记其在矩阵中的内部(算法)
- javascript - 更新 Mongo DB 中的嵌套数组元素值
- linux - 在EC2上运行大数据集,担心存储
- java - 如果我使用 @Produces(MediaType.APPLICATION_XML) 在 Jersey Web 应用程序中面临 NullPointerException
- sql - 如何根据日期计算查询中的总数?
- java - 如果需要子类型引用,如何处理基类的集合,而不保存两次?
- elasticsearch - 如何在我的文档中在 elasticsearch 中创建复合主键