Superset版本 1.3.0
查询结果会比正确结果少两条数据
首先我先讲述我是如何发现这个问题的,准确的说是运营如何发现这个问题的。
数据有四列,分别是’Time’ ‘pid’ ‘eid’ ‘cnt’ ,首先我们在clickhouse客户端进行操作,其中我限定pid=’609’,然后eid进行group by 操作,然后sum(cnt),可以看到数据有三条
我从superset进行同样的操作,需要注意的是我上面在clickhouse客户端操作的SQL就是在superset上操作view sql生成的SQL语句,所以他们肯定是相同的操作。
可以看到superset只有一条结果返回,经过我监控query_log日志中的SQL语句发现superset请求的SQL语句确实没有什么问题,但是他在接收到结果之后进行了一些操作会导致数据少两条。
经过多方排查以及询问,发现最后是superset连接clickhouse使用的协议导致的,首先superset连接clickhouse使用的是开源的第三方的库叫做 clickhouse-sqlalchemy ,它支持两种连接clickhouse的协议,分别是http以及native(TCP)协议其中我们默认使用的是http协议,反映出来的url就是这么写 :
clickhouse://bigdata:XXXXXXXXXX@127.0.0