第6关:湖南省各市级当天各时间段订单总数量——Hive实战

本文介绍了如何使用HiveSQL在EduCoder平台上统计2019年3月7日湖南省各市级每小时订单量,并将结果存储在order_city_hour表中,随后利用Sqoop将数据同步到MySQL数据库。步骤包括创建表、数据筛选、合并、计数和导出。
摘要由CSDN通过智能技术生成

本关任务

基于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'

提交执行

过啦!!!
在这里插入图片描述

如有错误,欢迎大家指出纠正

  • 7
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值