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

大数据电商流量分析项目实战:Day2-1 补充Mysql和sql安装和学习

在这里插## 标题入图片描述

> 						大家好,我是程序员小羊!

✨博客主页: https://blog.csdn.net/m0_63815035?type=blog

💗《博客内容》:大数据、Java、测试开发、Python、Android、Go、Node、Android前端小程序等相关领域知识
📢博客专栏: https://blog.csdn.net/m0_63815035/category_11954877.html
📢欢迎点赞 👍 收藏 ⭐留言 📝
📢本文为学习笔记资料,如有侵权,请联系我删除,疏漏之处还请指正🙉
📢大厦之成,非一木之材也;大海之阔,非一流之归也✨

在这里插入图片描述

前言&课程重点

大家好,我是程序员小羊!接下来一周,咱们将用 “实战拆解 + 技术落地” 的方式,带大家吃透一个完整的大数据电商项目 ——不管你是想靠项目经验敲开大厂就业门,还是要做毕业设计、提升技术深度,这门课都能帮你 “从懂概念到能落地”。

毕竟大数据领域不缺 “会背理论” 的人,缺的是 “能把项目跑通、能跟业务结合” 的实战型选手。咱们这一周的内容,不搞虚的,全程围绕 “电商业务痛点→数据解决方案→技术栈落地” 展开,每天聚焦 1 个核心模块,最后还能输出可放进简历的项目成果。

进入正题:

本项目是一门实战导向的大数据课程,专为具备Java基础但对大数据生态系统不熟悉的同学量身打造。你将从零开始,逐步掌握大数据的基本概念、架构原理以及在电商流量分析中的实际应用,迅速融入当下热门的离线数据处理技术。

在这门课程中,你将学会如何搭建和优化Hadoop高可用环境,了解HDFS存储、YARN资源调度的核心原理,为数据处理打下坚实的基础。同时,你将掌握Hive数据仓库的构建和数仓建模方法,了解如何将海量原始数据经过层次化处理,转化为高质量的数据资产。

课程还将引领你深入Spark SQL的世界,通过实际案例学习如何利用Spark高效计算PV、UV以及各类衍生指标,提升数据分析效率。此外,你还将学习Flume的安装与配置,实现Web日志的实时采集和ETL入仓,确保数据传输的稳定与高效。

为了贴近企业实际运作,本项目还包括定时任务的设置和自动化数据管道构建,教你如何编写Shell脚本并利用crontab定时调度Spark作业,让数据处理过程实现自动化与智能化。最后,通过可视化展示模块,你将学会用FineBI等工具将数据分析结果直观呈现

总之,这是一门集大数据基础、系统搭建、数据处理与智能分析于一体的全链路实战课程。无论你是初入大数据领域的新手,还是希望提升数据处理能力的开发者,都将在这里收获满满,掌握最前沿的大数据技术。

课程计划:

天数主题主要内容
Day 1大数据基础+项目分组 (ZK补充)大数据概念、数仓建模、组件介绍、分组;简单介绍项目。
Day 2Hadoop初认识+ HA环境搭建初认识Hadoop,了解HDFS 基本操作,YARN 资源调度,数据存储测试等,并且完成Hadoop高可用的环境搭建。
Day 3Hive 数据仓库Hive SQL 基础、表设计、加载数据,搭建Hive环境并融入Hadoop实现高可用
Day 4Spark SQL 基础讲解Spark基础,DataFrame & SQL 查询,Hive 集成和环境的搭建
Day 5Flume 数据采集及ETL入仓安装Flume高可用,学习基础的Flume知识并且使用Flume 采集 Web 日志,存入 HDFS;数据格式解析,数据传输优化
Day 6数据入仓 & 指标计算解析 PV、UV 计算逻辑,Hive 数据清洗、分层存储(ODS → DWD)
Day 7Spark 计算 & 指标优化使用 Spark SQL 计算 PV、UV 及衍生指标(如跳出率、人均访问时长等)
Day 8定时任务 & 数据管道编写 Shell 脚本,使用 crontab 实现定时任务,调度 Spark SQL
Day 9可视化 & 数据分析搭建一个简单的项目使用 FineBI 进行数据展示,分析趋势。
Day 10项目答辩小组演示分析结果,可以后台联系程序员小羊点评

