0

有没有办法在 HiveQL 中做到这一点:

SELECT ......    

from
        default.thm_renta_produits_jour rpj
      WHERE
          rpj.co_societe = '${hiveconf:in_co_societe}'
      AND rpj.dt_jour >= (SELECT MIN(dt_jour) FROM default.calendrier WHERE co_an_semaine = '${hiveconf:in_co_an_sem}')

因为当我这样做时,我得到了这个错误:

FAILED: ParseException line 51:26 cannot recognize input near 'SELECT' 'MIN' '(' in expression specification

谢谢,

4

3 回答 3

3

Hive 不支持 where 子句中的子查询,它仅支持from 子句中的子查询

于 2013-07-05T10:07:16.390 回答
0

Hive 不支持WHERE子句中的子查询。也许您可以通过将子查询移动到这样的JOIN子句来解决此问题:

SELECT 
    rpj.*
FROM
    default.thm_renta_produits_jour rpj
JOIN
   (   SELECT MIN(dt_jour) AS min_dt_jour 
       FROM default.calendrier 
       WHERE co_an_semaine = '${hiveconf:in_co_an_sem}'
   ) m
WHERE
    rpj.co_societe = '${hiveconf:in_co_societe}'
    AND rpj.dt_jour >= m.min_dt_jour;

希望有帮助。

于 2013-07-08T09:38:47.177 回答
0

我知道这是一篇旧帖子,但以前的答案现在已经过时了。较新版本的 Hive (0.13+) 支持 where 子句的子查询,因此您的查询应该运行。

https://cwiki.apache.org/confluence/display/Hive/LanguageManual+SubQueries#LanguageManualSubQueries-SubqueriesintheWHEREClause

于 2017-12-01T16:29:46.023 回答