我在S3上将数据分成了CSV文件的多个分区:
- s3://bucket/dataset/p=1/*.csv (第1个分区)
- ...
- s3://bucket/dataset/p=100/*.csv (第100个分区)
我对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似乎包含三个不同的值:
- true
- false
- [empty] (如...,,...)
我还尝试了 MSCK REPAIR TABLE dataset
,但没有用。
有没有快速解决方案?也许强制所有分区使用字符串?如果查看分区列表,则有一个未激活的“编辑模式”按钮。
还是我必须编写一个 Glue 作业来检查和丢弃或修复每一行?