我在 S3 上对 CSV 文件中的数据进行了分区:
我在 s3://bucket/dataset/ 上运行一个分类器,结果看起来非常有希望,因为它检测到 150 列 (c1,...,c150) 并分配了各种数据类型。
在 Athena 中加载结果表并查询 ( select * from dataset limit 10) 它会产生错误消息:
HIVE_PARTITION_SCHEMA_MISMATCH:表和分区模式之间存在不匹配。类型不兼容,不能强制。表 'tests.dataset' 中的列 'c100' 被声明为类型 'string',但分区 'AANtbd7L1ajIwMTkwOQ' 将列 'c100' 声明为类型 'boolean'。
首先,我不知道如何使用“AANtbd7L1ajIwMTkwOQ”……但我可以从 Glue 中的分区列表中看出,有些分区将 c100 归类为字符串,而另一些则归类为布尔值。而表模式将其列为字符串。
这也意味着,如果我将查询限制为将 c100 分类为与表模式一致的字符串的分区,那么该查询将起作用。如果我使用将 c100 分类为布尔值的分区,则查询将失败并显示上述错误消息。
现在通过查看一些 CSV 列 c100 似乎包含三个不同的值:
可能某些行包含拼写错误(可能),因此某些分区被归类为字符串 - 但这只是一个理论,并且由于文件的数量和大小而难以验证。
我也试过MSCK REPAIR TABLE dataset没有用。
有没有快速解决方案?也许强制所有分区使用字符串?如果我查看分区列表,则有一个已停用的“编辑架构”按钮。
或者我是否必须编写一个 Glue 作业来检查和丢弃或修复每一行?