Hive SQL中如何实现NOT EXISTS IN的等效功能?
Hive SQL实现查询表中独有的值
针对你的需求,要从T1中找出不存在于T2的值(即a、c),下面提供几种Hive中可行的实现方式:
方法1:LEFT JOIN 过滤空值
这是Hive里最常用的方案,兼容性和稳定性都很好:
SELECT t1.col FROM T1 t1 LEFT JOIN T2 t2 ON t1.col = t2.col WHERE t2.col IS NULL;
逻辑:将T1与T2按字段关联做左连接,T2中无匹配的记录会返回NULL,过滤这些NULL记录就能得到T1独有的值。
方法2:使用NOT IN
如果T2的目标字段没有NULL值,NOT IN可以直接使用:
SELECT col FROM T1 WHERE col NOT IN (SELECT col FROM T2);
注意:如果T2的col存在NULL值,这个语句会返回空结果,此时不建议使用。
方法3:使用NOT EXISTS
Hive支持NOT EXISTS语法,逻辑更直观,且不受T2字段NULL值影响:
SELECT col FROM T1 t1 WHERE NOT EXISTS ( SELECT 1 FROM T2 t2 WHERE t1.col = t2.col );
这个写法直接判断T1的每条记录是否在T2中存在,不存在则保留。
内容的提问来源于stack exchange,提问作者Yes_par_row
相关产品推荐
相关产品推荐

