如何创建分区具有不同列的 AWS Glue table? ('HIVE_PARTITION_SCHEMA_MISMATCH')
How to create AWS Glue table where partitions have different columns? ('HIVE_PARTITION_SCHEMA_MISMATCH')
根据这个 AWS Forum Thread,有谁知道如何使用 AWS Glue 创建一个 AWS Athena table,其分区包含不同的模式(在本例中来自 table 架构)?
目前,当我 运行 爬虫通过此数据然后在 Athena 中进行查询时,我收到错误 'HIVE_PARTITION_SCHEMA_MISMATCH'
我的用例是:
- 分区代表天数
- 文件代表事件
- 每个事件都是单个 s3 文件中的 json blob
- 事件包含列的子集(取决于事件类型)
- 整个 table 的 'schema' 是所有事件类型的完整列集(由 Glue 爬虫正确组合)
- 每个分区的 'schema' 是当天发生的事件类型的列子集(因此在 Glue 中每个分区可能具有来自 table 模式的不同列子集)
- 我认为这种不一致导致了 Athena 的错误
如果我手动编写一个模式,我可以做得很好,因为只有一个 table 模式,JSON 文件中缺少的键将被视为空值。
提前致谢!
我遇到了同样的问题,通过配置爬虫来更新 table 预先存在的分区的元数据解决了这个问题:
这对我有帮助。为其他人发布图像以防 link 丢失
它也解决了我的问题!
如果有人需要使用 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"
}
}
尽管在爬虫的配置中选择了 Update all new and existing partitions with metadata from the table.
,它仍然偶尔无法为所有分区设置预期的参数(特别是 jsonPath
不是从 table 的属性继承的就我而言)。
如 https://docs.aws.amazon.com/athena/latest/ug/updates-and-partitions.html 中的建议,“删除导致错误的分区并重新创建它”有帮助
删除有问题的分区后,将爬虫 re-created 正确地粘贴到以下 运行
根据这个 AWS Forum Thread,有谁知道如何使用 AWS Glue 创建一个 AWS Athena table,其分区包含不同的模式(在本例中来自 table 架构)?
目前,当我 运行 爬虫通过此数据然后在 Athena 中进行查询时,我收到错误 'HIVE_PARTITION_SCHEMA_MISMATCH'
我的用例是:
- 分区代表天数
- 文件代表事件
- 每个事件都是单个 s3 文件中的 json blob
- 事件包含列的子集(取决于事件类型)
- 整个 table 的 'schema' 是所有事件类型的完整列集(由 Glue 爬虫正确组合)
- 每个分区的 'schema' 是当天发生的事件类型的列子集(因此在 Glue 中每个分区可能具有来自 table 模式的不同列子集)
- 我认为这种不一致导致了 Athena 的错误
如果我手动编写一个模式,我可以做得很好,因为只有一个 table 模式,JSON 文件中缺少的键将被视为空值。
提前致谢!
我遇到了同样的问题,通过配置爬虫来更新 table 预先存在的分区的元数据解决了这个问题:
这对我有帮助。为其他人发布图像以防 link 丢失
它也解决了我的问题! 如果有人需要使用 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"
}
}
尽管在爬虫的配置中选择了 Update all new and existing partitions with metadata from the table.
,它仍然偶尔无法为所有分区设置预期的参数(特别是 jsonPath
不是从 table 的属性继承的就我而言)。
如 https://docs.aws.amazon.com/athena/latest/ug/updates-and-partitions.html 中的建议,“删除导致错误的分区并重新创建它”有帮助
删除有问题的分区后,将爬虫 re-created 正确地粘贴到以下 运行