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框架实现。

  • 相关阅读:
    VC编译器
    位域
    位域2
    函数调用时刻的堆栈情况
    字节对齐2
    Python学习笔记(6)while循环、while嵌套
    Python学习笔记(7)字符串Str
    Python学习笔记(3)输出、输入、输出输入综合小练习
    Python学习笔记(1)Python介绍、解释器、第一个python程序、注释
    Python学习笔记(4)运算符、运算符小练习
  • 原文地址:https://www.cnblogs.com/s1023/p/12583935.html
Copyright © 2011-2022 走看看