hiveql中的sql间隔

sg3maiej  于 2021-06-28  发布在  Hive
关注(0)|答案(1)|浏览(315)

我有一个由两列组成的表,时间和值列。时间列是一个浮点值,该值是一个字符串值。
我想将具有相同值的所有行分组在一起,其中时间列中两个值之间的距离最大为0.001,并且返回这些组的间隔。
示例:我的表如下所示:

====================
|  time   | value  |
====================
|  0.001  | a      |
|  0.00001| a      |
|  0.002  | a      |
|  0.002  | b      |
|  0.003  | b      |
|  0.0031 | a      |
====================

期望结果:

======================================
|  time_min   |  time_max  |  value  |
======================================
|  0.001      |  0.002     | a      |
|  0.002      |  0.003     | b      |
|  0.0031     |  0.0031    | a      |
======================================

是否有一个hiveql查询可以做到这一点(尽可能高效)?配置单元版本:1.2
提前多谢了!

cngwdvgl

cngwdvgl1#

select      min(time)   as time_min
           ,max(time)   as time_max
           ,value       as value

from       (select      time
                       ,value

                       ,count(is_gap) over 
                        (   
                            partition by    value 
                            order by        time
                        )   as is_gap_seq

            from       (select      time
                                   ,value

                                   ,if 
                                    (
                                        time - lag(time) over 
                                            (partition by value order by time) > 0.001
                                       ,1
                                       ,null
                                    ) as is_gap

                        from        t
                        ) t
            ) t

group by    value
           ,is_gap_seq
;

附笔
我在用 IF 而不是 CASE 因为某种原因 CASE 产生以下错误:
失败:indexoutofboundsexception索引:2,大小:2
使用 FLOAT 为此目的是个坏主意。
它不会给你预期的结果。

相关问题