图解并行思想HIVE获取消费金额topN的用户ID
Posted 小基基o_O
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了图解并行思想HIVE获取消费金额topN的用户ID相关的知识,希望对你有一定的参考价值。
并行思想
- 不使用并行,时间消耗约1500
- 使用并行,并行度设为5,把500切成5个100
分别从每个100找最大的3个,得到15个
从这15个里找最大的3个
时间消耗约300(≈5倍)
场景
从10亿用户中 获取 消费前5000的 用户ID
uid | amount |
---|---|
1 | 23.48 |
2 | 7888.33 |
… | |
1000000000 | 367.55 |
错误方案
- 全局排序速度较慢
SELECT uid,amount FROM t ORDER BY amount DESC LIMIT 5000;
可行方案
- 按用户ID取余进行分区(此处设
40
) - 分区内(并行)排序
- 筛选各分区topN
- 全局排序选取topN
WITH
t1 AS (
SELECT
uid,
amount,
RANK() OVER (PARTITION BY (uid % 40) ORDER BY amount DESC)r
FROM t
),
t2 AS (
SELECT uid,amount FROM t1 WHERE r <= 5000
)
SELECT uid,amount FROM t2 ORDER BY amount DESC LIMIT 5000;
以上是关于图解并行思想HIVE获取消费金额topN的用户ID的主要内容,如果未能解决你的问题,请参考以下文章
大数据Hive3.x数仓开发窗口函数案例:连续N次登录的用户;级联累加求和;分组TopN