Hive2向zlib压缩ORC表插入数据报No enum constant错误求助
Hive 2.0创建zlib压缩ORC表报错解决方案
根因定位
报错栈的核心提示java.lang.IllegalArgumentException: No enum constant org.apache.orc.CompressionKind.zlib直接指向问题:ORC的压缩类型枚举类CompressionKind的所有合法值均为全大写格式,你建表时指定压缩参数使用了小写的zlib,无法匹配到对应的枚举常量导致任务抛出异常。
修复步骤
- 第一步:删除之前创建的错误配置的ORC zlib表
DROP TABLE IF EXISTS orders_orc_zlib;
- 第二步:重新创建ORC表,压缩参数指定为全大写的
ZLIB
示例建表语句:
CREATE TABLE orders_orc_zlib ( order_id INT, cust_id STRING, order_date DATE, order_time STRING, freight_charges DOUBLE, order_salesman STRING, order_posted_date DATE, order_ship_date STRING ) STORED AS ORC TBLPROPERTIES ( "orc.compress" = "ZLIB" );
如果你是通过会话参数设置全局压缩格式,也需要用大写:
SET hive.exec.orc.default.compress=ZLIB;
- 第三步:重新执行数据插入语句即可
INSERT INTO TABLE orders_orc_zlib SELECT * FROM orders_orc;
额外说明
Snappy压缩可以正常使用是因为你之前配置Snappy的时候用了全大写的SNAPPY参数值,刚好匹配了枚举类的常量定义,和zlib的问题本质没有区别。
内容的提问来源于stack exchange,提问作者Narasimha Maiya
相关产品推荐
相关产品推荐

