繁体   English   中英

Hive 在 where 子句的子查询中查询不允许 >=

[英]Hive Query doesnt allow >= in subquery in the where clause

我有一个生成日期的表(umt_date),我需要在第二个查询中使用这个日期来获取大于等于 umt_date 表中日期的所有数据

umt_date
----------------------------
|processdate||processname|
----------------------------
| 2020-06-01 | A         |
----------------------------
| 2020-06-01 | B         | 

当我执行 sql

select * from main_table
where processdate >= (select processdate from umt_date where processname='A')

我收到以下错误

SQL 错误 [40000] [42000]:编译语句时出错:FAILED:SemanticException Line 0:-1 Unsupported SubQuery Expression 'processdate':只允许作为顶级连词的 SubQuery 表达式

由于我们没有任何公共列,因此我们也无法执行连接。 有什么替代方案?

如果子查询返回单行,使用交叉连接:

select m.* 
     from main_table m
          cross join (select processdate from umt_date where processname='A') t
where m.processdate >= t.processdate 

如果子查询返回多于一行,请在某些条件下使用 join。 在这种情况下,交叉连接不好,因为它会重复数据,尽管 WHERE 可能会过滤重复的行

您可以尝试使用WITH子句,如下所示

 WITH PROCESSA_SUBQ AS(
   select processdate from umt_date where processname='A'
 )
 SELECT a.* FROM main_table as a
 INNER JOIN
 PROCESSA_SUBQ as b
 ON 1=1    -- always true join condition, can be ignored.
 where a.processdate >= b.processdate

或者您也可以获得 boolean 条件检查:

WITH PROCESSA_SUBQ AS(
   select processdate from umt_date where processname='A'
 )
 SELECT X.* FROM (
 SELECT a.*, (a.processdate>=b.processdate) as check FROM main_table as a
 INNER JOIN
 PROCESSA_SUBQ as b
 ON 1=1  -- always true join condition, can be ignored.
 ) as X where X.check = true

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM