【问题标题】:Can a HIVE SELECT combine GROUP BY and ORDER BY?HIVE SELECT 可以结合 GROUP BY 和 ORDER BY 吗?
【发布时间】:2016-03-26 23:22:57
【问题描述】:

我在 Hive 中进行了一些相对简单的查询,似乎无法将 GROUP BYORDER BY 组合在一个语句中。我可以在GROUP BY 查询的临时表中进行选择,然后使用ORDER BY 在该表上进行选择,但我无法将它们组合在一起。

比如我有一个表a,可以执行这个查询:

SELECT place,count(*),sum(weight) from a group by place;

我可以执行这个查询:

create temporary table result (place string,count int,sumweight int);
insert overwrite table result 
      select place,count(*),sum(weight) from a group by place;
select * from result order by place;

但如果我尝试这个查询:

SELECT place,count(*),sum(weight) from a group by place order by place;

我收到此错误:

错误:编译语句时出错:FAILED: ParseException line 1:45 mismatched input '' Expecting \' near '_c0' in string literal (state=42000,code=40000)

【问题讨论】:

    标签: sql hadoop hive


    【解决方案1】:

    尝试使用group by 作为子查询,order by 作为外部查询,如下所示:

    SELECT 
        place, 
        cnt, 
        sum_ 
    FROM (
        SELECT 
            place, 
            count(*) as cnt, 
            sum(weight) as sum_ 
        FROM a 
        GROUP BY place
    ) a 
    ORDER BY place;
    

    【讨论】:

      【解决方案2】:

      像这样使用sort by

      SELECT place,count(*),sum(weight) from a group by place sort by place;
      

      【讨论】:

      • 我尝试了SORT BY 并得到了类似的结果。根据您引用的文档,SORT BYORDER BY 之间的唯一区别是 ORDER BY 保证总排序,而 SORT BY 对减速器的输入进行排序,因此总排序可能不一致。我错过了什么吗?
      • 我只是尝试帮助:) ...“order by”子句有一些限制。在严格模式下(即 hive.mapred.mode=strict),... ...执行 Hive 操作的模式。在严格模式下,一些有风险的查询是不允许运行的。例如,防止全表扫描(参见 HIVE-10454)并且 ORDER BY 需要 LIMIT 子句...
      • 感谢您的帮助!唉,添加 LIMIT 并没有帮助,但它确实有助于分成两个 SELECT。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-06-28
      • 2017-02-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-16
      相关资源
      最近更新 更多