本关任务
基于EduCoder平台提供的初始数据集,统计湖南省当天的每分钟订单总数量。
编程要求
- 1、在 hive 数据库 trafficdata 中 数据库创建表 order_city_hour 。使用 Hive SQL 来统计湖南省 2019-03-07 日各市级当天每小时订单总数量(以订单时间 ordertime 为依据),并插入到 order_city_hour表。
- 2、 使用 Sqoop 工具将 Hive 中order_city_hour 表数据存放至 MySQL 数据库 trafficdata 的 order_city_hour表中。
过关代码
- 开启Hadoop服务,并使得 Hive 连接 MySQL 初始化。
start-all.sh
schematool -dbType mysql -initSchema
- 输入hive进入Hive命令行之后,先检查hive中是否存在trafficdata数据库以及数据库中是否存在cancelorder表以及createorder表(没有则创建并导入表格数据,为第一关任务)
- 进入trafficdata数据库
use trafficdata;
- 筛选cancelorder表中湖南省XX市的数据,将其订单小时数和地区存入t1表
create table t1 as select date_format(ordertime,'H') hour, substr(districtname,1,instr(districtname,'\u5e02')) city from cancelorder where districtname like '湖南省%' and instr(districtname,'\u5e02')==6 or instr(districtname,'\u5e02')==7 ;
- 筛选cancelorder表中湖南省XX自治州的数据,将其订单小时数和地区存入t2表
create table t2 as select date_format(ordertime,'H') hour, substr(districtname,1,instr(districtname,'\u5dde')) city from cancelorder where districtname like '湖南省%' and instr(districtname,'\u5dde')==13;
- 筛选createorder表中湖南省XX市的数据,将其订单小时数和地区存入t3表
create table t3 as select date_format(ordertime,'H') hour, substr(districtname,1,instr(districtname,'\u5e02')) city from createorder where districtname like '湖南省%' and instr(districtname,'\u5e02')==6 or instr(districtname,'\u5e02')==7 ;
- 筛选createorder表中湖南省XX自治州的数据,将其订单小时数和地区存入t4表
create table t4 as select date_format(ordertime,'H') hour, substr(districtname,1,instr(districtname,'\u5dde')) city from createorder where districtname like '湖南省%' and instr(districtname,'\u5dde')==13;
- 将t1、t2、t3、t4表进行合并汇总(这里全部存入表t1)
insert into t1 select * from t2;
insert into t1 select * from t3;
insert into t1 select * from t4;
- 从t1表中得到题意所需,即同时根据hour和city分组计数,并将结果暂存到tt表中;
create table tt as select hour,city,count(*) num from t1 group by hour,city;
- 在hive数据库中创建order_city_hour表:
create table order_city_hour(hours string,city string,num int) row format delimited fields terminated by '\t' stored as textfile ;
- 将最终结果插入order_city_hour表:
insert into order_city_hour select * from tt;
- 另开命令行(点击命令行三字右侧加号即可)
- 进入mysql命令行界面
mysql -h 127.0.0.1 -uroot -p123123
- 使用trafficdata数据库(没有则需创建)
use trafficdata;
- 在mysql数据库中创建order_city_hour表:
create table order_city_hour(hours varchar(255),city varchar(255),num int);
- 退出mysql命令行
exit
- 最后一步,将hive数据库中的order_city_hour表数据导出到mysql数据库中
sqoop export --connect jdbc:mysql://127.0.0.1:3306/trafficdata --username root --password 123123 --export-dir '/opt/hive/warehouse/trafficdata.db/order_city_hour' --table order_city_hour --fields-terminated-by '\t'
提交执行
过啦!!!
如有错误,欢迎大家指出纠正