我正在尝试对事件数据进行会话化,并发现一个导致查询中断的情况。
我有大约1300台机器,每天产生约25万个事件。每台机器报告一个EventCode,SequenceNumber(0到255),DateTime(精确到秒),InAmount,OutAmount,RoundsCount。
我当前的代码使用DateTime排序的LEAD(),LAG()函数来确定会话的开始和结束时间。我发现的问题是,有时SequenceNumber与DateTime字段的顺序不一致。
示例数据
> +-----------+----------------+---------------------+----------+-----------+-------------+
> | EventCode | SequenceNumber | DateTime | InAmount | OutAmount | RoundsCount |
> +-----------+----------------+---------------------+----------+-----------+-------------+
> | 10051300 | 198 | 2019-06-25 15:22:54 | 16779000 | 14814642 | 142483 |
> | 10000100 | 182 | 2019-06-25 15:22:58 | 16770950 | 14809091 | 142321 |
> | 10000901 | 200 | 2019-06-25 15:23:05 | 16779000 | 14814642 | 142483 |
> | 13328100 | 201 | 2019-06-25 15:23:05 | 16779000 | 14814642 | 142483 |
> | 13328500 | 202 | 2019-06-25 15:23:05 | 16779000 | 14814642 | 142483 |
> | 10003505 | 199 | 2019-06-25 15:23:10 | 16779000 | 14814642 | 142483 |
> | 10003503 | 204 | 2019-06-25 15:23:56 | 16779000 | 14814642 | 142483 |
> +-----------+----------------+---------------------+----------+-----------+-------------+
当数据为ORDER BY DateTime时,SequenceNumber 182和199发生故障。
我需要使用SequenceNumber对数据进行排序,除了SequenceNumber每天从0到255多次,并且并非每个数字都会被报告。