Hive实战 | 蚂蚁森林案例

本文通过蚂蚁森林案例,运用Hive进行数据处理。包括统计用户申领'p002-沙柳'的排名及差值,以及分析连续多日低碳行为的用户流水。涉及创建表、数据导入、本地模式操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前两天学习了 Hive,本篇博客将以案例的形式对之前学过的知识进行应用。

场景描述

本案例的场景是关于蚂蚁森林,没错,就是支付宝里的蚂蚁森林。首先这里有两张表。

  • 一张记录了用户每天的蚂蚁森林低碳生活领取的记录流水。
table_name: user_low_carbon
字段如下:
user_id   data_dt   low_carbon
用户        日期    	减少碳排放(g)
u_002      2017/1/2       150
u_002      2017/1/2       70
u_002      2017/1/3       30
u_002      2017/1/3       80
u_002      2017/1/4       150
  • 另外一张是蚂蚁森林植物换购表,用于记录申领环保植物所需要减少的碳排放量。
table_name: plant_carbon
字段如下:
plant_id    plant_name  low_carbon
植物编号    	植物名      换购植物所需的碳
p001		梭梭树			17900
p002		沙柳				19680
p003		樟子树			146210
p004		胡杨				215680

准备数据

先不管题目是什么,首先要做的是准备好数据,分为两步:建表和导入数据。

创建表
create table user_low_carbon(user_id string, data_dt string, low_carbon int) row format delimited fields terminated by '\t';
create table plant_carbon(plant_id string, plant_name string, low_carbon int) row format delimited fields terminated by '\t';
载入数据

从本地导入数据。

load data local inpath '/opt/module/data/user_low_carbon.txt' into table user_low carbon;
本地模式

设置本地模式,可以让速度更快一些。

set hive.exec.model.local.auto = true;

题目描述

1. 蚂蚁森林植物申领统计

问题:
假设2017年1月1日开始记录低碳数据(user_low_carbon),假设2017年10月1日之前满足申领条件的用户都申领了一棵“p004-胡杨”,剩余的能量全部用来领取“p002-沙柳”。

统计在10月1日累计申领“p002-沙柳”排名前10的用户信息;以及他比后一名多领了几棵“p002-沙柳”。

得到的统计结果样式表如下:

user_id plant_count less_count
u_101   1000        100
u_102   900         400
u_103   500         --

思路:
计算在这个时间段内所有用户的低碳总量,减去胡杨消耗的能量,然后剩下的能量除以沙柳的能量,向下取整。

① 统计每个用户截止到2017-10-01总低碳量

select
	user_id, sum(low_carbon) as sum_low_carbon
from 
	user_low_carbon
where
	date_format(regexp_replace(data_dt, '/','-'),'yyyy-MM') < '2017-10'
group by
	user_id; t1

② 取出胡杨的能量数

s
课程目录: 第1章:Hive基本架构及环境部署 1.MapReduce分析与SQL分析对比 2.Hive的介绍及其发展 3.Hive的安装部署及启动 4.Hive的基本架构讲解 5.安装MySQL作为元数据库存储 6.配置Hive使用MySQL作为元数据库存储 7.Hive中基本命令的使用 8.Hive中常用的属性配置 9.Hive中常用的交互式命令 10Hive数据库的管理与使用 11.Hive中表的管理与使用 12.Hive中外部表的使用 第2章:Hive 常用DML、UDF及连接方式 13.Hive中分区表的介绍 14.Hive中分区表的创建及使用 15.Hive中数据导入的6种方式及其应用场景 16.Hive中数据导出的4种方式及表的导入导出 17.Hive中HQL的基本语法(一) 18.Hive中HQL的基本语法(二) 19.Hive中order by、sort by、distribute by与cluster by的使用 20.Hive中分析函数与窗口函数 21.Hive中UDF的介绍 22.Hive中使用自定义UDF实现日期格式转换 23. HiveServer2的介绍及三种连接方式 24.Hive元数据、fetch task和严格模式的介绍 第3章:Sqoop Sqoop及用户行为分析案例 25.CDH版本框架的介绍 26. CDH版本框架的环境部署 27.Sqoop的介绍及其实现原理 28.Sqoop的安装部署及连接测试 29.Sqoop将MySQL数据导入到HDFS(一) 30.Sqoop将MySQL数据导入到HDFS(二) 31.Sqoop中的增量导入与Sqoop job 32.Sqoop将MySQL数据导入Hive表中 33.Sqoop的导出及脚本中使用的方式 34.案例分析-动态分区的实现 35.案例分析-源表的分区加载创建 36.案例分析-指标分析使用Sqoop导出 第4章:Hive复杂用户行为案例分析及优化 37.自动批量加载数据到hive 38.Hive表批量加载数据的脚本实现(一) 39.Hive表批量加载数据的脚本实现(二) 40.HIve中的case when、cast及unix_timestamp的使用 41.复杂日志分析-需求分析 42.复杂日志分析-需求字段讲解及过滤 43.复杂日志分析-字段提取及临时表的创建 44.复杂日志分析-指标结果的分析实现 45.Hive中数据文件的存储格式介绍及对比 46.常见的压缩格式及MapReduce的压缩介绍 47.Hadoop中编译配置Snappy压缩 48.Hadoop及Hive配置支持snappy压缩 49.Hive中的常见调优 50.Hive中的数据倾斜及解决方案-三种join方式 51.Hive中的数据倾斜及解决方案-group by 52.Hive中使用正则加载数据 53. Hive中使用Python脚本进行预处理 第5章:Zeus任务资源调度工具 54.资源任务调度框架介绍 55.企业中常见的任务调度框架 56.Zeus的介绍及基本实现原理 57.Zeus安装部署-基本环境配置 58.Zeus安装部署-配置文件的修改 59.Zeus安装部署-编译打包 60.Zeus平台的调度使用 61.Zeus平台实现任务调度应用(一) 62.Zeus平台实现任务调度应用(二) 63.Zeus平台实现任务调度应用(三)
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值