Hive:根据最大值对列进行分组
Posted
技术标签:
【中文标题】Hive:根据最大值对列进行分组【英文标题】:Hive : group column based on max value 【发布时间】:2017-04-06 15:41:43 【问题描述】:我有一个表格,字段为
date value
10-02-1900 23
09-05-1901 22
10-03-1900 10
10-02-1901 24
....
我必须返回每年的最大值 即,
1900 23
1901 24
我尝试了以下查询,但回答错误。
SELECT YEAR(FROM_UNIXTIME(UNIX_TIMESTAMP(date,'dd-mm-yyyy'))) as date,MAX(value) FROM teb GROUP BY date;
谁能建议我做一个查询?
【问题讨论】:
为什么“日期”不是 ISO 格式/日期类型? 附言。MM
是几个月,mm
是几分钟
【参考方案1】:
选项 1
select year(from_unixtime(unix_timestamp(date,'dd-MM-yyyy'))) as year
,max(value) as max_value
from t
group by year(from_unixtime(unix_timestamp(date,'dd-MM-yyyy')))
;
选项 2
Hive 2.2.0 之前
set hive.groupby.orderby.position.alias=true;
从 Hive 2.2.0 开始
set hive.groupby.position.alias=true;
select year(from_unixtime(unix_timestamp(date,'dd-MM-yyyy'))) as date
,max(value)
from t
group by 1
;
+------+-----------+
| year | max_value |
+------+-----------+
| 1900 | 23 |
| 1901 | 24 |
+------+-----------+
附言
另一种提取年份的方法:
from_unixtime(unix_timestamp(date,'dd-MM-yyyy'),'yyyy')
【讨论】:
以上是关于Hive:根据最大值对列进行分组的主要内容,如果未能解决你的问题,请参考以下文章