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)

学生成绩管理系统C语言不用链表而用结构体数组如何实现

NC41 最长无重复子数组/NC133链表的奇偶重排/NC116把数字翻译成字符串/NC135 股票交易的最大收益/NC126换钱的最少货币数/NC45实现二叉树先序,中序和后序遍历(递归)(代码片段