原因
当使用presto将clickhouse作为数据源进行查数据,如果其中有字符类型的话,比如说String或者FixString时,当我们对该字段进行筛选时,会报错 Cannot apply operator: varchar = varbinary ,意思是说 是二进制字符串和字符串类型进行等值操作。
通过查github,我们得知presto 对于clickhouse 数据源的话,对于字符串类型,presto 都会将其视为二进制字符串进行处理,所以我们进行字符串字段的操作需要将其对待为二进制字符处理
解决
- 通过to_utf8 将查询条件转化为二进制字符串类型,然后进行查询,该方法不建议使用,与代码耦合过于严重
- 配置参数。在clickhouse的catalog中配置 clickhouse.map-string-as-varchar=true。 对应问题的issue 在该链接下https://github.com/trinodb/trino/issues/7102 , 如果提示不支持该参数,需要查看自己用的trino版本,在358以后的版本都是支持该参数的