Hive高频SQL及典型应用场景总结

Hive高频SQL及典型应用场景总结


一、基础操作类高频SQL

1. ‌**创建表(含分区/分桶)**‌

sql 复制代码
CREATE TABLE sales (
  employee_id STRING,
  sale_amount DOUBLE,
  trans_date DATE
) PARTITIONED BY (year INT, month INT)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
STORED AS ORC;  -- 企业常用ORC/Parquet格式优化存储

场景‌

日志表按年月分区,提升查询效率(如按日期过滤时仅扫描特定分区)。

2. ‌数据加载‌

sql 复制代码
LOAD DATA INPATH '/hdfs/path/sales.csv' INTO TABLE sales;  
-- 从HDFS加载数据到分区表

二、分析类高频SQL

1. ‌窗口函数‌

  • Top N场景‌(如部门销售额Top 3员工)
sql 复制代码
SELECT employee_id, sale_amount,
       ROW_NUMBER() OVER (PARTITION BY dept ORDER BY sale_amount DESC) AS rank
FROM sales
WHERE rank <= 3;  -- 避免并列排名
  • 累计计算‌(如用户月度累计访问次数)
sql 复制代码
SELECT user_id, month,
       SUM(visit_cnt) OVER (PARTITION BY user_id ORDER BY month) AS total_visits
FROM user_logs;  -- 实现滚动累计统计

2. ‌LATERAL VIEW + EXPLODE‌(列转行)

sql 复制代码
SELECT user_id, product
FROM orders
LATERAL VIEW EXPLODE(product_list) tmp AS product;  
-- 展开JSON数组字段为多行

3. ‌行转列(Pivot)‌

sql 复制代码
SELECT customer_id, 
       CONCAT_WS(',', COLLECT_SET(product_name)) AS all_products
FROM purchases
GROUP BY customer_id;  
-- 聚合多行数据为字符串

三、高频聚合与条件操作

1. ‌聚合函数+分组‌

sql 复制代码
SELECT dept, AVG(salary), COUNT(DISTINCT employee_id)
FROM employees
GROUP BY dept;  -- 结合DISTINCT去重统计

2. ‌CASE WHEN条件分支‌

sql 复制代码
SELECT user_id,
       CASE WHEN total_spend > 10000 THEN 'VIP'
            WHEN total_spend > 5000 THEN '中级' 
            ELSE '普通' END AS user_level
FROM orders;  -- 用户分层场景

四、高频面试SQL题示例

1. ‌Top N问题‌

sql 复制代码
SELECT * FROM (
  SELECT *, DENSE_RANK() OVER (ORDER BY sale_amount DESC) AS rank
  FROM sales
) tmp WHERE rank <= 5;  -- 处理并列排名

2. ‌时间区间统计‌

sql 复制代码
SELECT user_id,
       SUM(IF(month BETWEEN 1 AND 3, amount, 0)) AS Q1_sales
FROM orders
GROUP BY user_id;  -- 按季度汇总销售额

3. ‌连续登录用户‌

sql 复制代码
SELECT user_id
FROM (
  SELECT user_id, 
         LEAD(login_date, 2) OVER (PARTITION BY user_id ORDER BY login_date) AS date_plus2
  FROM logins
) tmp WHERE DATEDIFF(date_plus2, login_date) = 2;  -- 检测连续3天登录

五、优化类高频操作

1. ‌分区过滤‌

sql 复制代码
SELECT * FROM sales 
WHERE year=2025 AND month=3;  -- 分区裁剪减少数据扫描量

2. ‌避免笛卡尔积‌

sql 复制代码
SELECT a.id, b.name
FROM table_a a
JOIN table_b b ON a.key = b.key;  -- 显式指定JOIN条件

核心总结

高频操作‌:窗口函数、行列转换、条件聚合

典型场景‌:日志分析、用户分层、报表生成

优化重点‌:分区/分桶设计、避免全表扫描、合理使用存储格式(ORC/Parquet)

相关推荐
RE-190133 分钟前
《深入浅出统计学》学习笔记(一)
大数据·数学·概率论·统计学·数理统计·知识笔记·深入浅出
赵部长风向标4 小时前
在本地生活赛道,如何打造属于自己的业务护城河?
大数据
青云交4 小时前
Java 大视界 -- Java 大数据在智能教育学习社区互动模式创新与用户活跃度提升中的应用(426)
java·大数据·学习·flink 实时计算·智能教育社区·互动模式创新·用户活跃度
snowful world7 小时前
flink实验三:实时数据流处理(踩坑记录)
大数据·flink
B站_计算机毕业设计之家7 小时前
基于大数据的短视频数据分析系统 Spark哔哩哔哩视频数据分析可视化系统 Hadoop大数据技术 情感分析 舆情分析 爬虫 推荐系统 协同过滤推荐算法 ✅
大数据·hadoop·爬虫·spark·音视频·短视频·1024程序员节
越来越无动于衷8 小时前
SQL 拼接完全指南
数据库·sql
面向星辰8 小时前
day07 spark sql
大数据·sql·spark
北邮-吴怀玉8 小时前
2.2.2.3 大数据方法论与实践指南-开源服务跟踪工具对比
大数据·开源
亚远景aspice10 小时前
亚远景热烈祝贺保隆科技通过ASPICE CL2评估
大数据·人工智能·物联网
赵谨言11 小时前
基于python大数据的城市扬尘数宇化监控系统的设计与开发
大数据·开发语言·经验分享·python