AWS Athena: HIVE_BAD_DATA ERROR: Field type DOUBLE in parquet is incompatible with type defined in table schema

AWS Athena: HIVE_BAD_DATA ERROR: Field type DOUBLE in parquet is incompatible with type defined in table schema

我使用 AWS Athena 查询存储在 S3 中的一些数据,即使用 pyarrow 压缩的分区镶木地板文件。

我有三列字符串值,一列名为 "key" 的 int 值和一列名为 "result" 的 both double 和 int 值.

使用这些列,我创建了如下架构:

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

当我查询 table 时,我会得到

HIVE_BAD_DATA: Field results type INT64 in parquet is incompatible with type DOUBLE defined in table schema

因此,我修改了结果数据类型为 INT 的架构。

然后我查询了 table 得到了,

HIVE_BAD_DATA: Field results type DOUBLE in parquet is incompatible with type INT defined in table schema

我环顾四周试图理解为什么会发生这种情况,但没有找到解决办法。

非常感谢任何建议。

我觉得有些文件的列类型为 double,有些文件的类型为 int。当您将 table 的列键入为 double 时,Athena 最终将读取相应列为 int 的文件并抛出此错误,反之亦然,如果您将 table 列键入为 int.

据我所知,Athena 不执行类型强制转换,但即使执行了,类型也不兼容:Athena 中的 DOUBLE 列不能表示 Parquet INT64 列的所有可能值,并且Athena 中的 INT 列不能表示浮点数(对于 Parquet INT64,Athena 中需要 BIGINT 列)。

解决方案是确保您的文件都具有相同的架构。您可能需要在生成文件的代码中明确说明要生成的模式(例如,让它始终使用 DOUBLE)。