zoukankan      html  css  js  c++  java
  • 大数据记录2

    分组求最新视图

    目前业界主流的求最新视图的方法有两种:

    求最大值自连接
    --假设现在有表T:user_id,update_time
    --分组求最大值自连接
    select 
    user_id,
    max(update_time) as max_time 
    from t
    group by user_id
    join t t2
    on t.user_id = t2.user_id and t.max_time = t2.max_time
    排名函数取第一
    --主流排名函数取第一(注意hql和spark sql的写法可以不一样,下面是hql的写法)
    select * from 
    (
        select 
        user_id,
        update_time,
        row_number() over(
            partition by user_id
            order by update_time DESC
        ) as rank
        from t
    ) t2
    where rank = 1

    前者的优点是能最大程度的进行分区内的局部聚合,缺点是可能产生两个job,且自连接需要再次扫描一次全表。

    后者则是主流的做法,不仅可以取最新视图,也可以取TopN,缺点是需要开窗以及排序。

    row_number() over(
            partition by user_id
            order by update_time DESC
        ) 

    根据user_id分组可能会有多个组,每个组内根据update_time进行排序。每组内都会自动生成序号,从1开始,每组有多少数据就生成到几的序号。有多少分组就有多少个从1开始的序号。

     

  • 相关阅读:
    Python文件相关的操作
    Python运算符
    字符串方法
    Python列表的增删改查和元祖
    压测
    jmeter相关使用
    charles的使用
    接口测试
    编程珠玑之关键字(1)--《c语言深度剖析》整理(转)
    循环单链表操作(转)
  • 原文地址:https://www.cnblogs.com/shaozhiqi/p/12166423.html
Copyright © 2011-2022 走看看