Hive 组内计无重复数,追加每条记录后面
Posted 见贤思小齐,知足常乐呵
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 组内计无重复数,追加每条记录后面的主要内容,如果未能解决你的问题,请参考以下文章
使用记录集中的字段作为每个查询的参数,为记录集中的每条记录运行和追加查询
如何用python的while循环来编写1,2,3,4个数字,能组成多少个互不相同且无重复数
poj2956 Repeatless Numbers(枚举|BFS)
NC41 最长无重复子数组/NC133链表的奇偶重排/NC116把数字翻译成字符串/NC135 股票交易的最大收益/NC126换钱的最少货币数/NC45实现二叉树先序,中序和后序遍历(递归)(代码片段