1.需求:求每一年最大气温的那一天和温度
2.数据如下:
2014010216
2014010410
2012010609
2012010812
2012011023
2001010212
2001010411
2013010619
2013010812
2013011023
2008010216
2008010414
2007010619
2007010812
2007011023
2010010216
2010010410
2015010649
2015010812
2015011023
3.数据解释:
2010 0123 25表示在2010年01月23日的气温为25度
创建表
create table day(line string);
上传数据
load data local inpath '/home/hadoop/day' into table day;
创建新的表 接受 分割好的字段
create table day4 as
select substr(line,0,8) as day,cast(substr(line,9) as int) as temperature from day;
进行查询
这里的问题主要是处理 时间于string 的转换
unix_timestamp(day,'yyyyMMdd') 将string 转化为时间类型
from_unixtime(unix_timestamp(day,'yyyyMMdd'),'yyyy-MM-dd') 将时间类型 转化为 固定的string类型yyyy-MM-dd
year(string date) 获取年份
select day ,temperature from day4 da join
(select year(from_unixtime(unix_timestamp(day,'yyyyMMdd'),'yyyy-MM-dd')) year, max(temperature) as t from day4 group by year(from_unixtime(unix_timestamp(day,'yyyyMMdd'),'yyyy-MM-dd')) )
d on da.temperature=d.t and year(from_unixtime(unix_timestamp(da.day,'yyyyMMdd'),'yyyy-MM-dd'))=d.year ;