当前位置: 首页 > news >正文

Hive SQL 实战:电商销售数据分析全流程案例

如果要问当下是哪个行业最热门,其实大多数人应该会想到电商,毕竟大多数人可能每天都会花点时间在各种短视频等平台,其中会充斥着很多商品,这就是我们的电商(如果我的说辞有不对的大家可以指正)。

那么在电商行业中,每日都会产生海量的销售数据,如何从这些数据中挖掘出有价值的信息,成为企业提升竞争力的关键。Hive SQL 凭借其强大的大数据处理能力,能够高效地完成电商销售数据的分析工作。接下来,我们将通过一个完整的电商销售数据分析案例,深入了解 Hive SQL 的实际应用。​

一、案例背景与数据准备​

假设我们是一家电商企业,拥有多维度的销售数据,包括订单信息、用户信息、商品信息等。为了简化案例,我们主要聚焦于以下三个核心数据表:​

  1. 订单表(orders):记录每一笔订单的详细信息,包括订单编号、用户编号、订单日期、订单金额、订单状态等。​
  1. 用户表(users):存储用户的基本信息,如用户编号、用户姓名、用户年龄、用户性别、用户所在地区等。​
  1. 商品表(products):包含商品的相关信息,例如商品编号、商品名称、商品类别、商品价格等。​

我们提前准备好模拟数据,以 CSV 文件的形式存储在本地。以下是部分示例数据(实际数据量会更大):​

订单表(orders.csv)

order_id

user_id

order_date

order_amount

order_status

1001

101

2025-06-01

199.00

已完成

1002

102

2025-06-02

299.00

已完成

1003

101

2025-06-03

99.00

已取消

1004

103

2025-06-04

399.00

已完成

用户表(users.csv)

user_id

user_name

user_age

user_gender

user_region

101

张三

28

华北

102

李四

32

华东

103

王五

25

华南

商品表(products.csv)

product_id

product_name

product_category

product_price

2001

智能手机

电子产品

4999.00

2002

纯棉 T 恤

服装

99.00

2003

蓝牙耳机

电子产品

299.00

二、Hive 表的创建

在 Hive 中创建与上述数据对应的表,我们先创建数据库用于存放这些表:

CREATE DATABASE IF NOT EXISTS e_commerce;
USE e_commerce;
  • CREATE DATABASE
    这是 SQL 中用于创建新数据库的关键字组合。

  • IF NOT EXISTS(可选)
    这是一个保护机制,表示如果数据库已经存在,则不再重复创建,避免报错。

  • e_commerce
    是你要创建的数据库名称。你可以根据项目需求更改这个名称,比如 my_store, logistics_db 等。

  • ;
    表示 SQL 语句结束。

✅ 示例扩展:

如果我们这里不加 IF NOT EXISTS,那么当数据库已存在时(数据库名称重复)会报错。

🔍 拆分解析:(第二行)

  • USE
    是 MySQL 中用来选择数据库的关键字。

  • e_commerce
    是要切换到的目标数据库名称。

  • ;
    结束符。

⚠️ 注意事项:

  • 如果你没有先创建数据库就执行 USE e_commerce;,MySQL 会提示错误:
    ERROR 1049 (42000): Unknown database 'e_commerce'
  • 所以必须确保在 USE 之前已经用 CREATE DATABASE 创建了数据库。

1. 创建订单表(orders)

