千家信息网

Hive中分组Limit非UDF方案的示例分析

发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,小编给大家分享一下Hive中分组Limit非UDF方案的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!描述: id
千家信息网最后更新 2026年11月03日Hive中分组Limit非UDF方案的示例分析

小编给大家分享一下Hive中分组Limit非UDF方案的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

描述: id (自增),type (aaa, bbb,ccc ,ddd),status(ok,error) 三个字段,每个type,筛选status='ok'的并且id最小的那一条记录。

Mysql:

create table having_test (id int(11), type varchar(50),status varchar(50));mysql> select * from having_test;+------+------+--------+| id   | type | status |+------+------+--------+|    1 | aaa  | ok     ||    2 | aaa  | error  ||    3 | aaa  | ok     ||    4 | bbb  | ok     ||    5 | ccc  | error  ||    6 | ccc  | ok     ||    7 | ddd  | error  |+------+------+--------+mysql> select * from having_test where status='ok' group by type having min(id);+------+------+--------+| id   | type | status |+------+------+--------+|    1 | aaa  | ok     ||    4 | bbb  | ok     ||    6 | ccc  | ok     |+------+------+--------+

mysql中很简单就实现了,先 group 然后having ,但是hive上不是完全支持sql语法的,在hive上会不会这么简单呢,答案是否定的。

HIVE 中:

create table tmp_wjk_having_test (id int,  type string, status string) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' ;load data local inpath '/tmp/load.csv' overwrite into table tmp_wjk_having_test;   select * from tmp_wjk_having_test; 1    aaa     ok                                                                                                                                        2    aaa     error                                                                                                                                     3    aaa     ok                                                                                                                                        4    bbb     ok                                                                                                                                        5    ccc     error                                                                                                                                    6    ccc     ok                                                                                                                                        7    ddd     error select * from tmp_wjk_having_test where status='ok' group by type having min(id);FAILED: Error in semantic analysis: Line 1:73 Expression not in GROUP BY key 'id'  # hive 不支持这种写法。还是要用子查询select * from tmp_wjk_having_test t1 join (    select min(id) id from tmp_wjk_having_test where status='ok' group by type) t2 on t1.id=t2.id ; 1     aaa     ok     14     bbb     ok     46     ccc     ok     6

子查询对于小数据集没有影响,但是应用到大数据上最好的是只过一边表,然后就拿出结果。所以还在想新的方案。

select *,min(id) ii from tmp_wjk_having_test where  status='ok'  group by type ;aaa     1     1bbb     4     4ccc     6     6

这种方案可行。问题点:

1. 为什么min(id)的条件明明是写到了select 中非where ,但是确起到了筛选的作用?

2. 为什么明明是select * ,min(id) 但是最后是拿到了3列(type , id , min(id) ), 如果写成 select type ,min(id) 就只拿到2列( type ,min(id) ) .

select type,min(id) ii from tmp_wjk_having_test where  status='ok'  group by type;aaa     1bbb     4ccc     6


++++更新 2014.11.11

3、一般可行方案:

2列 : select type,min(id) ii from tmp_wjk_having_test where  status='ok'  group by type;多列:select t1.* from having_test t1 join (select name,min(age) mm from having_test group by name ) t2 on t1.name = t2.name and t1.age=t2.mm ;

以上是"Hive中分组Limit非UDF方案的示例分析"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!

方案 篇文章 示例 分析 分组 可行 内容 数据 支持 查询 最小 三个 不怎么 作用 写法 大部分 字段 更多 最好 条件 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网科技资迅 网络科技有限互联网 互联网科技缩写 菲比寻常互联网科技 顺玮阁互联网科技 苏州大垚互联网科技 山东吉时兔互联网科技有限公司 汉立互联网科技有限公司联系电话 成都玖崟互联网科技有限公司乐商圈怎么样 天速互联网络科技有限公司 互联网大会黑科技排名 互联网和黑科技的看法 浙南科技城互联网大厦建设工程 有人说阿里系是互联网科技企业 西安有哪些互联网高科技企业 福建互联网展示科技馆设计 互联网科技机房 科技信息时代互联网发展 互联网科技博主张洲 山东亿川互联网科技有限责任公司 花魁咖啡 广州为想互联网科技有限公司 亿人帮互联网科技有限公司 江苏根荣互联网科技 互联网科技公司税收优惠 易互联网科技有限公司 互联网媒体平台算高科技产业 哈尔滨屹滨互联网科技有限公司 深圳育鹏互联网科技有限公司招聘 科技美学互联网 艺术
0