引用Hive SQL中计算列的输出

时间:2016-10-31 18:48:42

标签: sql sql-server hadoop hive

我在Excel中进行了自引用/递归计算,需要将其移动到Hive SQL。基本上,只有当具体列的总和加上前一次计算的结果大于0时,该列才需要SUM这两个值。

数据如下,A是值,B是预期输出:

|  A  |  B  |
|-----|-----|
|  -1 |  0  |
|  2  |  2  |
|  -2 |  0  |
|  2  |  2  |
|  2  |  4  |
|  -1 |  3  |
|  2  |  5  |

在Excel中,它将在B列中写为:

=MAX(0,B1+A2)

SQL中的问题是您需要获得当前计算的输出。我想我已经在SQL中对它进行了如下排序:

DECLARE @Numbers TABLE(A INT, Rn INT)

INSERT INTO @Numbers VALUES (-1,1),(2,2),(-2,3),(2,4),(2,5),(-1,6),(2,7);

WITH lagged AS
(
    SELECT A, 0 AS B, Rn
    FROM @Numbers
    WHERE Rn = 1

    UNION ALL

    SELECT i.A, 
        CASE WHEN ((i.A + l.B) >= 0) THEN (i.A + l.B)
            ELSE l.B
        END, 
        i.Rn
    FROM @Numbers i INNER JOIN lagged l
    ON i.Rn = l.Rn + 1
)
SELECT *
FROM lagged;

但这就是Hive,它不支持CTE,因此我需要轻轻一蹴而过。这可能使用LAG / LEAD吗?到目前为止,我的大脑正在受伤!

1 个答案:

答案 0 :(得分:0)

我最初认为,首先计算所有元素的总和直到每个等级,然后使用负面元素以某种方式修复值。

然而,一个将B列归零的重大否定因素将在总和中继续存在,并将使所有后续元素为负。

正如戈登评论的那样 - 0是计算中的最大值=MAX(0,B1+A2)取决于它发生的先前位置,并且似乎无法在分析前提前计算它们。