Hive中not in的正确使用

简介: Hive中not in的正确使用

背景:

前段时间在脚本开发的过程中,遇到了一个问题,就是not in查询出来的结果,代码分段查询是有结果的,但是通过not in查询出来却不存在,试了好几种办法以及百度查询了一下,最后发现了真正的原因,在这里分享给大家,给大家也避避雷。

一、问题原因

not in 没有查询出来的主要原因,还是因为Hive 不支持 where 子句中的子查询,所以not in的SQL语句是需要改写的,可以改写成not exists ,或者是left join 。

二、准备数据

1,建表

CREATE TABLE test.in_test1
(
id      varchar(10)
,name   varchar(10)
,sex    varchar(10)
,age    varchar(10)
);
CREATE TABLE test.in_test2
(
id      varchar(10)
,name   varchar(10)
,class    varchar(10)
,school    varchar(10)
);

2,插入数据

INSERT INTO test.in_test1 VALUES
('1','xiaoming','1','17'),
('2','xiaohua','0','23'),
('3','jack','1','12'),
('4','rose','0','28'),
('5','jenny','0','45'),
('6','judy','0','10'),
('7','wangwu','1','35')
;
INSERT INTO test.in_test2 VALUES
('1','xiaoming','3','花花高中'),
('2','xiaohua','5','北京大学'),
('3','jack','2','新民中学'),
('4','rose','1','清华大学')
;

3,查询数据

SELECT * FROM test.in_test1;

在这里插入图片描述

SELECT * FROM test.in_test2;

在这里插入图片描述

三、not in 改写为not exists

1,查询语句

SELECT * FROM test.in_test1 test1
WHERE 1=1
AND NOT exists (SELECT * FROM test.in_test2 test2 WHERE test1.name = test2.name)

2,查询结果

在这里插入图片描述

四、not in 改写为left join

1,查询语句

SELECT test1.* 
FROM test.in_test1 test1
LEFT JOIN test.in_test2 test2
ON test1.name = test2.name
WHERE 1=1
AND test2.name IS NULL

2,查询结果

在这里插入图片描述
分享到这里就结束了,我是喵,欢迎大家一起学习交流哦~~

相关文章
|
SQL Java 数据库连接
Hive教程(08)- JDBC操作Hive
Hive教程(08)- JDBC操作Hive
1545 0
|
分布式计算 负载均衡 数据处理
MapReduce中的Combiner函数的作用和使用场景
MapReduce中的Combiner函数的作用和使用场景
509 0
|
SQL 分布式计算 算法
Hive关联时丢失数据问题和常用的Hive SQL参数设置
针对结果的发生,本文从以下方面分析原因及提供解决方案: - 右表没有匹配的数据 - 关联键数据类型不匹配 - 受count列null值影响 - Hive版本问题,在某些版本中,左连可能导致右表为null - 数据倾斜 并在文末附属了`Hive SQL常用参数设置`的说明。
Hive关联时丢失数据问题和常用的Hive SQL参数设置
|
SQL 数据挖掘 数据库
HiveSQL分位数函数percentile()使用详解+实例代码
HiveSQL分位数函数percentile()使用详解+实例代码
5986 0
HiveSQL分位数函数percentile()使用详解+实例代码
|
SQL Oracle 关系型数据库
SQL 数据操作技巧:SELECT INTO、INSERT INTO SELECT 和 CASE 语
SELECT INTO 语句将数据从一个表复制到一个新表中。
499 1
|
C++ 开发者 编译器
C/C++经典面试50题(挑重点整理)下
重点整理了C/C++经典面试题
22780 0
|
DataX 数据格式 Java
DataX插件编写指南
DataX 是阿里巴巴集团内被广泛使用的离线数据同步工具/平台,实现包括 MySQL、Oracle、HDFS、Hive、OceanBase、HBase、OTS、ODPS 等各种异构数据源之间高效的数据同步功能。DataX采用了框架 + 插件 的模式,目前已开源,代码托管在github。
13676 1
|
存储 安全 Java
javax.security.auth.login.LoginException: Cannot locate KDC
`亲测可用,之前搜索了很多博客,啥样的都有,就是不介绍报错以及配置用处,根本不懂照抄那些配置是干啥的,稀里糊涂的按照博客搭完也跑不起来,因此记录这个。` `项目背景`:公司项目当前采用http协议+shiro+mysql的登录认证方式,而现在想支持ldap协议认证登录然后能够访问自己公司的项目网站。 `举例说明`:假设我们公司有自己的门户网站,现在我们收购了一家公司,他们数据库采用ldap存储用户数据,那么为了他们账户能登陆我们公司项目所以需要集成,而不是再把他们的账户重新在mysql再创建一遍,万一人家有1W个账户呢,不累死了且也不现实啊。
265 8
|
SQL 数据处理 HIVE
【Hive】写出Hive中split、coalesce及collect_list函数的用法?
【4月更文挑战第17天】【Hive】写出Hive中split、coalesce及collect_list函数的用法?
|
JSON Java 测试技术
jsonpath :从入门到精通
jsonpath :从入门到精通