在配置单

时间:2016-09-01 10:46:59

标签: hadoop hive unique calculated-columns unique-key

我在配置单元中有一个表格,其中有两列: session_id duration_time ,如下所示:

|| session_id || duration||

    1               14          
    1               10      
    1               20          
    1               10          
    1               12          
    1               16          
    1               8       
    2               9           
    2               6           
    2               30          
    2               22

我希望在以下情况下添加具有唯一ID的新列:

session_id正在更改 duration_time> 15

我希望输出如下:

session_id      duration    unique_id
1               14          1
1               10          1
1               20          2
1               10          2
1               12          2
1               16          3
1               8           3
2               9           4
2               6           4
2               30          5
2               22          6

如何在 hive QL 中做到这一点?

谢谢!

1 个答案:

答案 0 :(得分:1)

SQL表代表无序集。您需要一个指定值的顺序的列,因为您似乎关心排序。例如,这可以是id列或created-at列。

您可以使用累积总和来执行此操作:

select t.*,
       sum(case when duration > 15 or seqnum = 1 then 1 else 0 end) over
           (order by ??) as unique_id
from (select t.*,
             row_number() over (partition by session_id order by ??) as seqnum
      from t
     ) t;