DISTINCT不会再shuffer进行一次聚合操作,会全部传入给reduce进行处理!相对没有group by效率高!
采用去重统计的办法:
--原始SQL,不考虑Uid为空 SELECT COUNT(uid) AS Pv
, COUNT(DISTINCT uid) AS Uv
FROM UserLog;
一个方式是改写,把DISTINCT改成普通的COUNT:
复制代码
SELECT SUM(PV) AS Pv
, COUNT(*) AS UV
FROM (
SELECT COUNT(*) AS Pv
, uid
FROM UserLog
GROUP BY uid
) a;
复制代码
如果发现是特殊值引起的长尾(例如NULL特别多),则可以考虑先过滤再处理
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。