背景
clickhouse数据库有registration_record表记录门急诊信息,visit_id与org_code为合并主键。每日会有增量数据入库,会有主键重复的情况出现,所以查询时增加final关键字。
问题描述
使用 select count(visit_id) from registration_record final 查询clickhouse数据库,计算门急诊人次指标。 指标值比select count(distinct visit_id) from registration 查询的值大。fianl关键字失效了。
原因调查
final关键字失效了,通过调查指标计算时各个进行的业务,推测可能是因为查询的同时有业务数据插入造成了final失效。查了一下“文心一言”得出final的失效场景如下:
1.数据分布不均匀:如果数据在ClickHouse集群中的分布不均匀,导致某些节点上的数据量远大于其他节点,那么在执行包含final关键字的查询时,可能会因为某些节点上的数据还没有准备好而导致查询结果不准确。
2.并发查询过多:如果同时执行大量并发查询,而每个查询都包含final关键字,那么ClickHouse服务器可能会因为处理不过来而无法保证每个查询的结果都是最终的。
3.数据更新频繁:如果数据更新非常频繁,导致数据在查询执行期间不断变化,那么使用final关键字可能会得到不一致的结果。