首页 > 解决方案 > HIVE_PARTITION_SCHEMA_MISMATCH - 不同列之间

问题描述

在查询表时,我发现不同列之间的分区不匹配。请注意,根据不同的列报告不匹配!

我得到的错误是,

HIVE_PARTITION_SCHEMA_MISMATCH:表和分区模式不匹配。类型不兼容,不能强制。表“heat.backup”中的“direction”列被声明为“string”类型,但分区“partition_0=2020/partition_1=08/partition_2=07/partition_3=13”将列“scan_enabled”声明boolean ”类型。

如您所见,错误是针对完全不同的列“direction”和“scan_enabled”引发的。我看到了同样的错误,说表元数据中的数据类型是一种类型,但是分区元数据中的数据类型对于SAME列是不同的,这是有道理的。但是在这种情况下,将一列的数据类型与完全不同的列的数据类型进行比较。

该查询针对 AWS Athena 表运行,其中基础数据是 JSON。

任何想法?

标签: sqljsonhiveamazon-athena

解决方案


之所以会出现此问题,是因为表和分区的元数据中不同的列类型不同。这是因为报告分区的架构与表架构不同。

为了确认相同的问题,两个 boto3/(您选择的 SDK)API 调用get_table ( ) 和get_partition ()。这将告诉您这两者之间的区别。

请参阅此文档讨论与表模式相比在分区中具有不同模式的相同问题。

如文档中所述,解决此问题的方法是删除导致错误的分区并重新创建它。如果您使用的是 Glue 爬虫,则需要启用“使用表中的元数据更新所有新的和现有的分区”在您的爬虫设置中。


推荐阅读