Java錯題集(十二)
技術標籤:hive
Hive分析疫情資料
拿到的資料部分如下:
4月27日,黑龍江,境外輸入-不詳,0,45,0,黑龍江衛健委,https://m.thepaper.cn/newsDetail_forward_7160075,
4月27日,內蒙古,境外輸入-不詳,0,8,0,央視新聞,http://m.news.cctv.com/2020/04/27/ARTIxjwZSGhg1SXUn7Fv1ZsL200427.shtml,
4月27日,廣東,境外輸入-英國,1,0,0,央視新聞,http://m.news.cctv.com/2020/04/27/ARTIm0wxg5x059nT757vufcQ200427.shtml,
4月27日,浙江,境外輸入-不詳,0,1,0,央視新聞,http://m.news.cctv.com/2020/04/27/ARTIvZvXpkUgAEj09kd1a5tY200427.shtml,
4月27日,香港,0,19,0,國家衛健委,http://m.news.cctv.com/2020/04/27/ARTIeHOtUgep4DL4b6e9XHI2200427.shtml,
1、在hdfs根目錄下中建立一個目錄將以上疫情資料上傳到這個目錄中:
hadoop fs -mkdir /Hive_Data
hadoop fs -put /usr/local/Hive_Data/yiqing.csv /Hive_Data
2、在hive中建立資料庫名為: ods_yiqing_data
create database ods_yiqing_data;
use ods_yiqing_data;
3、建立一個hive外部表,欄位為以上疫情資料全部欄位 從hdfs 上載入資料:
create EXTERNAL table Hive_Data_EX
(
date_tine string,
shengfen string,
city string,
addpa int,
addout int,
adddeath int,
ins string,
ins1 string,
ins2 string,
ins3 string
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
location '/Hive_Data';
load data inpath '/Hive_Data/yiqing.csv' into table Hive_Data_EX;
結果截圖:
4、統計湖北省各市2月新增確診病例總數,按照總數降序排列
select sum(addpa) as addsum,city from
Hive_Data_EX where shengfen = '湖北' and date_tine like '2月%'
group by city order by addsum desc ;
5、統計檔案中安徽省合肥市每月新增確診病例總數,按照降序排列,
select sum(addpa) as asum,substr(date_tine,0,2) as m
from Hive_Data_EX
where city= '合肥市'
group by substr(date_tine,0,2) order by asum desc;
結果截圖:
6、統計檔案中湖北每月新增出院病例總數最多的前2個城市
SQL排序函式ROW_NUMBER() over() 晚於where group by order by執行 在我看來就是一個打標記的功能
select * from
(select substr(date_tine,0,2),city,sum(addout) as sout,ROW_NUMBER() over(partition by substr(date_tine,0,2) order by sum(addout) desc) as rk
from Hive_Data_EX
where shengfen = '湖北'
group by substr(date_tine,0,2),city) as a
where a.rk<3;