现象:
HQL语句中包含中文,执行HQL时报错:
Org.Apache.calcite.runtime.CalciteException: Failed to encode ‘全国’ in character set 'ISO-8859-1’
原因:
Hive从0.14.0开始引入CBO(Cost-Based Optimizer),对HQL查询语句进行性能优化,在Hive 1.1.0之后,默认开启。HIVE使用Apache Calcite框架实现。
HQL语句字符串传入Calcite时并没有指定编码,导致使用机器默认编码ISO-8859-1,但是某些字符不再该范围,导致抛错;
解决;
set hive.cbo.enable=false;