今日学习重点:

在Windows中安装Mysql(非必学)

有三种方案,①采用docker 但是这样对于初学者来说成本太高了,但是在开发中这就是最常见的安装方式。如果感兴趣可以自己去看看教程学习一下。https://blog.csdn.net/weixin_41919486/article/details/128545592

②采用环境安装工具 小皮面板 直接安装软件然后进入软件后卸载默认安装的Mysql5.0版本换上8.0以上的版本。(推荐)https://blog.csdn.net/m0_66360096/article/details/144972522

③直接在官网下载windows对应的安装包直接配置点击对应的服务下载即可,但是配置太麻烦了,而且不好不管理卸载也不方便,用的比较少了。

在Linux上安装Mysql

首先Mysql的安装包下载地址:https://downloads.mysql.com/archives/community/ ,我们这边可以选择mysql8.0.40,操作系统采用Linux,这是8.0的一个稳定的版本。

在本次演示中我们将会采用mysql,mysql-8.0.18-1
下载:文件名:mysql-8.0.18-1.el7.x86_64.rpm-bundle.tar 下载地址:https://cloud.189.cn/web/share?code=NzuA3aiiYNFf(访问码:fad9)

首先保证你的Linux可以连接网络,首先我们先改一下yum软件安装器的下载源,从国外改成国内的阿里云。 备用线路(离线的换源文件脚本):

