常更新:工作里数据处理的一些坑
参考资料
sql里null对计算的影响
- 背景:升级后的业务表在hive里存储,同时,为了加速前端查询也copy了一份到clickhouse(ck)里,后续希望有关业务表的使用都切换到ck上,旨在提升数据取用的时效性
- 目的:历史上,业务表被用于告警检测的数据源,利用presto引擎来检索其数据,并生成告警指标,现在准备将检索引擎切换至ck
- 问题:其中有一个告警指标sql计算为:r1=sum(a+b)/sum(c)。切换ck后,使用相同的sql语法,但结果不一致,后排查是由于
null 导致
- 结论:由于业务原因,
b字段在某些维度下存在null值,结果导致 a + b(null) = null,进而导致sum(78 + null + 22 + ...),原本需要被计算的a被引擎忽略,导致告警指标计算结果错误。业务上,即使b为null,也不能忽略a的值,即a与b需要单独求和。在hive写入ck时,对null进行了默认值处理,所以在ck里使用同样的sql出现不同的查询结果。
- 总结:使用sql对数据进行加工时,假设上游不保证字段非null,内部需要预设对null字段的处理