HiveSQL常用技巧

本文介绍了HiveSQL的高效使用技巧,包括去重方法、聚合操作如grouping sets、cube、rollup,利用窗口函数解题,开启并发执行优化union all,行转列的lateral view用法,表连接优化策略,解决数据倾斜问题,以及按月累计去重计算。通过这些技巧,可以提升Hive查询性能和解决问题的能力。

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

1. 去重技巧—用group by替换distinct

  • 取出user_trade中的全部支付用户
## 原有写法
SELECT distinct user_name
FROM user_trade
WHERE dt>'0';
## 优化写法
SELECT user_name
FROM user_trade
WHERE dt>'0'
GROUP BY user_name;
  • 在2019年购买又退款的用户
## 原有写法
SELECT a.user_name
FROM
	(SELECT distinct user_name
	FROM user_trade
	WHERE year(dt)=2019) a
  JOIN
	(SELECT distinct user_name
	FROM user_refund
	WHERE year(dt)=2019) b ON a.user_name=b.user_name;
## 优化写法
SELECT a.user_name
FROM
	(SELECT user_name
	FROM user_trade
	WHERE year(dt)=2019
	GROUP BY user_name) a
  JOIN
	(SELECT user_name
	FROM user_refund
	WHERE year(dt)=2019
	GROUP BY user_name) b ON a.user_name=b.user_name;
  • 在极大的数据量(且很多重复值)时,可以先group by去重,再count()计数,效率高于直接count(distinct **)

2. 聚合技巧–利用窗口函数grouping sets、cube、rollup

  • 性别、城市和等级用户分布
SELECT sex,
	   city,
	   level,
	   count(user_id)
FROM user_info
GROUP BY sex,city,level
GROUPING SETS (sex,city,level);
  • GROUPING SETS() 在group by查询中,根据不同的维度进行聚合,等价于将不同维度的group by结果集进行union all。聚合规则在括号中进行指定。

  • 性别、性别&城市的用户分布

SELECT sex,
	   city,
	   count(user_id)
FROM user_info
GROUP BY 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值