大数据学习(132)-HIve数据分析
🍋🍋大数据学习🍋🍋
🔥系列专栏: 👑哲学语录: 用力所能及,改变世界。
💖如果觉得博主的文章还不错的话,请点赞👍+收藏⭐️+留言📝支持一下博主哦🤞
一、连续值问题(如连续登录、连续消费)
核心思路:
- 生成连续标识:通过
日期 - 行号
生成分组标识,连续日期的该值相同。 - 分组统计:按标识分组,统计连续长度。
典型例题:
计算连续登录超过 7 天的用户 ID。
代码模板:
WITH user_dates AS (-- 去重并生成行号SELECT user_id,login_date,ROW_NUMBER() OVER (PARTITION BY user_id ORDER BY login_date) AS rnFROM (SELECT DISTINCT user_id, login_date FROM user_login) t
),
date_groups AS (-- 生成连续标识SELECT user_id,login_date,DATE_SUB(login_date, rn) AS date_groupFROM user_dates
)
-- 筛选连续≥7天的用户
SELECT user_id,MIN(login_date) AS start_date,MAX(login_date) AS end_date,COUNT(*) AS consecutive_days
FROM date_groups
GROUP BY user_id, date_group
HAVING COUNT(*) >= 7;
二、Top N 问题(如每个分组的前 N 条)
核心思路:
- 窗口函数排名:用
ROW_NUMBER()
/RANK()
/DENSE_RANK()
生成排名。 - 过滤结果:筛选排名 ≤N 的记录。
典型例题:
查询每个部门薪资最高的前 3 名员工。
代码模板:
WITH ranked_employees AS (SELECT dept_id,emp_id,salary,ROW_NUMBER() OVER (PARTITION BY dept_id ORDER BY salary DESC) AS rankFROM employees
)
SELECT *
FROM ranked_employees
WHERE rank <= 3;
三、时间窗口计算(同比 / 环比 / 移动平均)
核心思路:
- 关联历史数据:用
JOIN
或窗口函数LAG()
获取历史值。 - 计算差值 / 比例:如
(当前值 - 历史值)/历史值
。
典型例题:
计算每月销售额的环比增长率。
代码模板:
WITH monthly_sales AS (SELECT YEAR(sale_date) AS sale_year,MONTH(sale_date) AS sale_month,SUM(amount) AS total_amountFROM salesGROUP BY YEAR(sale_date), MONTH(sale_date)
)
SELECT curr.sale_year,curr.sale_month,curr.total_amount,prev.total_amount AS prev_month_amount,(curr.total_amount - prev.total_amount) / prev.total_amount AS mom_growth
FROM monthly_sales curr
LEFT JOIN monthly_sales prev
ON curr.sale_month = prev.sale_month + 1
AND curr.sale_year = prev.sale_year;
四、留存分析(N 日留存率)
核心思路:
- 标记首次行为:用
MIN()
确定用户首次登录 / 注册日期。 - 关联后续行为:用
JOIN
或窗口函数判断是否在 N 日后仍活跃。
典型例题:
计算 2023 年 1 月每日新增用户的 7 日留存率。
代码模板:
WITH first_login AS (SELECT user_id,MIN(login_date) AS first_dateFROM user_loginWHERE login_date >= '2023-01-01' AND login_date <= '2023-01-24'GROUP BY user_id
)
SELECT fl.first_date,COUNT(DISTINCT fl.user_id) AS new_users,COUNT(DISTINCT ul.user_id) AS retained_users,COUNT(DISTINCT ul.user_id) / COUNT(DISTINCT fl.user_id) AS retention_rate_7d
FROM first_login fl
LEFT JOIN user_login ul
ON fl.user_id = ul.user_id
AND ul.login_date = DATE_ADD(fl.first_date, 7)
GROUP BY fl.first_date;
五、多表关联优化(大表 JOIN)
核心思路:
- 过滤数据:在 JOIN 前用
WHERE
减少数据量。 - 使用 MapJoin:小表放右侧,触发 Map 端 JOIN。
- 分桶表优化:按 JOIN 字段分桶,提高数据分布均匀性。
典型例题:
优化 orders
(亿级)和 customers
(百万级)的 JOIN。
代码模板:
-- 方法1:手动 MapJoin(Hive 3.0+ 自动优化)
SELECT /*+ MAPJOIN(c) */o.order_id,c.customer_name
FROM orders o
JOIN customers c
ON o.customer_id = c.customer_id
WHERE o.order_date >= '2023-01-01';-- 方法2:分桶表优化
SET hive.optimize.skewjoin=true;
SELECT o.order_id,c.customer_name
FROM orders_bucketed o
JOIN customers_bucketed c
ON o.customer_id = c.customer_id;
六、数据倾斜处理
核心思路:
- 拆分热点值:对高频 key 添加随机前缀,分两阶段聚合。
- 过滤异常值:排除导致倾斜的无效数据。
- 调整参数:增大
hive.groupby.skewindata
。
典型例题:
优化 GROUP BY user_id
时的倾斜问题。
代码模板:
-- 两阶段聚合
WITH stage1 AS (SELECT CONCAT(user_id, '_', FLOOR(RAND() * 10)) AS tmp_key,COUNT(*) AS cntFROM logsGROUP BY CONCAT(user_id, '_', FLOOR(RAND() * 10))
)
SELECT SPLIT(tmp_key, '_')[0] AS user_id,SUM(cnt) AS total_cnt
FROM stage1
GROUP BY SPLIT(tmp_key, '_')[0];
七、JSON / 复杂类型处理
核心思路:
- 解析 JSON:用
get_json_object()
或json_tuple()
提取字段。 - 展开数组:用
LATERAL VIEW explode()
展开数组元素。
典型例题:
解析 user_info
表中的 tags
字段(JSON 数组)。
代码模板:
-- 解析 JSON 数组
SELECT user_id,tag
FROM user_info
LATERAL VIEW explode(split(regexp_replace(tags, '[\\[\\]" ]', ''), ',')
) t AS tag;-- 提取 JSON 对象字段
SELECT user_id,get_json_object(user_info, '$.name') AS name,get_json_object(user_info, '$.age') AS age
FROM user_info;
八、累计计算(累计和、累计占比)
核心思路:
- 窗口函数:用
SUM() OVER (ORDER BY ...)
实现累计聚合。 - 排序规则:确保
ORDER BY
与业务逻辑一致。
典型例题:
计算每月累计销售额及累计占比。
代码模板:
WITH monthly_sales AS (SELECT YEAR(sale_date) AS sale_year,MONTH(sale_date) AS sale_month,SUM(amount) AS monthly_amountFROM salesGROUP BY YEAR(sale_date), MONTH(sale_date)
)
SELECT sale_year,sale_month,monthly_amount,SUM(monthly_amount) OVER (PARTITION BY sale_year ORDER BY sale_month) AS cumulative_amount,SUM(monthly_amount) OVER (PARTITION BY sale_year ORDER BY sale_month) / SUM(monthly_amount) OVER (PARTITION BY sale_year) AS cumulative_ratio
FROM monthly_sales;
九、缺失值填充(连续日期补全)
核心思路:
- 生成完整日期序列:用
LATERAL VIEW
和SEQUENCE
函数。 - 左连接原数据:用
COALESCE()
填充缺失值。
典型例题:
补全用户每日登录记录(无登录日填充为 0)。
代码模板:
WITH all_dates AS (SELECT user_id,DATE_ADD('2023-01-01', pos) AS login_dateFROM (SELECT DISTINCT user_id FROM user_login) uLATERAL VIEW posexplode(split(repeat('1', DATEDIFF('2023-01-31', '2023-01-01')), '1')) t AS pos, val
)
SELECT ad.user_id,ad.login_date,COALESCE(ul.login_count, 0) AS login_count
FROM all_dates ad
LEFT JOIN (SELECT user_id,login_date,COUNT(*) AS login_countFROM user_loginGROUP BY user_id, login_date
) ul
ON ad.user_id = ul.user_id AND ad.login_date = ul.login_date;
十、异常值检测(离群点识别)
核心思路:
- 计算统计指标:如均值、标准差。
- 定义阈值:如
|值 - 均值| > 3*标准差
。
典型例题:
找出订单金额异常高的记录。
代码模板:
WITH order_stats AS (SELECT AVG(amount) AS avg_amount,STDDEV(amount) AS std_amountFROM orders
)
SELECT o.order_id,o.amount
FROM orders o
CROSS JOIN order_stats s
WHERE ABS(o.amount - s.avg_amount) > 3 * s.std_amount;
总结
- 明确业务需求:确定输入输出,如 “连续登录”“留存率”。
- 设计数据模型:分析涉及的表、关联字段和聚合维度。
- 选择技术方案:套用上述思路(如连续值用
日期-行号
,Top N 用ROW_NUMBER
)。 - 分步实现:先写基础查询,再叠加窗口函数和优化逻辑。
- 验证结果:用小规模数据测试,检查边界条件(如空值、单条记录)。
相关文章:
大数据学习(132)-HIve数据分析
🍋🍋大数据学习🍋🍋 🔥系列专栏: 👑哲学语录: 用力所能及,改变世界。 💖如果觉得博主的文章还不错的话,请点赞👍收藏⭐️留言Ǵ…...