CREATE TABLE orders (order_id INT,user_id INT,order_date DATE,order_amount DECIMAL(10, 2),order_status VARCHAR(20)
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
STORED AS TEXTFILE;

🔍 功能说明:

这部分是标准的建表语句,定义了表名 orders 和它的字段结构。

  • CREATE TABLE orders: 创建一个名为 orders 的表。
  • 表中包含以下字段:
    • order_id INT: 订单ID,整型
    • user_id INT: 用户ID,整型
    • order_date DATE: 下单日期,日期类型
    • order_amount DECIMAL(10, 2): 订单金额,最多10位数,保留两位小数
    • order_status VARCHAR(20): 订单状态,最大长度为20的字符串

⚠️ 注意:Hive 中没有 VARCHAR 类型,实际使用的是 STRING,但某些 Hive 版本兼容 VARCHAR(n) 并将其转换为 STRING。建议统一使用 STRING

 

🔍 功能说明:

这部分告诉 Hive,这个表的数据是按行存储的,每一行的字段之间用逗号 , 分隔。

  • ROW FORMAT DELIMITED: 使用“行格式”为分隔符格式(即每行是一个记录)
  • FIELDS TERMINATED BY ',': 字段之间用英文逗号分隔,适用于 CSV 文件

 

🔍 功能说明:

这一句表示该表的数据将以 文本文件 格式进行存储,这是 Hive 默认的存储格式。

  • TEXTFILE: 数据以纯文本形式存储,通常用于 CSV、TSV 等明文文件
  • 其他可选格式还有:
    • ORC
    • PARQUET
    • AVRO
    • RCFILE
    • SEQUENCEFILE

这些格式在大数据处理中具有更高的压缩率和查询性能。

 

✅ 总结表格对比

部分内容含义
CREATE TABLEorders创建一个名为 orders 的表
字段定义order_iduser_idorder_dateorder_amountorder_status定义字段及其数据类型
ROW FORMAT DELIMITED每一行是一条记录
FIELDS TERMINATED BY ','字段之间用逗号分隔
STORED AS TEXTFILE存储格式为文本文件

2. 创建用户表(users) 

CREATE TABLE users (user_id INT,user_name VARCHAR(50),user_age INT,user_gender VARCHAR(10),user_region VARCHAR(20)
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
STORED AS TEXTFILE;

🧩 含义:

  • 创建一个名为 users 的表。
  • 表中包含以下字段及其数据类型:
    • user_id: 用户ID,整型(INT)
    • user_name: 用户名,最大长度为50的字符串(VARCHAR)
    • user_age: 用户年龄,整型
    • user_gender: 性别,最大长度为10的字符串
    • user_region: 所属地区,最大长度为20的字符串

💡 Hive 中的 VARCHAR(n)

  • Hive 并不真正支持 VARCHAR(n) 类型,它其实是模拟实现的,最终会被转换成 STRING 类型。
  • 推荐统一使用 STRING 类型来代替 VARCHAR,以避免兼容性问题。

✅ 最佳的写法(Hive 风格):

CREATE TABLE users (user_id INT,user_name STRING,user_age INT,user_gender STRING,user_region STRING
)

3. 创建商品表(products)

 

CREATE TABLE products (product_id INT,product_name VARCHAR(100),product_category VARCHAR(50),product_price DECIMAL(10, 2)
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
STOED AS TEXTFILE;

三、数据加载​

将本地准备好的 CSV 数据文件加载到对应的 Hive 表中。

LOAD DATA LOCAL INPATH '/path/to/orders.csv' INTO TABLE orders;
LOAD DATA LOCAL INPATH '/path/to/users.csv' INTO TABLE users;
LOAD DATA LOCAL INPATH '/path/to/products.csv' INTO TABLE products;

这里的/path/to/需要替换为实际的文件存储路径。数据加载完成后,我们可以使用SELECT * FROM table_name LIMIT 10;语句查看表中部分数据,确认数据加载是否正确。​

四、数据分析与查询​

1. 统计每个月的订单总金额和订单数量

SELECTYEAR(order_date) AS order_year,MONTH(order_date) AS order_month,SUM(order_amount) AS total_amount,COUNT(order_id) AS order_count
FROMorders
GROUP BYYEAR(order_date), MONTH(order_date)
ORDER BYorder_year, order_month;

🔍 含义:

orders 表中选出以下字段:

  • YEAR(order_date):提取订单日期的年份,别名为 order_year
  • MONTH(order_date):提取订单日期的月份,别名为 order_month
  • SUM(order_amount):对每个月的订单金额求和,别名为 total_amount
  • COUNT(order_id):统计每个月的订单数量,别名为 order_count

💡 这些字段通常用于做数据报表、趋势分析、销售统计等。

 

🔍 含义:

指定数据来源于表 orders,也就是之前创建的订单表。

🔍 含义:

按照 年份 + 月份 对订单数据进行分组,也就是说:

  • 所有在 2024年1月 下单的数据会被归为一组
  • 然后在这组内计算总销售额(SUM(order_amount))和订单数(COUNT(order_id)

 

🔍 含义:

将最终结果按照 order_yearorder_month 升序排列,让输出结果更直观、有序。

例如:2023 年 1 月 → 2023 年 2 月 → ... → 2024 年 1 月 ...

🧠 总结表格
部分内容功能说明
SELECT提取年、月、总金额、订单数定义要显示的字段
FROMorders指定数据来源
GROUP BYYEARMONTH按照年月分组聚合数据
ORDER BYorder_yearorder_month按时间顺序排序输出

📊 示例输出(假设数据如下):
order_yearorder_monthtotal_amountorder_count
202315000.0020
202327500.0025
202336800.0022

💡 扩展建议

✅ 加上地区维度(用户地区)

SELECTYEAR(o.order_date) AS order_year,MONTH(o.order_date) AS order_month,u.user_region,SUM(o.order_amount) AS total_amount,COUNT(o.order_id) AS order_count
FROMorders o
JOINusers u ON o.user_id = u.user_id
GROUP BYYEAR(o.order_date), MONTH(o.order_date), u.user_region
ORDER BYorder_year, order_month, user_region;
功能关键代码
显示地区信息u.user_region
按地区分组统计GROUP BY u.user_region
按地区排序显示ORDER BY user_region

2. 找出最受欢迎的商品(按订单数量统计)

 

SELECTp.product_name,COUNT(o.order_id) AS order_count
FROMorders o
JOINproducts p ON o.product_id = p.product_id
GROUP BYp.product_name
ORDER BYorder_count DESC
LIMIT 5;

首先这是一个非常经典的一个查询语句,个人感觉如果哪天涉及到电商方向的数分的话应该会问到(偷偷记下)

🧠 总结表格
部分内容功能说明
SELECTp.product_nameCOUNT(o.order_id)显示商品名和订单数量
FROM ... JOINorders o JOIN products p关联订单表和商品表
GROUP BYp.product_name按商品名分组统计
ORDER BYorder_count DESC按订单数从高到低排序
LIMIT5只显示前5个结果

此查询通过内连接(JOIN)将订单表和商品表关联起来,根据商品名称分组,统计每个商品的订单数量,并按订单数量降序排列,取前 5 条数据,这样就能快速找到最受欢迎的 5 种商品。

3. 分析不同地区用户的平均订单金额 

SELECTu.user_region,AVG(o.order_amount) AS average_amount
FROMorders o
JOINusers u ON o.user_id = u.user_id
GROUP BYu.user_region
ORDER BYaverage_amount DESC;
🧠 总结表格
部分内容功能说明
SELECTu.user_regionAVG(o.order_amount)显示地区和平均订单金额
FROM ... JOINorders o JOIN users u关联订单表和用户表
GROUP BYu.user_region按地区分组统计
ORDER BYaverage_amount DESC按平均金额从高到低排序

4. 统计每个用户的累计订单金额,并按金额进行排名

SELECTu.user_name,SUM(o.order_amount) AS total_amount,RANK() OVER (ORDER BY SUM(o.order_amount) DESC) AS amount_rank
FROMorders o
JOINusers u ON o.user_id = u.user_id
GROUP BYu.user_name
ORDER BYamount_rank;

 

🧠 总结表格
部分内容功能说明
SELECTuser_nametotal_amountamount_rank显示用户名、总消费额、消费排名
FROM ... JOINorders o JOIN users u关联订单表和用户表
GROUP BYu.user_name按用户名分组统计消费总额
RANK() OVER (...)排名函数根据总消费额降序排名
ORDER BYamount_rank按排名顺序展示数据

这里使用了窗口函数RANK(),先将订单表和用户表连接,按用户姓名分组计算每个用户的累计订单金额,然后通过RANK()函数对用户按累计金额进行排名,方便我们了解用户的消费贡献情况。​

五、数据可视化与结果应用​

通过上述查询,我们得到了丰富的分析结果。为了更直观地展示数据,我们可以将查询结果导出到 Excel、Tableau、PowerBI 等数据可视化工具中,生成柱状图、折线图、饼图等图表。例如,将每个月的订单总金额和订单数量生成折线图,能清晰地看到销售趋势;将不同地区用户的平均订单金额生成柱状图,便于对比各地区的消费差异。​

这些分析结果可以为企业的决策提供有力支持。比如,根据最受欢迎的商品分析结果,企业可以调整库存策略,增加热门商品的备货量;通过不同地区用户的消费分析,制定针对性的市场推广策略,在消费能力高的地区加大营销投入等。​

六、总结​

通过这个电商销售数据分析案例,我带你简单又完整地体验了使用 Hive SQL 进行数据处理的全流程,包括数据准备、建表、数据加载、复杂查询分析以及结果应用。Hive SQL 强大的查询和分析能力,使其成为处理大数据的得力工具。在实际工作中,我们可以根据具体业务需求,灵活运用 Hive SQL 的各种语法和功能,从海量数据中挖掘出有价值的信息,为企业发展提供数据驱动的决策依据。

 

http://www.lryc.cn/news/578131.html

相关文章:

  • 大数据轻量化流批一体架构探索实践(一)
  • 【数据分析】环境数据降维与聚类分析教程:从PCA到可视化
  • [特殊字符]【联邦学习实战】用 PyTorch 从 0 搭建一个最简单的联邦学习系统(含完整代码)
  • ubuntu下免sudo执行docker
  • spring-ai-alibaba官方 Playground 示例
  • 根据OS自动加载不同的native库和本地jar包
  • Ollama 深度使用指南:在本地玩转大型语言模型
  • 关于Spring的那点事(1)
  • AIGC检测系统升级后的AI内容识别机制与系统性降重策略研究(三阶段降重法)
  • 04_MySQL 通过 Docker 在同一个服务器上搭建主从集群(一主一从)
  • Junit_注解_枚举
  • 【区块链安全】代理合约中的漏洞
  • 【C++指南】C++ list容器完全解读(三):list迭代器的实现与优化
  • 【软考高项论文】论信息系统项目的成本管理
  • 渗透测试的重要性及最佳实践
  • 对selenium进行浏览器和驱动进行配置Windows | Linux
  • 调试W5500(作为服务器)
  • 淘宝API接口在数据分析中的应用
  • 非常详细版: dd.device.geolocation 钉钉微应用获取定位,移动端 PC端都操作,Vue实现钉钉微应用获取精准定位并渲染在地图组件上
  • 如何解决 Rider 编译输出乱码
  • leetcode:693. 交替位二进制数(数学相关算法题,python3解法)
  • Deepoc 大模型:无人机行业的智能变革引擎
  • Linux进程单例模式运行
  • 【AI News | 20250630】每日AI进展
  • 华为云Flexus+DeepSeek征文 | 从零开始搭建Dify-LLM应用开发平台:华为云全流程单机部署实战教程
  • 本地部署kafka4.0
  • Serverless 架构入门与实战:AWS Lambda、Azure Functions、Cloudflare Workers 对比
  • 打卡day58
  • 逻辑门电路Multisim电路仿真汇总——硬件工程师笔记
  • 设计模式(六)