hive子查询

Posted zzhangyuhang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了hive子查询相关的知识,希望对你有一定的参考价值。

hive中是不支持子查询的

但是并不意味这不支持in 或者 not in

in 或者not in 后边是定值的话是支持的

但是接定制是可以的

例如

select id from table not in(1,2,3)

但是这种是不支持的

select id from table1 not in (

select id from table2 where col1 = ‘a’

)

我们需要用left join来实现

(1)把table1和table2符合条件的数据进行连接

select t1.id as id1,t2.id as id2 from table1 t1 left join(

  select id from table2 where col1 = ‘a’

) t2 on t1.id = t2.id

这时符合条件的table1条目连接的table2条目为null

(2)然后根据in 或者 not in来筛选数据

where

in: id2 is not null

not in: id2 is null

或者使用left semi-join来实现(不支持right semi-join)

left-semi join 返回左边表满足 on 条件的记录

select id from table1 t1 left semi join table2 t2

on t1.id = t2.id and t2.col1 != ‘a’

 

left-semin join 要比join更高效,因为对于左表中一条制定的记录在右边表一旦匹配到就停止右边表的匹配

以上是关于hive子查询的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Hive 中使用子查询

不支持 Hive 子查询

将子查询转换为单个查询 Hive

Hive 0.13 中带有 LATERAL VIEW 的子查询

带有多个子查询的 SQL 错误 10249 Hive

hive子查询