hive中对子查询如in,exists等支持
案例情况:同事使用公司数据探查跑一段代码,部分代码如下,报错,显示不支持in内的子查询。但是直接用虚拟机去跑的话代码没有任何报错,也出结果,很奇怪。
SELECT t1.SIGN_CODE AS bus_src
,t1.ORGANIZATION_NO
,t3.loan_amts
,t4.restSum
,NULL AS c1
,NULL AS c2
,NULL AS c3
,t5.draft_cnt
,t5.draft_amt
,t5.draft_amt AS draft_balance
,NULL AS c4
FROM FDM_SOR.SOR_EVT_TBL_FB_CUST t1
where t1.FB_CUST_CODE in (
select e.CUST_CODE from FDM_SOR.SOR_EVT_TBL_FB_CREDIT e where e.COMPANY_CODE=''
)
and t1.FB_CUST_CODE in (
select e.FB_CUST_CODE from FDM_SOR.SOR_EVT_TBL_FB_LOAN e where CURRENT_SETTLE_FLAG != 1
)
Hive对子查询的支持很有限。它只允许子查询出现在SELECT语句的FROM子句中。
如果发现Hive不支持你写的子查询,可以看看能不能把它写成连接操作。
例如,一个IN子查询可以写成一个半连接或连接。
如下,使用join去替换in内的子查询
SELECT t1.SIGN_CODE AS bus_src
,t1.ORGANIZATION_NO
,t1.loan_amts
,t1.restSum
,NULL AS c1
,NULL AS c2
,NULL AS c3
,t1.draft_cnt
,t1.draft_amt
,t1.draft_amt AS draft_balance
,NULL AS c4
FROM FDM_SOR.SOR_EVT_TBL_FB_CUST t1
inner join(
select e.CUST_CODE as FB_CUST_CODE from FDM_SOR.SOR_EVT_TBL_FB_CREDIT e where e.COMPANY_CODE=''
) a11
on t1.FB_CUST_CODE = a11.FB_CUST_CODE
inner join
(
select e.FB_CUST_CODE from FDM_SOR.SOR_EVT_TBL_FB_LOAN e where CURRENT_SETTLE_FLAG != 1
) c11
on t1.FB_CUST_CODE = c11.FB_CUST_CODE
既然该子查询在虚拟机跑的通的话,那就说明hive肯定是支持in内的查询的,但是为什么用web界面的探查去跑会报错呢。
在hive的官网说,hive在0.13版本以后开始支持更多的子查询,如in ,not in的子查询。
如果我们用的hive不支持如in,exists,not in等子查询,很可能是0.13版本之前的旧版本。

hive中对子查询如in,exists等支持的更多相关文章
- 2.9-2.10 hive中常见查询
一.查询语句 https://cwiki.apache.org/confluence/display/Hive/LanguageManual+Select 1.select语法 SELECT [ALL ...
- hive中如何查询除了其中某个字段剩余所有字段
想要将hive分区表中的某个分区复制到新的分区中,使用如下sql语句 insert overwrite table zcfw_sda.sda04_core_request_base_ratio_ifr ...
- Hive中SQL查询转换成MapReduce作业的过程
- hive中的一种假NULL现象
使用hive时,我们偶尔会遇到这样的问题,当你将结果输出到屏幕时,查出的数据往往显示为null,但是当你将结果输出到文本时,却显示为空(即未填充),这是为什么呢? 在hive中有一种假NULL,它看起 ...
- hive中sql解析出对应表和字段的调查
---恢复内容开始--- .阿里的druid中的sql parser有各种关系数据库sql的解析,但hive的不支持. druid初期的版本中是包含hive的,将以前版本中的hive dialect对 ...
- Hive中导入Amazon S3中的分区表数据的操作
Hive中创建S3的外部表 数据在S3存放的数据是按时间纬度存放的,每天的数据存放在各自的目录下,目录结构如下截图: 每个目录下面的数据是CSV文件,现在将其导入到Hive中进行查询,通过创建对应的表 ...
- hive中创建hive-json格式的表及查询
在hive中对于json的数据格式,可以使用get_json_object或json_tuple先解析然后查询. 也可以直接在hive中创建json格式的表结构,这样就可以直接查询,实战如下(hive ...
- HIVE中查询FAILED: Error in metadata: javax.jdo.JDOFatalDataStoreException: Communications link failure
有一天早上到公司用hive中查询数据,发现报错不能连接.通过检查发现mysql服务器没有启动,开启mysql服务器后查询正常.
- hive中的子查询改join操作(转)
这些子查询在oracle和mysql等数据库中都能执行,但是在hive中却不支持,但是我们可以把这些查询语句改为join操作: -- 1.子查询 select * from A a where a.u ...
随机推荐
- 数据科学中的R和Python: 30个免费数据资源网站
1 政府数据 Data.gov:这是美国政府收集的数据资源.声称有多达40万个数据集,包括了原始数据和地理空间格式数据.使用这些数据集需要注意的是:你要进行必要的清理工作,因为许多数据是字符型的或是有 ...
- 清晰理解redux中的
首先需要明白 Redux 的单一状态树的概念,所谓的单一状态树,就是指“所有的 state 都以一个对象树的形式储存在一个单一的 store 中.” 比如我们有这么一个状态树(或者你叫它状态对象也行) ...
- unity快捷放置物体操作
https://connect.unity.com/p/zui-jia-shi-jian-dui-xiang-fang-zhi-he-wu-li-xiao-guo 最佳实践系列文章将探讨我们在与客户合 ...
- Shell编程、part4
本节内容 1. shell函数 2. shell正则表达式 shell函数 shell中允许将一组命令集合或语句形成一段可用代码,这些代码块称为shell函数.给这段代码起个名字称为函数名,后续可以直 ...
- 微信小程序request请求封装,验签
1/ 公共文件util添加 request请求 //简单封装请求 function request(params, path, isShowLoading = true, goBack = false ...
- linux chgrp 只改文件目录的 属组
chgrp 组 文件或目录 [root@MongoDB ~]# chgrp incahome test.sh [root@MongoDB ~]# ll total -rw-------. root r ...
- 第八周课程总结-实验报告六(Java异常)
理解异常的基本概念: 掌握异常处理方法及熟悉常见异常的捕获方法 实验要求 练习捕获异常.声明异常.抛出异常的方法.熟悉try和catch子句的使用. 掌握自定义异常类的方法 实验内容 编写一个类,在其 ...
- MySQL数据表操作命令
mysql语句: 1.修改表名: rename table 旧表名 to 新表名; 2.修改字段类型: alter table 表名 modify column 字段名 字段类型(长度) 3.修改字段 ...
- 3.学习Dispatcher
3.学习Dispatcher 不管是WinForm应用程序还是WPF应用程序,实际上都是一个进程,一个进程可以包含多个线程,其中有一个是主线程,其余的是子线程. 在WPF或WinForm应用程序中,主 ...
- for XML path 使用技巧
FOR XML PATH 是sqlserver数据库的语法,能将查询出的数据转换成xml格式的数据. 首先,我们来看一个正常的查询: SELECT TOP 2 id, name,crDate FROM ...