Hive 计算配置单元中计数器数据的差异
我将计数器数据存储在配置单元表中。计数器在时间上递增,有时重置为零 我想计算连续行之间的差异,但在计数器重置的情况下,差异为负数。示例数据和预期输出如下所示:Hive 计算配置单元中计数器数据的差异,hive,Hive,我将计数器数据存储在配置单元表中。计数器在时间上递增,有时重置为零 我想计算连续行之间的差异,但在计数器重置的情况下,差异为负数。示例数据和预期输出如下所示: data: 1, 3, 6, 7, 1, 4 difference: 2, 3, 1, -6, 3, NA expected: 2, 3, 1, 1, 3, NA 通常这种操作是通过计算滞后并从数据中减去它来完成的。在负差的情况下,我们应该只输入lag的值,下面是函数的一个示例,它在R/dplyr中执行此操作: d
data: 1, 3, 6, 7, 1, 4
difference: 2, 3, 1, -6, 3, NA
expected: 2, 3, 1, 1, 3, NA
通常这种操作是通过计算滞后并从数据中减去它来完成的。在负差的情况下,我们应该只输入lag的值,下面是函数的一个示例,它在R/dplyr中执行此操作:
diff_counter <-function(x){
# count difference between measurements
lag <- lag(x)
dx <- x - lag
reset_idx <- dx < 0 & !is.na(dx)
dx[reset_idx] = lag[reset_idx]
return(dx)
}
diff_counter假设t
是您的日期时间列,并且计数器按该顺序递增,您可以将CASE
块与LEAD
函数一起使用,如下所示
SELECT x
,CASE
WHEN (
LEAD(x) OVER (
ORDER BY t
) - x
) > 0
THEN LEAD(x) OVER (
ORDER BY t
) - x
ELSE LEAD(x) OVER (
ORDER BY t
)
END AS diff
FROM yourtable;
| X | DIFF |
|---|--------|
| 1 | 2 |
| 3 | 3 |
| 6 | 1 |
| 7 | 1 |
| 1 | 3 |
| 4 | (null) |
是否有任何列指定排序?是的,有一个时间列指定数据在时间中的顺序是的,这是我想要的,但还有一个问题:如何使用GROUP BY的这种构造?t不在GROUP BY子句中,我得到“表达式不在GROUP BY key中”@PawelStradowski:您可以用别名嵌套查询,并在其上方使用GROUP BY
。请注意,在使用group by时,应将所有列包括在group by
中的select
子句中。试着更多地了解如何在sql中使用GROUPBY,如果您不清楚,或者您可能会问另一个问题。我希望这个答案对你有帮助,解决你最初的问题。