使用 Impala 获取连续行程的计数

Posted

技术标签:

【中文标题】使用 Impala 获取连续行程的计数【英文标题】:Using Impala get the count of consecutive trips 【发布时间】:2019-10-04 17:17:06 【问题描述】:

样本数据

touristid|day
ABC|1
ABC|1
ABC|2
ABC|4
ABC|5
ABC|6
ABC|8
ABC|10

输出应该是

touristid|trip
ABC|4

4 后面的逻辑是连续天数不同的连续天数 sqq 1,1,2 是第 1,然后 4,5,6 是第 2,然后 8 是第 3,10 是第 4 我想要这个输出使用 impala 查询

【问题讨论】:

【参考方案1】:

使用 lag() 函数获取前一天,如果 day-prev_day>1 则计算 new_trip_flag,然后 count(new_trip_flag)。

演示:

with table1 as (
select 'ABC' as touristid, 1  as day union all
select 'ABC' as touristid, 1  as day union all
select 'ABC' as touristid, 2  as day union all
select 'ABC' as touristid, 4  as day union all
select 'ABC' as touristid, 5  as day union all
select 'ABC' as touristid, 6  as day union all
select 'ABC' as touristid, 8  as day union all
select 'ABC' as touristid, 10 as day 
)

select touristid, count(new_trip_flag) trip_cnt
  from 
       ( -- calculate new_trip_flag
         select touristid,
                case when (day-prev_day) > 1 or prev_day is NULL then true end  new_trip_flag
           from       
                ( -- get prev_day
                  select touristid, day, 
                         lag(day) over(partition by touristid order by day) prev_day
                    from table1
                )s
        )s
 group by touristid;

结果:

touristid   trip_cnt    
ABC         4   

这同样适用于 Hive。

【讨论】:

以上是关于使用 Impala 获取连续行程的计数的主要内容,如果未能解决你的问题,请参考以下文章

在 impala 中查找连续值

按连续计数 Pandas Python 分组 [关闭]

销量连续下滑 62年历史雪佛兰Impala正式停产

魔数汽车大型车销量连续下滑 雪佛兰Impala能否延续辉煌

Sqlite - 如果有相同的号码,如何查询呼叫日志继续获取单个记录只有连续记录计数?

Impala 查询以获取计数聚合函数中使用的列的样本值