bash <(curl -SSL https://linuxmirrors.cn/main.sh)选择:阿里云 / 是 / 是 / 是

main.sh

[root@node01 ~]# #安装前置组件 安装 MySQL 依赖
[root@node01 ~]# yum -y install perl net-tools openssl-devel# 卸载 mariadb
[root@node01 ~]# rpm -qa | grep mariadb
[root@node01 ~]# rpm -e --nodeps mariadb-libs-5.5.60-1.el7_5.x86_64【上传文件到 /opt/yjx/[root@node01 ~]# mkdir -p /opt/yjx/
[root@node01 ~]# cd /opt/yjx/# 安装 MySQL
# 解压安装包文件
[root@node01 ~]# tar -xvf mysql-8.0.18-1.el7.x86_64.rpm-bundle.tar[root@node01 ~]# rpm -ivh mysql-community-common-8.0.18-1.el7.x86_64.rpm
[root@node01 ~]# rpm -ivh mysql-community-libs-8.0.18-1.el7.x86_64.rpm
[root@node01 ~]# rpm -ivh mysql-community-client-8.0.18-1.el7.x86_64.rpm
[root@node01 ~]# rpm -ivh mysql-community-server-8.0.18-1.el7.x86_64.rpm
[root@node01 ~]# rpm -ivh mysql-community-devel-8.0.18-1.el7.x86_64.rpm# 启动 MySQL
[root@node01 ~]# systemctl start mysqld# 查找密码并登陆 MySQL
[root@node01 ~]# cat /var/log/mysqld.log | grep password
【在这里你会看见一个密码,注意如果最后有分号这样的符号,那么他也是密码的一部分】
[root@node01 ~]# mysql -u root -p
【提示你粘贴密码】>>>>>>>如果你运行没有出现密码用下面的方式>>>>>>>1. 打开 vim /etc/my.cnf
2. 插入模式在最后一行添加 skip-grant-tables 保存
3. 重启服务 service mysqld restart
4. 运行 mysql -uroot -p 
5. 输入密码: 123456
6. mysql> flush privileges;之后操作和下面一样,但是注意最后去/etc/my.cnf 删除
skip-grant-tables>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>># 修改 MySQL 密码 首先先降低Mysql对密码的期望 安全性 low 最低位数 6 设置root密码 123456
mysql> SET GLOBAL validate_password.policy = low;
mysql> SET GLOBAL validate_password.length = 6;
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';# 允许远程用户登录访问 MySQL
mysql> USE mysql;
mysql> UPDATE user SET host = '%' WHERE user = 'root';
mysql> COMMIT;
mysql> FLUSH PRIVILEGES;
mysql> quit;#!注意如果你添加 skip-grant-tables 记得删除然后重启服务

最后我们使用DataGrip看看能不能连接上?
在这里插入图片描述
在这里插入图片描述

太好了,现在你已经完成了对Mysql环境的搭建了,那接下来我们补充一些建表和数据库管理的基本命令,那么剩下的我们就讲 DDL(即查询语言)

数据库操作,表操作

create database 数据库名; – 创建数据库

drop database 数据库名; – 删除数据库

use 数据库名; – 切换使用某个数据库

show databases; – 显示所有数据库

select database(); – 查看当前使用的数据库

create table 表名 ( 列名 数据类型 [约束], …… ); – 创建表

drop table 表名; – 删除表

truncate table 表名; – 清空表数据但保留表结构

show tables; – 显示当前数据库中的所有表

describe 表名; – 查看表的结构

show create table 表名; – 查看表的创建语句

select * from 表名; – 查询表中所有数据

修改表操作

alter table 表名 add 列名 数据类型 [约束]; – 添加列

alter table 表名 drop column 列名; – 删除列

alter table 表名 modify 列名 新数据类型; – 修改列数据类型

alter table 表名 change 旧列名 新列名 数据类型; – 修改列名和数据类型

rename table 旧表名 to 新表名; – 重命名表

创建表操作

create table 表名 (列名 数据类型 [约束],列名 数据类型 [约束],...
);  
-- 创建表-- 示例
create table users (id int primary key auto_increment,name varchar(50) not null,email varchar(100) unique,created_at datetime default current_timestamp
);-- 常见约束auto_increment)自动递增
PRIMARY KEY 用于标识表中每行数据的唯一标识符,列值必须唯一且不能为空。 id int primary key
NOT NULL 指定列值不能为空。  name varchar(50) not null
DEFAULT  为列设置默认值。    created_at datetime default current_timestamp
CHECK    限制列值必须满足的条件(从 MySQL 8.0 开始支持)。    age int check (age >= 18)
FOREIGN KEY 指定列为外键,引用其他表的主键,实现表与表之间的关联。
user_id int,
foreign key (user_id) references users(id)-- 常见数据格式
INT (INTEGER)4字节,范围:-2,147,483,6482,147,483,647BIGINT8字节,范围:极大数值范围,常用于主键。
FLOAT / DOUBLE:浮点数,适用于科学计算,但有精度问题。CHAR(n):固定长度字符串,最多255字符,未填满时右侧补空格。
VARCHAR(n):可变长度字符串,最多65535字符(受限于行大小)。
TEXT:大文本字段,最大65,535字符(4字节存储)。
BLOB:二进制大对象,用于存储二进制数据(如图片、文件)。DATE:日期,格式 YYYY-MM-DD。
DATETIME:日期和时间,格式 YYYY-MM-DD HH:MM:SS。
TIMESTAMP:时间戳,格式与 DATETIME 类似,但受系统时区影响。
TIME:时间,格式 HH:MM:SS。
YEAR:年,格式 YYYY。BOOLEAN:实际上是 TINYINT 的别名,0 表示 FALSE1 表示 TRUE。
JSON:用于存储 JSON 格式数据(MySQL 5.7 及以上版本支持)。

修改表结构

alter table 表名 add 列名 数据类型 [约束];       -- 添加列
alter table 表名 drop column 列名;              -- 删除列
alter table 表名 modify 列名 新数据类型;        -- 修改列数据类型
alter table 表名 change 旧列名 新列名 数据类型; -- 修改列名和数据类型
rename table 旧表名 to 新表名;                  -- 重命名表

数据库查询

