计算Hive中计数器数据的差异
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了计算Hive中计数器数据的差异相关的知识,希望对你有一定的参考价值。
我有计数器数据存储在Hive表中。计数器在时间上递增,有时会重置为零。
我想计算连续行之间的差异,但是在计数器重置的情况下,差异是负的。这里有一个示例数据和预期输出:
data: 1, 3, 6, 7, 1, 4
difference: 2, 3, 1, -6, 3, NA
expected: 2, 3, 1, 1, 3, NA
通常,这种操作是通过计算滞后并从数据中减去它来完成的。在负差异的情况下,我们应该只设置滞后的值,这是函数的一个例子,它在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)
}
我可以在Hive中做类似的事情吗?
关心Paweł
答案
假设t
是你的datetime列并且计数器按此顺序递增,你可以使用带有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) |
以上是关于计算Hive中计数器数据的差异的主要内容,如果未能解决你的问题,请参考以下文章