zoukankan      html  css  js  c++  java
  • hive查询时出现:严重: org.apache.calcite.runtime.CalciteException: Failed to encode '数学' in character set 'ISO-8859-1'

    报错信息

    HQL在查询语句中有中文时会有如下报错信息:

    严重: org.apache.calcite.runtime.CalciteException: Failed to encode '数学' in character set 'ISO-8859-1'

    (这里中文为“数学”字符)

    出现原因

    出现这种现象的原因一般是因为字符编码问题,默认编码是'ISO-8859-1', 这是一种单字节编码,中文会出现乱码情况,导致报错。

    解决办法

    解决办法有以下两种:

    方法一:关闭基于CBO的查询优化

    直接在hive客户端输入以下代码,并重新进行hql查询就不会再报错了

    set hive.cbo.enable=false;

    方法二:是直接指定字符编码,比如说指定用'UTF8'、'UTF16'等支持中文的编码

    对于CBO的简单介绍:

      CBO的主要目标是通过检查查询中指定的表和条件来生成有效的执行计划,最终减少查询执行时间并降低资源利用率。解析后,查询将转换为代表查询必须执行的操作的逻辑树(抽象语法树),例如读取特定表或执行内部JOIN。提供各种优化方法,例如查询重写,JOIN重新排序,导出隐式谓词和JOIN消除,以生成逻辑上等效的计划。当前模型更倾向于使用密集计划,以实现最大并行度。每个逻辑计划都根据基于不同值的启发式方法的数量分配成本。

       Hive从0.14.0开始引入CBO(Cost-Based Optimizer),对HQL查询语句进行性能优化,在Hive 1.1.0之后,默认开启。HIVE使用Apache Calcite框架实现。

  • 相关阅读:
    ubuntu14.4开启ftp服务
    ubuntu14.4安装gtx970显卡驱动的艰辛历程
    jquery.dataTables的用法
    win7上安装theano keras深度学习框架
    使用BeanUtils设置属性转换String到Date类型
    keras在win7下环境搭建
    Python-try except else finally有return时执行顺序探究
    MySQL-EXPLAIN用法详解
    PHP-Windows下搭建Nginx+PHP环境
    PHP-php.ini中文版
  • 原文地址:https://www.cnblogs.com/s1023/p/12583935.html
Copyright © 2011-2022 走看看