事件时间
所有流数据都应有事件时间
流指数据在哪里运行,每个数据包含一个事件时间。 Timeplus将此属性作为事件的一个重要特征。
事件时间用来确定事件发生的时间,例如一个人生日。 当下单时,当用户登录系统时,它可以是确切的时间戳。 当发生错误时,或当一个 IoT 设备报告其状态。 如果事件中没有合适的时间戳属性,Timeplus将根据数据摄取时间生成事件时间。
事件时间通常是 日期时间
类型,其第二精度为 日期时间64
类型的毫秒。
为什么事件时间受到不同的处理
事件时间几乎在任何地方在 Timeplus 数据处理和分析工作流程中使用:
- 在执行基于时间窗口的聚合时, 例如 tumble 或 hop 以获取每次窗口中的下载数据或外部数据, Timeplus将使用事件时间来决定某些事件是否属于特定窗口
- 在这种具有时间敏感性的分析中,事件时间也用来识别不合顺序的事件或较晚的事件, 并丢弃它们以便及时获得串流洞察力。
- 当一个数据流与另一个数据流合并时,事件时间是整理数据的钥匙。 没有想到两个事件发生在完全相同的毫秒。
- 事件时间也发挥重要作用来设备数据在流中保存的时间
如何指定事件时间
在数据摄取过程中指定
当你 摄取数据 到 Timeplus 时,你可以在数据中指定一个属性来最能代表事件时间。 即使该属性是在 字符串
类型中,Timeplus将自动转换为时间戳以便进一步处理。
如果您不在向导中选择属性,则Timeplus将使用摄取时间来显示事件时间。 当Timeplus接收数据时。 这可能对大多数静态或维数据很有用,例如带有邮政编码的城市名称。
在查询时指定
tumble 或 hop 窗口函数将可选参数作为事件时间列。 默认情况下,我们将使用每个数据中的事件时间。 然而,您也可以指定一个不同的列作为事件时间。
举出租车乘客为例。 数据流可以是
车号 | 用户ID | 旅行开始 | trip_end | 费用 |
---|---|---|---|---|
c001 | u001 | 2022-03-01 10:00:00 | 2022-03-01 10:30:00 | 45 |
数据可能来自Kafka专题。 配置完成后,我们可以将 trip_end
设置为 (默认) 事件时间。 所以,如果我们想要在每个小时内找出多少乘客,我们就可以这样运行查询
select count(*) from tumble(taxi_data,1h) group by window_end
此查询使用 trip_start
,默认事件时间来运行聚合。 如果旅客在午夜时00时01分结束行程,则行程将包括在00时00分-00时59时窗内。
在某些情况下,你作为分析员可能想要集中注意乘客乘坐出租车的人数。 而不是每小时离开出租车, 然后您可以设置 trip_end
作为查询的事件时间,通过 tumblet(taxi_data,trip_end,1h)
完整查询:
select count(*) from tumble(taxi_data,trip_end,1h) group by window_end