【问题标题】:How to create AWS Glue table where partitions have different columns? ('HIVE_PARTITION_SCHEMA_MISMATCH')如何创建分区具有不同列的 AWS Glue 表? ('HIVE_PARTITION_SCHEMA_MISMATCH')
【发布时间】:2018-02-24 17:39:17
【问题描述】:

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

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

我的用例是:

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

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

提前致谢!

【问题讨论】:

  • 我有同样的问题,分区模式在列顺序上不同。它的数据相同,但他不够聪明,无法正确应用表模式。你解决问题了吗?
  • 不,很遗憾,我没有解决这个问题。在列顺序方面,您可以尝试编写为换行符分隔的 JSON。这并不理想,但我认为如果你 gzip 文件,它不会对大小产生巨大的影响。祝你好运,如果你学到了什么,请告诉我!
  • 定义多个爬虫(每个分区一个)不是解决方案吗?

标签: amazon-web-services amazon-s3 amazon-athena aws-glue


【解决方案1】:

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

【讨论】:

  • 我花了 15 分钟输入一个问题,就在发送它之前,这个问题是按照建议检查的。这为我节省了几个小时!谢谢
【解决方案2】:

这对我有帮助。为其他人发布图片以防链接丢失

【讨论】:

    【解决方案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"
      }
    }
    

    【讨论】:

      【解决方案4】:

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-12-15
        • 1970-01-01
        • 1970-01-01
        • 2018-06-18
        • 2019-04-15
        • 2022-08-05
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多