Azure Data Explorer数据摄入阶段如何按时间差规则校验并排除异常数据
ADX摄入Event Hub数据时按时间差过滤事件的实现方案
完全可以在Azure Data Explorer(ADX)的摄入阶段实现该过滤逻辑,无需额外部署中间处理服务,通过ADX原生的更新策略即可实现无效事件的自动丢弃,具体操作步骤如下:
步骤1:创建临时原始摄入表
该表用于接收Event Hub上报的全量原始数据,无需长期留存,后续我们会为其配置极短的保留周期:
.create table RawWebEvents ( timestamp: datetime, EventEnqueuedUtcTime: datetime, // 此处补充你业务所需的其他事件字段,例如 event_id:string, payload:dynamic 等 )
完成表创建后,将Event Hub的摄入连接绑定到该表,确保timestamp和EventEnqueuedUtcTime两个字段都能正确映射。
步骤2:创建最终存储的目标表
该表仅存储符合时间差要求的有效事件,结构和原始表保持一致:
.create table TargetWebEvents ( timestamp: datetime, EventEnqueuedUtcTime: datetime, // 和原始表一一对应的其他业务字段 )
步骤3:定义过滤函数与更新策略
首先创建过滤规则函数,自定义时间差阈值,示例中设置的阈值为30分钟,可根据需求调整:
.create function FilterValidEvents() { RawWebEvents // 过滤规则:仅保留Event入队时间和客户端生成时间差值小于等于阈值的事件 | where EventEnqueuedUtcTime - timestamp <= timespan(30m) // 若存在timestamp为空的异常数据,可额外添加条件 | where isnotnull(timestamp) }
之后为原始表绑定更新策略,数据摄入时自动触发过滤,将有效数据同步到目标表:
.alter table RawWebEvents policy update ``` [ { "IsEnabled": true, "Source": "RawWebEvents", "Query": "FilterValidEvents()", "Target": "TargetWebEvents", "TransactionSize": 1024, "PropagateIngestionProperties": true } ]
步骤4:配置原始表的短保留策略
避免无效的原始数据占用存储空间:
.alter table RawWebEvents policy retention softdelete = 0h recoverability = Disabled
逻辑说明
所有Event Hub上报的事件会先写入临时原始表,原始表数据写入后会立即自动清理,更新策略会在数据写入的同时完成过滤,仅符合条件的事件会被写入目标表留存,不符合条件的事件不会进入目标表,也不会在ADX中留存,完全满足你要求的摄入阶段过滤丢弃的需求。
内容的提问来源于stack exchange,提问作者Redevil
相关产品推荐
相关产品推荐

