千家信息网

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

发表于:2025-12-03 作者:千家信息网编辑
千家信息网最后更新 2025年12月03日,小编给大家分享一下Hive中分组Limit非UDF方案的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!描述: id
千家信息网最后更新 2025年12月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安全错误 数据库的锁怎样保障安全 江苏机架服务器批发云主机 学编程先学数据库还是学语言 如何判断自己适合软件开发 数据库er图矩形菱形椭圆形 ic卡智能水表数据库打不开 红警玩的过程服务器中途卡机 小米智能插座 网络安全 信创数据库技术 税务网络安全应知应会 多级分销系统软件开发 网络安全与中国好网民 我的世界服务器空岛 网络安全2017调查 云软件开发技术是什么意思 如何查看网线服务器是哪个国家的 怎么把游戏服务器时间改了 重庆玖益互联网科技有限公司 会计制度设计有软件开发公司 软件开发职业发展路线 3ds联机服务器会关闭吗 上海服务器风扇批发 江南大学网络教育数据库考试 机车兽数据库 文档管理软件开发 广州九发远程互联网医疗科技 dubbo服务器推送 网络安全人员具备条件 网络安全威胁实时地图怎么看 阿里云服务器发票长什么样子 应用软件开发成本估算方法
0