Raf*_*ael 7 amazon-athena aws-glue aws-glue-data-catalog
我在 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 作业来检查和丢弃或修复每一行?
San*_*are 13
如果您使用爬虫,您应该选择以下选项:
Update all new and existing partitions with metadata from the table
Run Code Online (Sandbox Code Playgroud)
您也可以在创建表时执行此操作。查看https://docs.aws.amazon.com/glue/latest/dg/crawler-configuration.html#crawler-schema-changes-prevent了解更多详情。
这应该可以解决问题。如果没有,请在https://github.com/awsdocs/amazon-athena-user-guide/blob/master/doc_source/glue-best-practices.md#schema-syncing检查其他选项
要了解 athena 中的问题,请查看https://docs.aws.amazon.com/athena/latest/ug/updates-and-partitions.html
归档时间: |
|
查看次数: |
7838 次 |
最近记录: |