SELECT 列名1, 列名2, ... 
FROM 表名 
[WHERE 条件]        -- 筛选条件
[JOIN 表名 ON 条件] -- 关联表
[GROUP BY 列名]     -- 分组
[HAVING 条件]       -- 分组后的筛选条件
[ORDER BY 列名 ASC|DESC] -- 排序
[LIMIT 偏移量, 数量]; -- 分页
-- 查询指定的列或所有列:
SELECT * FROM 表名;
SELECT 列名1, 列名2 FROM 表名;-- 用于筛选记录:
SELECT * FROM 表名 WHERE 条件;-- JOIN 和 ON
用于关联多张表:
SELECT * FROM1 JOIN2 ON1.=2.;-- LIKE用于模糊匹配:
-- 开头匹配: 'J%' ,'--J--' ,'J%','%J%'
SELECT * FROM 表名 WHERELIKE '匹配模式';-- GROUP BY 和 HAVING分组查询:
SELECT, 聚合函数 FROM 表名 GROUP BY[HAVING 条件];-- ORDER BY 排序:
SELECT * FROM 表名 ORDER BY 列名 ASC|DESC;-- LIMIT分页或限制返回记录数量:
SELECT * FROM 表名 LIMIT 偏移量, 数量;

Mysql中的聚合函数和开窗

聚合函数用于对一组数据执行计算,常用于 GROUP BY 语句来进行数据分组后的计算。例如常见的有,平均数,最大值,最小值和总和。

函数描述
COUNT(*)统计行数
SUM(column)计算某列的总和
AVG(column)计算某列的平均值
MAX(column)计算某列的最大值
MIN(column)计算某列的最小值
  • 使用示例:
SELECT account, COUNT(eventId) AS event_count
FROM ods_app_event_log
GROUP BY account;

开窗函数用于在查询结果的某一组数据上进行计算,但不会折叠行,即计算结果仍然返回到每一行。简单理解他是为了简化SQL开发的一种简单嵌套函数。

函数描述
ROW_NUMBER()按指定顺序编号,无重复值
RANK()按顺序编号,遇到相同值会跳号
DENSE_RANK()按顺序编号,相同值不会跳号
LAG(column, offset, default)取前 offset 行的值
LEAD(column, offset, default)取后 offset 行的值
SUM(column) OVER (PARTITION BY ...)按窗口计算总和
AVG(column) OVER (PARTITION BY ...)按窗口计算均值
  • 使用实例:

    示例:统计每个用户的事件总数,并分配排名

SELECT account, COUNT(eventId) AS event_count,RANK() OVER (ORDER BY COUNT(eventId) DESC) AS ranking
FROM ods_app_event_log
GROUP BY account;

示例:计算上一条事件的时间差

SELECT account,eventId,ts,LAG(ts, 1, NULL) OVER (PARTITION BY account ORDER BY ts) AS prev_event_time,ts - LAG(ts, 1, NULL) OVER (PARTITION BY account ORDER BY ts) AS time_diff
FROM ods_app_event_log;

Mysql中常用的方法函数

1. 数值函数

用于处理数值类型的数据,如四舍五入、取整、取绝对值等。

函数作用示例结果
ABS(x)取绝对值SELECT ABS(-10);10
CEIL(x)向上取整SELECT CEIL(3.4);4
FLOOR(x)向下取整SELECT FLOOR(3.8);3
ROUND(x, d)四舍五入SELECT ROUND(3.14159,2);3.14
RAND()生成 0~1 之间的随机数SELECT RAND();0.78452
MOD(x, y)取模(余数)SELECT MOD(10,3);1
2. 字符串函数

用于处理字符串,如拼接、替换、提取子串等。

函数作用示例结果
LENGTH(s)计算字符串长度SELECT LENGTH('Hello');5
UPPER(s)转换为大写SELECT UPPER('hello');HELLO
LOWER(s)转换为小写SELECT LOWER('HELLO');hello
TRIM(s)去掉首尾空格SELECT TRIM(' abc ');abc
SUBSTRING(s, start, length)提取子串SELECT SUBSTRING('abcdef',2,3);bcd
CONCAT(s1, s2, ...)字符串拼接SELECT CONCAT('Hello',' ','World');Hello World
REPLACE(s, from, to)替换子串SELECT REPLACE('Hello World', 'World', 'SQL');Hello SQL

