Impala 如何填充列以区分一组行与一组中的其他行?
How to fill a column to differentiate a set of rows from other rows in a group in Impala?
我在 Impala 中有以下 table。
|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 | |
我想制作一个新的table如下:
|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
在 [=16] 分组之后=],以区分每个 ClientId
.
的不同会话
我为此创建了 IsNewSession
列,但不确定如何迭代行以创建 SessionId
列。
如有任何帮助,我们将不胜感激!
您可以使用累计和:
select t.*,
sum(isnewsession) over (partition by clientid order by logtime) as sessionid
from t;
我在 Impala 中有以下 table。
|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 | |
我想制作一个新的table如下:
|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
在 [=16] 分组之后=],以区分每个 ClientId
.
我为此创建了 IsNewSession
列,但不确定如何迭代行以创建 SessionId
列。
如有任何帮助,我们将不胜感激!
您可以使用累计和:
select t.*,
sum(isnewsession) over (partition by clientid order by logtime) as sessionid
from t;