3-11单元格区域边界定位(End属性)学习笔记
返回一个Range 对象,只读。该对象代表包含源区域的区域上端下端左端右端的最后一个单元格。等同于按键 End 向上键(End(xlUp))、End向下键(End(xlDown))、End向左键(End(xlToLeft)End向右键(End(xlToRight)) 注意:它移动的位置必须是相连的有内容的单元格…...
Rapidio门铃消息FIFO溢出机制
关于RapidIO门铃消息FIFO的溢出机制及其与中断抖动的关系,以下是深入解析: 门铃FIFO溢出的本质 在RapidIO系统中,门铃消息FIFO是硬件控制器内部的缓冲区,用于临时存储接收到的门铃消息(Doorbell Message)。…...

蓝桥杯3498 01串的熵
问题描述 对于一个长度为 23333333的 01 串, 如果其信息熵为 11625907.5798, 且 0 出现次数比 1 少, 那么这个 01 串中 0 出现了多少次? #include<iostream> #include<cmath> using namespace std;int n 23333333;int main() {//枚举 0 出现的次数//因…...

什么是Ansible Jinja2
理解 Ansible Jinja2 模板 Ansible 是一款功能强大的开源自动化工具,可让您无缝地管理和配置系统。Ansible 的一大亮点是它使用 Jinja2 模板,允许您根据变量数据动态生成文件、配置设置和脚本。本文将向您介绍 Ansible 中的 Jinja2 模板,并通…...
.Net Framework 4/C# 关键字(非常用,持续更新...)
一、is 关键字 is 关键字用于检查对象是否于给定类型兼容,如果兼容将返回 true,如果不兼容则返回 false,在进行类型转换前,可以先使用 is 关键字判断对象是否与指定类型兼容,如果兼容才进行转换,这样的转换是安全的。 例如有:首先创建一个字符串对象,然后将字符串对象隐…...

优选算法第十二讲:队列 + 宽搜 优先级队列
优选算法第十二讲:队列 宽搜 && 优先级队列 1.N叉树的层序遍历2.二叉树的锯齿型层序遍历3.二叉树最大宽度4.在每个树行中找最大值5.优先级队列 -- 最后一块石头的重量6.数据流中的第K大元素7.前K个高频单词8.数据流的中位数 1.N叉树的层序遍历 2.二叉树的锯…...

项目部署到Linux上时遇到的错误(Redis,MySQL,无法正确连接,地址占用问题)
Redis无法正确连接 在运行jar包时出现了这样的错误 查询得知问题核心在于Redis连接失败,具体原因是客户端发送了密码认证请求,但Redis服务器未设置密码 1.为Redis设置密码(匹配客户端配置) 步骤: 1).修…...

