【问题标题】:Hive. Over partition by vs Having-clause蜂巢。用 vs Have 子句过度划分
【发布时间】:2017-11-07 13:16:38
【问题描述】:

我有下表:

column0  column1      column2 column3 column4
sunny    hot         high    false   no
sunny    hot         high    true    no
overcast hot         high    false   yes
rainy    mild        high    false   yes
rainy    cool        normal  false   yes
rainy    cool        normal  true    no

我想使用 have-clause 和 OVER PARTITION BY 运行查询,我的查询是

SELECT column0,column1,column2,count(column0) OVER (PARTITION BY column2) AS cnt FROM FF_weatherdatase1  where column0="sunny"  having cnt>8

但蜂巢显示:

 HAVING specified without GROUP BY error.

请提供在不按条件分组的情况下使用 over partition by condition 运行 having 子句的方法,提前致谢。

【问题讨论】:

    标签: hive having-clause


    【解决方案1】:

    HAVING 只能与 GROUP BY 一起使用。对于您的查询,您可以在括号外使用where 条件。

    SELECT *
    FROM   (SELECT column0,
                   column1,
                   column2,
                   COUNT(column0)
                     OVER (
                       PARTITION BY column2) AS cnt
            FROM   ff_weatherdatase1
            WHERE  column0 = 'sunny') w
    WHERE  cnt > 8  
    

    【讨论】:

    • 感谢您的回复,我们可以使用 over partition used 代替有子句吗?
    • 这两者没有直接关系,这取决于您要达到的目标。如果您可以在问题中提供预期的输出,我们可能会根据您的需要提出更好的解决方案。
    • 当我们在 Apache spark 中使用 hive 上下文尝试先前的查询时,它可以工作,但是直接使用 hive 运行相同的查询得到:HAVING 指定而没有 GROUP BY 错误。而我们的 hive 版本是 hive-0.14.0
    猜你喜欢
    • 1970-01-01
    • 2021-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-20
    • 2015-06-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多