我使用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不兼容
我环顾四周试图理解为什么会发生这种情况,但没有找到解决办法。
任何建议都非常感谢。
1条答案
按热度按时间gj3fmq9x1#
在我看来,有些文件的列类型为double,有些文件的列类型为int。当您将表的列类型为double时,athena最终将读取相应列类型为int的文件并抛出此错误,反之亦然,如果您将表的列类型为int。
据我所知,athena没有执行类型强制,但即使执行了,类型也不兼容:athena中的double列不能表示parquet int64列的所有可能值,而athena中的int列不能表示浮点数(对于parquet int64,athena中需要bigint列)。
解决方案是确保所有文件都具有相同的模式。您可能需要在生成文件的代码中明确说明要生成的模式(例如,使其始终使用double)。