aws athena:hive\u bad\u数据错误:parquet中的字段类型double与表架构中定义的类型不兼容

5sxhfpxr  于 2021-06-24  发布在  Hive
关注(0)|答案(1)|浏览(467)

我使用aws athena查询存储在s3中的一些数据,即使用pyarrow压缩的分区Parquet文件。
我有三列字符串值,一列称为“key”的int值和一列称为“result”的double和int值。
通过这些列,我创建了如下模式:

create external table (
    key int,
    result double,
    location string,
    vehicle_name string.
    filename string
)

当我询问table时,我会
配置单元\错误\数据:parquet中的字段结果类型int64与表架构中定义的类型double不兼容
因此,我修改了一个结果数据类型为 INT .
然后我查询了一下table,
配置单元\错误\数据:parquet中的字段结果类型double与表架构中定义的类型int不兼容
我环顾四周试图理解为什么会发生这种情况,但没有找到解决办法。
任何建议都非常感谢。

gj3fmq9x

gj3fmq9x1#

在我看来,有些文件的列类型为double,有些文件的列类型为int。当您将表的列类型为double时,athena最终将读取相应列类型为int的文件并抛出此错误,反之亦然,如果您将表的列类型为int。
据我所知,athena没有执行类型强制,但即使执行了,类型也不兼容:athena中的double列不能表示parquet int64列的所有可能值,而athena中的int列不能表示浮点数(对于parquet int64,athena中需要bigint列)。
解决方案是确保所有文件都具有相同的模式。您可能需要在生成文件的代码中明确说明要生成的模式(例如,使其始终使用double)。

相关问题