3. 日期时间函数

用于处理日期和时间,如计算日期差、格式化日期等。

函数作用示例结果
NOW()获取当前时间SELECT NOW();2025-02-25 12:30:45
CURDATE()获取当前日期SELECT CURDATE();2025-02-25
CURTIME()获取当前时间SELECT CURTIME();12:30:45
YEAR(d)提取年份SELECT YEAR('2025-02-25');2025
MONTH(d)提取月份SELECT MONTH('2025-02-25');2
DAY(d)提取日SELECT DAY('2025-02-25');25
DATEDIFF(d1, d2)计算日期间隔(天)SELECT DATEDIFF('2025-03-01', '2025-02-25');4
TIMEDIFF(t1, t2)计算时间差SELECT TIMEDIFF('12:30:45', '11:25:30');01:05:15
DATE_ADD(d, INTERVAL n unit)日期加法SELECT DATE_ADD('2025-02-25', INTERVAL 10 DAY);2025-03-07
DATE_SUB(d, INTERVAL n unit)日期减法SELECT DATE_SUB('2025-02-25', INTERVAL 1 MONTH);2025-01-25

时间单位包括

  • SECOND

  • MINUTE

  • HOUR

  • DAY

  • MONTH

  • YEAR

4. 条件判断函数

用于逻辑判断,比如 CASE、IFNULL 等。

函数作用示例结果
IF(condition, true_value, false_value)条件判断SELECT IF(10 > 5, 'Yes', 'No');Yes
IFNULL(expr, value)为空时替换值SELECT IFNULL(NULL, 'default');default
COALESCE(a, b, c, ...)取第一个非 NULL 值SELECT COALESCE(NULL, NULL, 'Hello');Hello
CASE WHEN ... THEN ... ELSE ... END多条件判断见示例
SELECT account,gender,CASE WHEN gender = 'M' THEN 'Male'WHEN gender = 'F' THEN 'Female'ELSE 'Unknown'END AS gender_desc
FROM dim_user;

案例和练习

下面给出一个简单的案例,包含两个表的创建、插入样例数据以及一个基本的 JOIN 查询,适合新手练习 SQL。最后还附带三个个简单的练习题。

