如何填充一列以区分 Impala 组中的一组行与其他行?
Posted
技术标签:
【中文标题】如何填充一列以区分 Impala 组中的一组行与其他行?【英文标题】:How to fill a column to differentiate a set of rows from other rows in a group in Impala? 【发布时间】:2020-11-19 18:05:15 【问题描述】:我在 Impala 中有下表。
|LogTime|ClientId|IsNewSession|
|1 |123 |1 |
|2 |123 | |
|3 |123 | |
|3 |666 |1 |
|4 |666 | |
|10 |123 |1 |
|23 |666 |1 |
|24 |666 | |
|25 |444 |1 |
|26 |444 | |
我要新建一个表格如下:
|LogTime|ClientId|IsNewSession|SessionId|
|1 |123 |1 |1 |
|2 |123 | |1 |
|3 |123 | |1 |
|3 |666 |1 |1 |
|4 |666 | |1 |
|10 |123 |1 |2 |
|23 |666 |1 |2 |
|24 |666 | |2 |
|25 |444 |1 |1 |
|26 |444 | |1 |
基本上,我想让SessionId
列在每组行中都有一个唯一的会话ID,直到IsNewSession
列中的1
值在ClientId
分组之后,以区分每个@987654327 的不同会话@。
我已经创建了IsNewSession
列,但不确定如何迭代行以创建SessionId
列。
任何帮助将不胜感激!
【问题讨论】:
【参考方案1】:您可以使用累积和:
select t.*,
sum(isnewsession) over (partition by clientid order by logtime) as sessionid
from t;
【讨论】:
哇,不知道这个!感谢您的明确回答! :)以上是关于如何填充一列以区分 Impala 组中的一组行与其他行?的主要内容,如果未能解决你的问题,请参考以下文章