首页 > 代码库 > Hive 组内计无重复数,追加每条记录后面
Hive 组内计无重复数,追加每条记录后面
今天无意中碰到一个很简单的计算逻辑,但是用hive想了一大会才实现。
示例表数据:
需求逻辑:
给每条记录追加一个字段,用于统计按照p1和p2字段分组后,每个组中的num的数目(去重后的count)。
示例结果:
Mysql 超级简单的一句:
select id, num, p1, p2, count(distinct num) over (PARTITION by p1,p2) as f from test_z;
Hive里
会报distinct有问题,去掉的话,明显与要求逻辑不符合啊。
想了一会还是用 dense_rank 和 join 实现了。以后再发掘其他的简单方法吧:
select b.id, b.num, b.p1, b.p2, a.f from ( select p1, p2, max(f) as f from ( select id, num, p1, p2, dense_rank() over (PARTITION by p1, p2 order by num) as f from test_z )a1 group by p1,p2 )a join test_z b on a.p1=b.p1 and a.p2=b.p2;
上面的a表太复杂,还可以用简单的group by 和 count(distinct)把a表逻辑换了。
select p1, p2, count(distinct num) as f from test_z group by p1,p2
Hive 组内计无重复数,追加每条记录后面
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。