在不规则的时间序列上使用配置单元执行滞后查询

时间:2017-07-15 00:11:52

标签: sql hive hiveql

我试图在一个不规则的时间序列中得到一个我的专栏的滞后。数据如下

time stamp (seconds), temperature
1, 20
4,12
6,13
7,18

新数据集应如下

time stamp (seconds), temperature, lagged_1_temperature
1, 20,0
4,12,0
6,13,0
7,18,13

正如所见,最后一行的延迟是非零。

对于典型的延迟,我在我的spark应用程序中使用了下面的hive查询。

"select timestamp, value ,lag(,1) OVER (ORDER BY timestamp) as lagged_1_value"

我可以更改上面的配置单元查询,以便为我提供我想要的结果

2 个答案:

答案 0 :(得分:1)

您可以使用case表达式执行此操作。

select t.*,
case when timestmp-coalesce(lag(timestmp,1) over(order by timestmp),0)=1 
then coalesce(lag(temperature,1) over(order by timestmp),0)
else 0 end as lagged_1_termperature
from t

答案 1 :(得分:0)

简单的left join可能更有效:

select t.*,
       coalesce(tprev.value, 0) as prev_value
from t left join
     t tprev
     on tprev.timestmp = t.timestmp - 1;