41

根据这个AWS Forum Thread,有谁知道如何使用 AWS Glue 创建一个 AWS Athena 表,其分区包含不同的架构(在这种情况下,来自表架构的不同列子集)?

目前,当我在这些数据上运行爬虫然后在 Athena 中进行查询时,我得到了错误'HIVE_PARTITION_SCHEMA_MISMATCH'

我的用例是:

  • 分区代表天
  • 文件代表事件
  • 每个事件都是单个 s3 文件中的 json blob
  • 事件包含列的子集(取决于事件的类型)
  • 整个表的“模式”是所有事件类型的完整列集(这由 Glue 爬虫正确地放在一起)
  • 每个分区的“模式”是当天发生的事件类型的列子集(因此在 Glue 中,每个分区可能具有与表模式不同的列子集)
  • 我认为这种不一致会导致雅典娜出现错误

如果我要手动编写一个模式,我可以很好地做到这一点,因为只有一个表模式,并且 JSON 文件中缺少的键将被视为 Null。

提前致谢!

4

4 回答 4

62

我有同样的问题,通过配置爬虫来更新预先存在的分区的表元数据来解决它:

在此处输入图像描述

于 2018-02-07T13:16:08.807 回答
4

这对我有帮助。为其他人发布图片以防链接丢失 在此处输入图像描述

于 2018-05-04T14:42:53.893 回答
3

它也解决了我的问题!如果有人需要使用 Terraform 配置此配置爬虫,那么我是这样做的:

resource "aws_glue_crawler" "crawler-s3-rawdata" {
  database_name = "my_glue_database"
  name          = "my_crawler"
  role          = "my_iam_role.arn"

  configuration = <<EOF
{
   "Version": 1.0,
   "CrawlerOutput": {
      "Partitions": { "AddOrUpdateBehavior": "InheritFromTable" }
   }
}
EOF
  s3_target {
    path = "s3://mybucket"
  }
}
于 2019-06-21T00:41:39.447 回答
0

尽管Update all new and existing partitions with metadata from the table.在爬虫的配置中进行了选择,它仍然偶尔无法为所有分区设置预期的参数(特别jsonPath是在我的情况下不是从表的属性继承的)。

正如https://docs.aws.amazon.com/athena/latest/ug/updates-and-partitions.html中所建议的,“删除导致错误的分区并重新创建它”有帮助

删除有问题的分区后,胶水爬虫在接下来的运行中正确地重新创建了它们

于 2020-11-06T18:37:08.437 回答