为什么我的 Athena 查询失败并显示错误“HIVE_PARTITION_SCHEMA_MISMATCH”?

上次更新日期:2021 年 4 月 9 日

当我在分区表上运行 Amazon Athena 查询时,查询失败并显示错误“HIVE_PARTITION_SCHEMA_MISMATCH”。

简短描述

当您在 Athena 分区表上运行查询时,Athena 会在 AWS Glue 数据目录中验证表架构及其分区的架构。验证将按顺序比较列数据类型,并确保列数据类型与重叠的列匹配。新分区通常会继承关联表的架构。但是,某些情况可能会导致架构随时间而改变。当分区架构中某列的数据类型与表架构中的对应列数据类型不匹配时,查询将失败并显示错误“HIVE_PARTION_SCHEMA_MISMATCH”。

您可以使用以下任一方法解决此错误:

  • 如果您已使用 AWS Glue 爬网程序创建表,请将 AWS Glue 爬网程序配置为更新分区架构。
  • 如果您已手动创建表,请使用 Athena 数据定义语言 (DDL) 语句删除受影响的分区并重新创建分区。

解决方法

将 AWS Glue 爬网程序配置为更新分区架构

  1. 打开 AWS Glue 控制台
  2. 在导航窗格中,选择爬网程序
  3. 选择您要配置的爬网程序。
  4. 选择操作,然后选择编辑爬网程序
  5. 选择下一步,直到导航到选择爬网程序的输出页面。
  6. 展开​配置选项​。
  7. 选择使用表中的元数据更新所有新的和现有的分区
  8. 选择下一步,然后选择完成以保存爬网程序配置。
  9. 爬网程序页面上,选择您编辑过的爬网程序。
  10. 选择运行爬网程序。运行爬网程序时,分区将继承表架构。

使用 Athena DDL 语句删除受影响的分区并重新创建已删除的分区

  1. 打开 Amazon Athena 控制台
  2. 查询编辑器选项卡上,运行 ALTER TABLE DROP PARTITION 命令以删除受影响的分区。
  3. 运行 ALTER TABLE ADD PARTITION 命令以重新创建已删除的分区。
    注意:如果您的表使用 Hive 兼容分区,则可以运行 MSCK REPAIR TABLE 命令来重新创建已删除的分区。