如何配置Trino使用的parquet-mr版本以读取Flink写入的数组字段
Trino查询含数组字段的Parquet表报PrimitiveColumnIO转GroupColumnIO错误
问题场景
运行以下Trino查询时触发类型转换错误:
select * from table where date_key = '2023-03-05' limit 10
错误信息
Trino Error trino error: class org.apache.parquet.io.PrimitiveColumnIO cannot be cast to class org.apache.parquet.io.GroupColumnIO (org.apache.parquet.io.PrimitiveColumnIO and org.apache.parquet.io.GroupColumnIO are in unnamed module of loader io.trino.server.PluginClassLoader @259fe541)
排查结果
- 仅查询包含数组字段的表时触发错误,查询其他数据类型字段的表正常。
- 根因推测为Parquet-mr版本不匹配:当前Trino集群版本为378,而目标Parquet文件由使用parquet-mr 1.12.3的Flink应用写入,该版本与Trino 378内置的parquet-mr版本存在API兼容性差异。
解决方法
1. 升级Trino版本
Trino 378内置的parquet-mr版本(通常为1.11.1)与1.12.3存在API变更,导致数组字段解析时出现类型转换错误。升级到Trino 400及以上版本,这类版本已适配更高版本的parquet-mr,可兼容Flink 1.12.3写入的Parquet文件。
2. 降级Flink写入的parquet-mr版本
若暂时无法升级Trino,可修改Flink应用的依赖,将parquet-mr版本降级至与Trino 378兼容的1.11.1版本:
- Maven依赖配置:
<dependency> <groupId>org.apache.parquet</groupId> <artifactId>parquet-hadoop</artifactId> <version>1.11.1</version> </dependency>
- Gradle依赖配置:
implementation 'org.apache.parquet:parquet-hadoop:1.11.1'
重新打包并运行Flink应用写入数据后,Trino即可正常查询数组字段。
3. 调整Hive连接器兼容配置(辅助方案)
Trino的Hive连接器无直接指定parquet-mr版本的配置项,但可尝试添加以下配置提升兼容性:
在Hive连接器配置文件(如etc/catalog/hive.properties)中添加:
hive.parquet.use-column-names=true hive.parquet.read-all-columns=true
该配置能优化Parquet元数据解析逻辑,但仅能缓解部分版本兼容问题,建议优先采用前两种方案。
内容的提问来源于stack exchange,提问作者9uzman7
相关产品推荐
相关产品推荐

