Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql HiveQL中的间隔_Sql_Database_Hive_Hiveql - Fatal编程技术网

Sql HiveQL中的间隔

Sql HiveQL中的间隔,sql,database,hive,hiveql,Sql,Database,Hive,Hiveql,我有一个由两列组成的表,时间和值列。时间列是一个浮点值,该值是一个字符串值 我希望将具有相同值的所有行分组在一起,其中时间列中两个值之间的距离最大为0.001,并且返回这些组的间隔 例如: 我的表格如下: ==================== | time | value | ==================== | 0.001 | a | | 0.00001| a   | | 0.002 | a | | 0.002 | b |

我有一个由两列组成的表,时间和值列。时间列是一个浮点值,该值是一个字符串值

我希望将具有相同值的所有行分组在一起,其中时间列中两个值之间的距离最大为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

提前多谢

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
    是个坏主意。
    它不会给你期望的结果

  • 附言

  • 我使用的是
    IF
    而不是
    CASE
    ,因为出于某种原因
    CASE
    会产生以下错误:

    失败:IndexOutOfBoundsException索引:2,大小:2

  • 为此使用
    FLOAT
    是个坏主意。
    它不会给你期望的结果


  • 您使用的是什么版本的SQL?@TimBiegeleisen我想问这个关于标准SQL的问题可能更容易,但实际上,我想在HiveQL中使用它。。。谢谢您使用的是什么版本的SQL?@TimBiegeleisen我想问这个关于标准SQL的问题可能更容易,但实际上,我想在HiveQL中使用它。。。谢谢