# 创建数据库并使用
CREATE DATABASE IF NOT EXISTS test;
USE test;# 事件日志表
CREATE TABLE ods_app_event_log (account VARCHAR(50) COMMENT '用户账号',eventId VARCHAR(50) COMMENT '事件类型',ts BIGINT COMMENT '事件时间戳',PRIMARY KEY (account, ts)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='APP用户事件日志表';# 用户维度表
CREATE TABLE dim_user (account VARCHAR(50) COMMENT '用户账号',user_name VARCHAR(100) COMMENT '用户名',gender VARCHAR(10) COMMENT '性别',PRIMARY KEY (account)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='用户维度表';# 插入样例数据
-- 插入事件日志数据
INSERT INTO ods_app_event_log (account, eventId, ts) VALUES
('user1', 'login', 1650000000),
('user1', 'search', 1650003600),
('user2', 'login', 1650007200),
('user3', 'purchase', 1650010800),
('user2', 'search', 1650014400);-- 插入用户维度数据
INSERT INTO dim_user (account, user_name, gender) VALUES
('user1', 'Alice', 'F'),
('user2', 'Bob', 'M'),
('user3', 'Charlie', 'M');
  • 练习题1:写一个 SQL 查询,将事件日志表和用户维度表通过 account 字段连接,显示每条事件记录中用户的账号、用户名和事件类型。
SELECT e.account, u.user_name, e.eventId
FROM ods_app_event_log e
JOIN dim_user u ON e.account = u.account;
  • 练习题2:统计每个用户在事件日志表中的总事件数,并显示账号、用户名和事件总数。
SELECT u.account, u.user_name, COUNT(e.eventId) AS event_count
FROM ods_app_event_log e
JOIN dim_user u ON e.account = u.account
GROUP BY u.account, u.user_name;
  • 练习题3:根据用户性别统计所有用户的总事件数,显示性别以及对应的事件总数。
SELECT u.gender, COUNT(e.eventId) AS total_events
FROM ods_app_event_log e
JOIN dim_user u ON e.account = u.account
GROUP BY u.gender;
示例:计算每个用户的事件数
SELECT account, COUNT(eventId) AS event_count
FROM ods_app_event_log
GROUP BY account;
示例:计算每个用户的事件数
SELECT account, COUNT(eventId) AS event_count
FROM ods_app_event_log
GROUP BY account;

Mysql进阶:

什么是SQL?

SQL 的全称是 Structured Query Language,即结构化查询语言,它是用来与关系型数据库管理系统(RDBMS)交互的语言,包括从表中获取、更新、插入和删除数据,也就是我们常说的增删改查

MySQL 底层存储结构和B+树

MySQL 主要使用 B+树 作为索引存储结构,特别是在 InnoDB 存储引擎中

MySQL 中的数据是按照 页(Page) 组织存储的,每个数据页的默认大小一般为 16KB(InnoDB),数据在这些页中以 B+树 形式存储和管理。在数据表中 基本包含,行,页,索引,段,区,表空间组成。

B+树是 多路平衡查找树(而不是二叉树),每个节点存放多个 key-value 值,树的高度低,查询时访问的层数少。B+树的 叶子节点是有序链表,可以通过顺序扫描加快范围查询,如 BETWEENORDER BY 操作。

所以我们一般建表的时候都应该多加例如时间和主键的唯一索引,在查询的时候少用 * ,同时多使用groupby可以帮助我们快速定位到一个数据的区间。这就是查询优化的一部分。

表的JOIN有哪几种?有什么不同?

在 SQL 中,表的 JOIN 主要分为以下几种:

JOIN 类型作用特点
INNER JOIN连接两张表,返回 匹配 的数据只保留两表都有的记录
LEFT JOIN (LEFT OUTER JOIN)返回左表的所有数据,右表没有匹配时返回 NULL以左表为主,右表可能为空
RIGHT JOIN (RIGHT OUTER JOIN)返回右表的所有数据,左表没有匹配时返回 NULL以右表为主,左表可能为空
FULL JOIN (FULL OUTER JOIN)返回两张表的所有数据,匹配不上时填 NULLMySQL 不支持,可用 UNION 代替
CROSS JOIN笛卡尔积,不进行匹配,直接组合返回行数 = 左表行数 × 右表行数
表的查询顺序是什么样的?

SQL 的执行顺序 不是 按写的顺序执行,而是按照 SQL 查询优化器的执行逻辑 解析,标准的执行顺序如下:

1️⃣ FROM —— 先确定主表,加载数据源
2️⃣ JOIN —— 连接其他表,筛选匹配数据
3️⃣ ON —— 连接条件,决定哪些行匹配
4️⃣ WHERE —— 过滤数据(不能使用聚合函数)
5️⃣ GROUP BY —— 进行分组
6️⃣ HAVING —— 过滤分组后的数据(可以使用聚合函数)
7️⃣ SELECT —— 选择需要的字段和计算值
8️⃣ DISTINCT —— 去重
9️⃣ ORDER BY —— 排序结果
🔟 LIMIT —— 限制返回行数

有哪些类型的 SQL 命令(或 SQL 子集)?

数据定义语言 (DDL) – 定义和修改数据库的结构。CREATEALTERTABLEDROPTRUNCATEADD COLUMN

数据操作语言 (DML) – 访问、操作和修改数据库中的数据。UPDATEDELETEINSERT

数据控制语言 (DCL) – 控制用户对数据库中数据的访问,并授予或撤销特定用户或一组用户的权限。GRANTREVOKE

事务控制语言 (TCL) – 控制数据库中的事务。COMMITSET TRANSACTIONROLLBACKSAVEPOINT

数据查询语言 (DQL) – 对数据库中的数据执行查询以从中检索必要的信息。SELECT

子查询怎么写?有什么运用场景

子查询(Subquery) 是指 嵌套在 SELECTFROMWHERE 语句中的查询,用于先执行子查询结果,再用于外层查询中。常见的有三种写法:

SELECT user_name 
FROM dim_user 
WHERE account IN (SELECT account FROM ods_app_event_log WHERE eventId = 'login');

作用:查询所有曾经登录过的用户(先查出登录过的用户 ID,再查询用户名),用来筛选符合某个条件的数据,比如 查找符合某一条件的用户

SELECT temp.user_name, temp.event_count
FROM (SELECT account, COUNT(*) AS event_count FROM ods_app_event_log GROUP BY account) AS temp
JOIN dim_user u ON temp.account = u.account;

作用:先在子查询中计算每个用户的事件数,再关联用户表查询用户名。子查询返回一个临时表(派生表),用来 做聚合计算或中间处理

SELECT user_name, (SELECT COUNT(*) FROM ods_app_event_log WHERE ods_app_event_log.account = dim_user.account) AS event_count
FROM dim_user;

作用:查询每个用户的事件总数,SELECT 里直接查子查询的结果。用于返回单个值的情况(如总计数、最大值)。

WITH 临时表名 AS (子查询SQL
)
后续SQL;# 示例:计算每个用户的事件数,并查询用户名
WITH user_event_count AS (SELECT account, COUNT(*) AS event_countFROM ods_app_event_logGROUP BY account
)
SELECT u.user_name, uec.event_count
FROM user_event_count uec
JOIN dim_user u ON uec.account = u.account;

先用 WITH 计算每个用户的事件总数,再 JOIN 用户表,避免嵌套子查询,使 SQL 结#构更清晰。有点像是我们封装好了一个函数,最后直接拿来使用这个表的数据就是被算完成的整体。这种写法可读性最高,这是公司最常见的复杂SQL的写法。

怎么提高SQL的执行效率?

提高 SQL 性能的方法

  1. 创建索引(加快查找)

  2. 避免 SELECT *(减少数据传输)

  3. EXPLAIN 分析查询(找慢查询)

  4. 优化 OR 语句(用 UNION ALL 代替)

  5. JOIN 代替子查询(减少查询次数)

  6. 使用 LIMIT(限制返回数据)

  7. 分区表优化查询(减少扫描数据量)

…… SQL的知识无穷无尽,希望你可以依照这个作为学习的跳板努力的学习早日完成自己的梦想。

结尾:

本课程是一门以电商流量数据分析为核心的大数据实战课程,旨在帮助你全面掌握大数据技术栈的核心组件及其在实际项目中的应用。从零开始,你将深入了解并实践Hadoop、Hive、Spark和Flume等主流技术,为企业级电商流量项目构建一个高可用、稳定高效的数据处理系统。

在课程中,你将学习如何搭建并优化Hadoop高可用环境,熟悉HDFS分布式存储和YARN资源调度机制,为大规模数据存储与计算奠定坚实基础。随后,通过Hive数据仓库的构建与数仓建模,你将掌握如何将原始日志数据进行分层处理,实现数据清洗与结构化存储,从而为后续数据分析做好准备。

借助Spark SQL的强大功能,你将通过实战案例学会快速计算和分析关键指标,如页面浏览量(PV)、独立访客数(UV),以及通过数据比较获得的环比、等比等衍生指标。这些指标将帮助企业准确洞察用户行为和流量趋势,为优化营销策略提供科学依据。

同时,本课程还包含Flume数据采集与ETL入仓的实战模块,教你如何采集实时Web日志数据,并利用ETL流程将数据自动导入HDFS和Hive,确保数据传输和处理的高效稳定。

总体来说,这门课程面向希望提升大数据应用能力的技术人员和企业项目团队,紧密围绕公司电商流量项目的实际需求展开。通过系统的理论讲解与动手实践,你不仅能够构建从数据采集、存储、处理到可视化展示的完整数据管道,还能利用PV、UV、环比、等比等关键指标,全面掌握电商流量数据分析的核心技能。

今天这篇文章就到这里了,大厦之成,非一木之材也;大海之阔,非一流之归也。感谢大家观看本文

在这里插入图片描述


文章转载自:

http://co1iC12N.ymhjb.cn
http://aePuVKU5.ymhjb.cn
http://1I7HWSq8.ymhjb.cn
http://seiTKSfS.ymhjb.cn
http://NqsNXZSH.ymhjb.cn
http://24HIiJXi.ymhjb.cn
http://AQKJ2gZT.ymhjb.cn
http://zahQ4cAE.ymhjb.cn
http://druEw6XV.ymhjb.cn
http://sclLtgki.ymhjb.cn
http://59ZYA2j2.ymhjb.cn
http://qr9IPTx7.ymhjb.cn
http://GmLnFE10.ymhjb.cn
http://pCCOsjFl.ymhjb.cn
http://w993rysm.ymhjb.cn
http://IcADmKDg.ymhjb.cn
http://7vuveKo1.ymhjb.cn
http://Pnqk2rvm.ymhjb.cn
http://WRiYfbI8.ymhjb.cn
http://IeXJVMFP.ymhjb.cn
http://kjNBACby.ymhjb.cn
http://RX92rpdJ.ymhjb.cn
http://pflMRK7F.ymhjb.cn
http://QXtahlg5.ymhjb.cn
http://ggDb8nKG.ymhjb.cn
http://A9HOXusE.ymhjb.cn
http://XQH3T0bm.ymhjb.cn
http://U9so67Aw.ymhjb.cn
http://bzvtr0gJ.ymhjb.cn
http://vz3WgxDZ.ymhjb.cn
http://www.dtcms.com/a/378209.html

相关文章:

  • 【Unity UGUI 交互组件——Dropdown(TMP版本)(10)】
  • 自动化拨号爬虫体系:虚拟机集群部署与增量管理
  • 【机器人运动学】正运动学分析
  • 基于机器学习的P2P网贷平台信用违约预测模型
  • 工厂怎么认证iso14067
  • flutter项目 -- 换logo、名称 、签名、打包
  • 【Windows】VMware安装Ubuntu操作系统
  • 仿函数的分析与应用
  • 框架漏洞详解
  • Day02 集合 | 30. 串联所有单词的子串、146. LRU 缓存、811. 子域名访问计数
  • 基于springboot的教育资源共享管理系统
  • 汽车网络安全 CyberSecurity ISO/SAE 21434 测试之一
  • Fiddler
  • 【软件设计师(中级)】P1 计算机系统知识(待完成)
  • KronosTokenizer结构解析
  • (网络编程)网络编程套接字 UDP的socket API 代码解析
  • iPhone17系列发布!跨端如何破局?
  • 把nginx、jar包、redis做成windows系统服务,开机自动启动
  • Java学习笔记四(继承)
  • Redis分布式锁的try-with-resources实现
  • 广东省省考备考(第九十七天9.11)——言语(刷题巩固第三节课)
  • ReentrantLock 源码深度解析
  • 机器人驭风而行:低空经济如何开启智能新纪元
  • 【系统架构设计(27)】信息安全技术集成
  • spring mvc 拦截器 (HandlerInterceptor )
  • 【Nginx】- 日志定期清理设置
  • 102、23种设计模式之装饰器模式(11/23)
  • SwiftData3 一剑封喉:WWDC25 的“数据剑谱”精讲,让 Core Data 老侠原地退休
  • [硬件电路-180]:集成运放,在同向放大和反向放大电路中,失调电压与信号一起被等比例放大;但在跨阻运放中,失调电压不会与电流信号等比例放大。
  • IDEA连接redis数据库时出现Failed to connect to any host resolved for DNS name.