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;