zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    如何重写Java中的equals方法
    如何阅读论文
    新的开始
    react父组件调用子组件方法
    关于 webpack 的研究
    浅析HTTP代理原理
    Maven POM详解
    项目实战
    项目实战-Gulp使用
    AngularJS 项目开发实战
  • 原文地址:https://www.cnblogs.com/skyEva/p/6655946.html
Copyright © 2011-2022 走看看