Sql HiveQL中的间隔
我有一个由两列组成的表,时间和值列。时间列是一个浮点值,该值是一个字符串值 我希望将具有相同值的所有行分组在一起,其中时间列中两个值之间的距离最大为0.001,并且返回这些组的间隔 例如: 我的表格如下: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 |
====================
| 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,大小:2FLOAT
是个坏主意。它不会给你期望的结果
IF
而不是CASE
,因为出于某种原因CASE
会产生以下错误:
失败:IndexOutOfBoundsException索引:2,大小:2FLOAT
是个坏主意。它不会给你期望的结果
您使用的是什么版本的SQL?@TimBiegeleisen我想问这个关于标准SQL的问题可能更容易,但实际上,我想在HiveQL中使用它。。。谢谢您使用的是什么版本的SQL?@TimBiegeleisen我想问这个关于标准SQL的问题可能更容易,但实际上,我想在HiveQL中使用它。。。谢谢