智能分布式爬虫的数据处理流水线优化:基于深度强化学习的数据质量控制
在数字化浪潮席卷全球的今天,数据已成为企业和研究机构的核心资产。智能分布式爬虫作为高效的数据采集工具,在大规模数据获取中发挥着关键作用。然而,传统的数据处理流水线在面对复杂多变的网络环境和海量异构数据时,常出现数据质…...

OPenCV CUDA模块图像处理-----对图像执行 均值漂移滤波(Mean Shift Filtering)函数meanShiftFiltering()
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 在 GPU 上对图像执行 均值漂移滤波(Mean Shift Filtering),用于图像分割或平滑处理。 该函数将输入图像中的…...
Java多线程实现之Thread类深度解析
Java多线程实现之Thread类深度解析 一、多线程基础概念1.1 什么是线程1.2 多线程的优势1.3 Java多线程模型 二、Thread类的基本结构与构造函数2.1 Thread类的继承关系2.2 构造函数 三、创建和启动线程3.1 继承Thread类创建线程3.2 实现Runnable接口创建线程 四、Thread类的核心…...

AI书签管理工具开发全记录(十九):嵌入资源处理
1.前言 📝 在上一篇文章中,我们完成了书签的导入导出功能。本篇文章我们研究如何处理嵌入资源,方便后续将资源打包到一个可执行文件中。 2.embed介绍 🎯 Go 1.16 引入了革命性的 embed 包,彻底改变了静态资源管理的…...
AspectJ 在 Android 中的完整使用指南
一、环境配置(Gradle 7.0 适配) 1. 项目级 build.gradle // 注意:沪江插件已停更,推荐官方兼容方案 buildscript {dependencies {classpath org.aspectj:aspectjtools:1.9.9.1 // AspectJ 工具} } 2. 模块级 build.gradle plu…...

