【问题标题】:how to simplified the calculate efficiency with hive?如何使用 hive 简化计算效率?
【发布时间】:2018-03-01 02:48:31
【问题描述】:

代码在 hive 上运行:

select day,count(mdn)*5 as number from
(select distinct a.mdn,a.day from 
flow a
left outer join
flow b
on a.day=date_add(b.day,-1) and a.mdn=b.mdn
left outer join
flow c
on a.day=date_add(c.day,-2) and a.mdn=c.mdn
left outer join
flow d
on a.day=date_add(d.day,-3) and a.mdn=d.mdn
where b.mdn is null  and c.mdn is null  and d.mdn is null)t 
group by day

代码的逻辑是选择今天的一个mdn,未来三天没有出现的mdn,计算mdn的个数。但是这段代码的效率很低,因为3次join同一个大表流.如何高效简化?

【问题讨论】:

    标签: sql database hive pyspark


    【解决方案1】:

    好吧,你可以使用lead()查看第二天​​并比较日期时间:

    select f.*
    from (select f.*,
                 lead(f.day) over (partition by f.mdn order by f.day) as next_day
          from flow f
         ) f
    where next_day > date_add(day, 3) or next_date is null;
    

    【讨论】:

    • 这里next_date应该是next_day,lead(f.day)应该改成lead(f.day,3)来包含未来三天?
    • @pring 。 . .是和不是。这段代码只需要期待第二天并与当天进行比较。
    • 谢谢!我明白了!
    猜你喜欢
    • 1970-01-01
    • 2012-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-16
    相关资源
    最近更新 更多