关于Hive中case when不准使用子查询的解决方法
在公司用Hive实现个规则的时候,遇到了要查询某个字段是否在另一张表中,大概情况就是
A表:
| id | value1 | value2 |
|---|---|---|
| 1 | 100 | 0 |
| 2 | 101 | 1 |
| 3 | 102 | 1 |
B表:
| value1 |
|---|
| 100 |
| 102 |
| 104 |
我要查询A表中当value2为0的时候直接输出0,为1的时候,判断value1是否在B表的value1中,如果在那么便输出0,不在便输出1,拿到第一反映是:
select
case
when value2 = 0 then 0
when value2 = 1 then
case
when value1 in (select value1 from B) then 0
else 1
end
end as value3
from A
结果Hive就报错了
Error: Error while compiling statement: FAILED: SemanticException Line 0:-1 Unsupported SubQuery Expression 'value1': Currently SubQuery expressions are only allowed as Where Clause predicates.
大概意思就是:目前的子查询表达式只允许为Where条件谓词。
于是我们就必须将其改为使用left join来解决。
select
case
when a.value2 = 0 then 0
when a.value2 = 1 then
case when
b.value1 is not null then 0
else 1
END
END as value3
from A a
left join
B b
on a.value1 = b.value1;
大功告成,对了,使用的Hive版本为1.1.0
关于Hive中case when不准使用子查询的解决方法的更多相关文章
- Oracle DB 使用子查询来解决查询
• 定义子查询 • 描述子查询可以解决的问题类型 • 列出子查询的类型 • 编写单行和多行子查询 • 子查询:类型.语法和准则 • 单行子查询: – 子查询中的组函数 – 带有子查询的HAVING ...
- Python3中使用HTMLTestRunner报No module named 'StringIO'解决方法
今天在学习使用HTMLTestRunner生成测试报告时遇到一个报错,如图所示: 网上搜索了下“No module named 'StringIO'”解决方法,原来我用的是Python 3.X版本,而 ...
- 检索 COM 类工厂中 CLSID 为 {10020200-E260-11CF-AE68-00AA004A34D5} 的组件时失败,解决方法如下:
检索 COM 类工厂中 CLSID 为 {10020200-E260-11CF-AE68-00AA004A34D5} 的组件时失败,解决方法如下: 第 一步:首先将msvcr71.dll, SQLD ...
- log4j中Spring控制台输出Debug级信息过多解决方法
log4j中Spring控制台输出Debug级信息过多解决方法 >>>>>>>>>>>>>>>>> ...
- universal image loader在listview/gridview中滚动时重复加载图片的问题及解决方法
在listview/gridview中使用UIL来display每个item的图片,当图片数量较多需要滑动滚动时会出现卡顿,而且加载过的图片再次上翻后依然会重复加载(显示设置好的加载中图片) 最近在使 ...
- MySQL中遇到的几种报错及其解决方法
MySQL中遇到的几种报错及其解决方法 1.[Err] 1064 - You have an error in your SQL syntax; check the manual that corre ...
- [datatable]关于在DataTable中执行DataTable.Select("条件")返回DataTable的解决方法
-- :09关于在DataTable中执行DataTable.Select("条件")返回DataTable的解决方法 在实际编程工程中,常常遇到这样的情况:DataTable并不 ...
- Eclipse中SVN修改的*星号没了,解决方法
Eclipse中SVN修改的*星号没了,解决方法 打开Preference 第一步:去掉外加的 ">" 第二步:勾选Outgoing changes 这样做之后," ...
- 在MonoGame中SetRenderTarget会把后备缓冲区清除的解决方法
在MonoGame中SetRenderTarget会把后备缓冲区清除的解决方法: 在构造函数中添加事件:graphics.PreparingDeviceSettings += Graphics_Pre ...
随机推荐
- 20191029校内ACM部分题解
20191029校内ACM部分题解 https://codeforces.com/group/32W4q7bPme/contest/257710 B数学 给定一个在\([0,1]\)等概率随机区间的随 ...
- apply call 用法
1.对象转数组 tips 先看怎么用 再研究方法原理 var obj = { 0: 'qian', 1: 'long', 2: 'chu', 3: 'tian', ...
- CodeForces - 1186 C. Vus the Cossack and Strings (异或)
Vus the Cossack has two binary strings, that is, strings that consist only of "0" and &quo ...
- k8s故障总结
1.run pod的时候提示"Back-off pulling image \"registry.access.redhat.com/rhel7/pod-infrastructur ...
- HRegion 分配与寻址
1.Region 分配 HMaster负责为Region 分配Region Server,一个Region 只能分配给一个Region server. HMaster中 记录: 哪些Regio ...
- visio基础
右下角是一个切换文件的按钮 也可以用ctrl+tab键进行切换 页面底部左边是一个页面的增加与切换的几个按钮 这是切换页面不是切换文件 右上角这个按钮是一个功能隐藏的按钮 左上角这个按钮可以自定义快速 ...
- 为什么IIS应用程序池回收时间默认被设置为1740分钟?
作者:斯科特 福赛斯/Scott Forsyth日期:2013/04/06地址:http://weblogs.asp.net/owscott/why-is-the-iis-default-app-po ...
- Angular 利用 marked.js 添加 Markdown + HTML 同时渲染的 Pipe
背景 最近在公司开发的一个项目需要在 Angular 上展示图文,并且需要同时支持 Markdown 和 HTML 对于同时支持 Markdown 和 HTML ,应该要分为编辑和渲染两部分考虑. 对 ...
- eclipse中部署web项目时报错java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener的解决方法
解决方案: 1.右键点击项目--选择Properties,选择Deployment Assembly,在右边点击Add按钮,在弹出的窗口中选择Java Build Path Entries 2.点击N ...
- $exLucas$学习笔记
本来不打算写了的,,,但是感$jio$理解起来还是有点儿难度的来着,,,$so$还是瞎写点儿趴$QAQ$ $exLucas$主要有三步: 1)唯一分解$mod$并预处理$p^{k}$以内的阶乘 2)计 ...