分布式增量爬虫实现方案
之前我们在讨论的是分布式爬虫如何实现增量爬取。增量爬虫的目标是只爬取新产生或发生变化的页面,避免重复抓取,以节省资源和时间。 在分布式环境下,增量爬虫的实现需要考虑多个爬虫节点之间的协调和去重。 另一种思路:将增量判…...

Maven 概述、安装、配置、仓库、私服详解
目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...

Mac下Android Studio扫描根目录卡死问题记录
环境信息 操作系统: macOS 15.5 (Apple M2芯片)Android Studio版本: Meerkat Feature Drop | 2024.3.2 Patch 1 (Build #AI-243.26053.27.2432.13536105, 2025年5月22日构建) 问题现象 在项目开发过程中,提示一个依赖外部头文件的cpp源文件需要同步,点…...
DeepSeek 技术赋能无人农场协同作业:用 AI 重构农田管理 “神经网”
目录 一、引言二、DeepSeek 技术大揭秘2.1 核心架构解析2.2 关键技术剖析 三、智能农业无人农场协同作业现状3.1 发展现状概述3.2 协同作业模式介绍 四、DeepSeek 的 “农场奇妙游”4.1 数据处理与分析4.2 作物生长监测与预测4.3 病虫害防治4.4 农机协同作业调度 五、实际案例大…...

dify打造数据可视化图表
一、概述 在日常工作和学习中,我们经常需要和数据打交道。无论是分析报告、项目展示,还是简单的数据洞察,一个清晰直观的图表,往往能胜过千言万语。 一款能让数据可视化变得超级简单的 MCP Server,由蚂蚁集团 AntV 团队…...

使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台
🎯 使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台 📌 项目背景 随着大语言模型(LLM)的广泛应用,开发者常面临多个挑战: 各大模型(OpenAI、Claude、Gemini、Ollama)接口风格不统一;缺乏一个统一平台进行模型调用与测试;本地模型 Ollama 的集成与前…...

Unity | AmplifyShaderEditor插件基础(第七集:平面波动shader)
目录 一、👋🏻前言 二、😈sinx波动的基本原理 三、😈波动起来 1.sinx节点介绍 2.vertexPosition 3.集成Vector3 a.节点Append b.连起来 4.波动起来 a.波动的原理 b.时间节点 c.sinx的处理 四、🌊波动优化…...

企业如何增强终端安全?
在数字化转型加速的今天,企业的业务运行越来越依赖于终端设备。从员工的笔记本电脑、智能手机,到工厂里的物联网设备、智能传感器,这些终端构成了企业与外部世界连接的 “神经末梢”。然而,随着远程办公的常态化和设备接入的爆炸式…...
今日学习:Spring线程池|并发修改异常|链路丢失|登录续期|VIP过期策略|数值类缓存
文章目录 优雅版线程池ThreadPoolTaskExecutor和ThreadPoolTaskExecutor的装饰器并发修改异常并发修改异常简介实现机制设计原因及意义 使用线程池造成的链路丢失问题线程池导致的链路丢失问题发生原因 常见解决方法更好的解决方法设计精妙之处 登录续期登录续期常见实现方式特…...
Device Mapper 机制
Device Mapper 机制详解 Device Mapper(简称 DM)是 Linux 内核中的一套通用块设备映射框架,为 LVM、加密磁盘、RAID 等提供底层支持。本文将详细介绍 Device Mapper 的原理、实现、内核配置、常用工具、操作测试流程,并配以详细的…...

GC1808高性能24位立体声音频ADC芯片解析
1. 芯片概述 GC1808是一款24位立体声音频模数转换器(ADC),支持8kHz~96kHz采样率,集成Δ-Σ调制器、数字抗混叠滤波器和高通滤波器,适用于高保真音频采集场景。 2. 核心特性 高精度:24位分辨率,…...

有限自动机到正规文法转换器v1.0
1 项目简介 这是一个功能强大的有限自动机(Finite Automaton, FA)到正规文法(Regular Grammar)转换器,它配备了一个直观且完整的图形用户界面,使用户能够轻松地进行操作和观察。该程序基于编译原理中的经典…...
基于matlab策略迭代和值迭代法的动态规划
经典的基于策略迭代和值迭代法的动态规划matlab代码,实现机器人的最优运输 Dynamic-Programming-master/Environment.pdf , 104724 Dynamic-Programming-master/README.md , 506 Dynamic-Programming-master/generalizedPolicyIteration.m , 1970 Dynamic-Programm…...
稳定币的深度剖析与展望
一、引言 在当今数字化浪潮席卷全球的时代,加密货币作为一种新兴的金融现象,正以前所未有的速度改变着我们对传统货币和金融体系的认知。然而,加密货币市场的高度波动性却成为了其广泛应用和普及的一大障碍。在这样的背景下,稳定…...

均衡后的SNRSINR
本文主要摘自参考文献中的前两篇,相关文献中经常会出现MIMO检测后的SINR不过一直没有找到相关数学推到过程,其中文献[1]中给出了相关原理在此仅做记录。 1. 系统模型 复信道模型 n t n_t nt 根发送天线, n r n_r nr 根接收天线的 MIMO 系…...

Linux --进程控制
本文从以下五个方面来初步认识进程控制: 目录 进程创建 进程终止 进程等待 进程替换 模拟实现一个微型shell 进程创建 在Linux系统中我们可以在一个进程使用系统调用fork()来创建子进程,创建出来的进程就是子进程,原来的进程为父进程。…...

python执行测试用例,allure报乱码且未成功生成报告
allure执行测试用例时显示乱码:‘allure’ �����ڲ����ⲿ���Ҳ���ǿ�&am…...