计算Hive中计数器数据的差异

0mkxixxg  于 2021-06-26  发布在  Hive
关注(0)|答案(1)|浏览(335)

我在配置单元表中存储了计数器数据。计数器随时间递增,有时会重置为零。
我想计算连续行之间的差异,但如果计数器重置,则差异为负。示例数据和预期输出如下:

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)
}

我能在Hive里做类似的事情吗?
向pawe问好ł

vhmi4jdf

vhmi4jdf1#

假设 t 是datetime列,计数器按该顺序递增,可以使用 CASELEAD 像这样运作。

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) |

相关问题