我正在尝试为Redshift 中的备用记录生成序列号
输入表
| id | previousid | idtype | timestamp |
|----- |------------|--------|--------------------|
| aaaa | | INPUT | 2020-07-03 9:09:23 |
| bbbb | aaaa | OUTPUT | 2020-07-03 9:09:23 |
| cccc | bbbb | INPUT | 2020-07-03 9:09:24 |
| dddd | cccc | OUTPUT | 2020-07-03 9:09:24 |
| ffff | eeee | OUTPUT | 2020-07-03 9:09:25 |
| eeee | dddd | INPUT | 2020-07-03 9:09:25 |
| hhhh | gggg | OUTPUT | 2020-07-03 9:09:25 |
| gggg | ffff | INPUT | 2020-07-03 9:09:25 |
所需输出
| id | previousid | idtype | timestamp | GroupNo |
|------|---------------|--------|--------------------|---------|
| aaaa | | INPUT | 2020-07-03 9:09:23 | 0 |
| bbbb | aaaa | OUTPUT | 2020-07-03 9:09:23 | 0 |
| cccc | bbbb | INPUT | 2020-07-03 9:09:24 | 1 |
| dddd | cccc | OUTPUT | 2O2O-07-03 9:09:24 | 1 |
| eeee | dddd | INPUT | 2020-07-03 9:09:25 | 2 |
| ffff | eeee | OUTPUT | 2020-07-03 9:09:25 | 2 |
| gggg | ffff | INPUT | 2020-07-03 9:09:25 | 3 |
| hhhh | gggg | OUTPUT | 2020-07-03 9:09:25 | 3 |
我现在在做什么
我目前正在做row_number() over (partition by eventtype order by timestamp desc) as GroupNo
用于生成GroupNo属性。
当前解决方案的问题
因为时间戳字段不是唯一的,所以我不应该在这个字段上排序。
我想做什么
- 我想在previouid的基础上生成行号
- 我想检查每个输入事件是否都有相关的输出事件
如有任何帮助,我们将不胜感激。
您的流程可以使用"sql会话"技术在Redshift中完成。
本质上,您使用许多LAG((语句来比较特定窗口中的数据,然后比较结果以完成最终分类。
- https://sonra.io/2017/08/14/redshifts-window-functions-advanced-use-case-sessionization/
- https://www.dataiku.com/learn/guide/code/reshaping_data/sessionization.html
- https://blog.modeanalytics.com/finding-user-sessions-sql/