Pandas时长列转Parquet后Athena查询报错,求列类型适配方案
解决Athena读取Parquet中TIME(MICROS,true)类型列的类型匹配问题
Athena中对应你这个Parquet列的正确数据类型是time类型,因为Parquet里的TIME(MICROS,true)逻辑类型就是用来存储纯一天内时间的数值,和Athena的time类型完全匹配。
为什么之前的类型会失败
- 设为
timestamp报错:timestamp是带日期维度的时间类型,和Parquet里仅存储一天内时间的TIME逻辑类型不兼容,所以触发类型不支持的错误。 - 设为
string或int无效:Athena会优先识别Parquet文件中的逻辑类型元数据,强制用基础类型(字符串/整数)映射会和文件里的类型定义冲突,导致解析失败。
正确的建表示例
CREATE EXTERNAL TABLE your_table_name ( dep_time time ) STORED AS PARQUET LOCATION 's3://your-bucket/your-path/';
额外优化建议
如果用fastparquet导出的Parquet文件在Athena中仍有类型解析问题,可以尝试换用pyarrow引擎导出,它的Parquet类型映射对Athena兼容性更好:
df.to_parquet('output.parquet', engine='pyarrow')
内容的提问来源于stack exchange,提问作者Mohan
相关产品推荐
相关产品推荐

