Athena同列存在bigint与double值查询报HIVE_BAD_DATA错误如何解决
报错产生原因
你创建的Athena表schema中,windSpeed字段被定义为bigint类型,但底层存储的Parquet文件里该字段的实际存储类型是double,两者类型不兼容,Athena执行查询前的类型校验环节就会抛出该错误。你观测到的“同时存在整数、浮点值”属于正常现象:double类型本身就可以存储整数值(比如1会以1.0的形式存储在double类型中),并不是同一列存在两种数据类型,本质是表定义和底层存储的类型不匹配。
可行处理方案
- 方案1:直接修改表schema匹配底层文件类型,执行语句
ALTER TABLE 你的表名 CHANGE COLUMN windSpeed windSpeed double;即可,修改后无需调整底层数据就能正常查询,原整数值会以1.0这类形式返回。 - 方案2:如果业务要求该字段必须保留bigint类型定义,调整Parquet文件的生成逻辑,统一将
windSpeed字段转换为bigint类型后再写入存储,覆盖原有不匹配的文件后即可正常查询。 - 方案3:如果不想修改表定义也不想调整底层文件,查询时用CAST强制做类型转换,示例语句
SELECT CAST(windSpeed AS bigint) AS windSpeed, 其他字段 FROM 你的表名,注意该方式会直接截断浮点值的小数部分,比如2.9会转换为2,需要提前确认业务是否接受精度损失。 - 方案4:如果是不同分区的Parquet文件类型不一致导致的报错(比如旧分区存的是bigint、新分区存的是double),可以配置分区级别的schema覆盖,给不同分区单独指定
windSpeed的类型,不需要修改全表schema。
内容的提问来源于stack exchange,提问作者Iram
相关产品推荐
相关产品推荐

