近期使用apache superset的报表系统,发现使用clickhouse数据源进行数据分析,发现当字段为decimal类型superset将会报如下错误 clickhouse error: No field class for Decimal


经过查看后台日志发现 python3.7/site-packages/sqlalchemy_clickhouse/connector.py 类中没有decimal数据类型

于是依葫芦画瓢在里面添加对decimal数据类型的处理,但是如果是要在线上进行部署,通过pip install sqlalchemy-clickhouse安装clickhouse就需要手动修改此文件,当然如果在内网环境中,你可以通过把superset所依赖的包打包成tar.gz文件,然后丢到你的python目录下,然后通过非pip式安装superset直接一键式部署。

将decimal转成string这种方式是可行,但是并不是比较正规的处理,最后在github上发现一种新的处理方式(sqlalchemy-clickhouse/connector.py at master · cloudflare/sqlalchemy-clickhouse · GitHub),将decimal类型转成了decimalfield类型,然后就可以正常的使用decimal数据字段(虽然网上没有人提及这个不支持decimal的问题,所以怀疑有没有可能是sqlalchemy_clickhouse版本问题,毕竟这样操作繁琐,等后续有解决方案再更新)

网友评论