You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Hive 3.1.3插入ORC ZSTD压缩表报错No enum constant org.apache.orc.CompressionKind.ZSTD

解决Hive 3.1.3中ORC格式ZSTD压缩插入报错问题

问题场景

在Hive 3.1.3(Tez引擎)中创建外部ORC表并指定ZSTD压缩:

CREATE EXTERNAL TABLE test_tez_orc_zstd
( 
  Id bigint
) STORED AS ORC
TBLPROPERTIES('orc.compress'='zstd')
LOCATION '...';

表创建成功后执行插入语句:

INSERT INTO test_tez_orc_zstd SELECT 1;

抛出错误:

No enum constant org.apache.orc.CompressionKind.ZSTD

注:Parquet格式配置ZSTD压缩时可正常运行。

解决方案

1. 修正压缩参数的大小写

ORC的CompressionKind枚举中,ZSTD的枚举值为大写的ZSTD,Hive在映射表属性时可能严格匹配大小写。执行以下语句修改表属性:

ALTER TABLE test_tez_orc_zstd SET TBLPROPERTIES ('orc.compress'='ZSTD');

修改后重新执行插入操作,验证是否解决问题。

2. 检查并升级ORC版本

Hive 3.1.3默认依赖的ORC版本可能较低,ORC 1.4.0及以上版本才正式支持ZSTD压缩。

  • 查看当前ORC jar包版本:在Hive或Tez的lib目录下找到orc-core-*.jar,确认版本号。
  • 若版本低于1.4.0,升级到兼容Hive 3.1.3的ORC版本(如1.5.x或1.6.x系列),替换Hive和Tez lib目录中的旧ORC jar包,重启Hive服务后重试。

3. 确保Tez的ClassPath包含正确的ORC jar包

由于使用Tez引擎,需确认Tez的ClassPath加载了支持ZSTD的ORC jar包:

  • 检查Tez的lib目录下的ORC jar版本是否与Hive一致,若不一致则替换为同版本的支持ZSTD的ORC jar。
  • 分布式部署场景下,确保tez.lib.uris配置指向的路径下包含正确的ORC jar包。

4. 使用全局压缩配置替代表级别配置

若表级别配置仍有问题,可通过Hive全局参数指定ORC压缩方式:

SET hive.exec.orc.compress=ZSTD;
SET hive.exec.orc.compression.strategy=COMPRESSION;

执行上述配置后,重新创建表或插入数据,Hive会使用全局配置的压缩策略。

内容的提问来源于stack exchange,提问作者CompEng

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 15:12:41