Hive中分组Limit非UDF方案的示例分析
发表于:2025-02-06 作者:千家信息网编辑
千家信息网最后更新 2025年02月06日,小编给大家分享一下Hive中分组Limit非UDF方案的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!描述: id
千家信息网最后更新 2025年02月06日Hive中分组Limit非UDF方案的示例分析Mysql:
HIVE 中:
小编给大家分享一下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安全错误
数据库的锁怎样保障安全
1u服务器拆卸教程
服务器为什么总是蹦服
灵感笔记软件开发
远程桌面连接服务器繁忙
网络安全隐患和风险整改工作
计算机网络技术的企业情况
远程服务器怎么填
以人民为中心共筑网络安全防线
mysql登录和退出数据库
数据库左对齐补0
对日软件开发日语要求
软件开发的合作商
运行时监视器代理服务器禁用
怎么删除sql的数据库
青浦区正规数据库系统研发职能
ibm服务器安全模式下杀毒
服务器系统数据库类型
比亚迪软件开发岗招聘信息
山东省网络网络安全培训
东莞悦购互联网科技有限公司
搭建数据库服务器java
服务器管理工具有哪些功能
学网络安全报考什么专业
自由开源服务器管理软件是什么
查看数据库文件
h1z1夜间服务器
数据库民航销售管理系统
速达3000数据库还原
医美行业怎样利用网络技术
数据库有效规则输入0至100