sql - 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。
任何想法?
解决方案
之所以会出现此问题,是因为表和分区的元数据中不同的列类型不同。这是因为报告分区的架构与表架构不同。
为了确认相同的问题,两个 boto3/(您选择的 SDK)API 调用get_table ( ) 和get_partition ()。这将告诉您这两者之间的区别。
请参阅此文档讨论与表模式相比在分区中具有不同模式的相同问题。
如文档中所述,解决此问题的方法是删除导致错误的分区并重新创建它。如果您使用的是 Glue 爬虫,则需要启用“使用表中的元数据更新所有新的和现有的分区”在您的爬虫设置中。
推荐阅读
- python - 熊猫石斑鱼“累积” sum()
- c - 要求用户重新运行程序或退出 C
- clojure - clojure data.xml 强制评估惰性 xml 树
- azure - 如果 Azure DevOps 部署到 Azure 应用服务,应用服务不会运行
- python - 使用多列中的大多数获取语言检测
- c++ - Bluez Mesh Api:配置节点后要做什么?
- html - HTML - 使用 flexbox 在表格行中定位页脚元素
- r - 通过坐标将行和列分配给数据框中的点
- dialogflow-cx - DialogFlow CX,有没有办法重命名起始节点?
- mfc - 如何捕捉 MFC 中的按键双击事件?