如何解决在查询 Amazon Athena 中的表时出现的“HIVE_METASTORE_ERROR”错误?

1 分钟阅读
0

我在查询我的 Amazon Athena 表时收到“HIVE_METASTORE_ERROR”错误。

简短描述

请参阅以下类型的“HIVE_METASTORE_ERROR”错误及其原因:

  • **HIVE_METASTORE_ERROR: com.facebook.presto.spi.PrestoException: Error: : expected at the position 1234 of struct<test_column> but '/' is found.(服务:null;状态代码: 0;错误代码:null,请求 ID:null):**所查询表中的列名包含特殊字符,或者分区架构中的列名包含特殊字符。Athena 不支持下划线以外的特殊字符。有关详细信息,请参阅表、数据库和列的名称
  • HIVE_METASTORE_ERROR: com.facebook.presto.spi.PrestoException: 未填充所需的表存储描述符:
    StorageDescriptor 参数包含有关表物理存储的信息。如果表中的一个或多个分区由于分区损坏而未设置分区位置,您会收到此错误。
  • **HIVE_METASTORE_ERROR: com.facebook.presto.spi.PrestoException: java.io.IOException: 响应负载大小(11112222 字节)超过了允许的最大负载大小(6291556 字节):**您使用 AWS Lambda 函数对跨账户 AWS Glue Data Catalog 或外部 Hive 元存储运行 Athena 查询。但是,Lambda 的调用负载限制为 6 MB。当从 Lambda 返回的对象的大小超过 6 MB 时,您会收到此错误。Lambda 负载限制是硬性限制,无法提高。有关详细信息,请参阅 Lambda 限额

解决方法

HIVE_METASTORE_ERROR: com.facebook.presto.spi.PrestoException: Error: : expected at the position 1234 of struct<test_column> but '/' is found.(服务:null;状态代码: 0;错误代码:null,请求 ID:null)

要解决此错误,请完成以下步骤:

  • 要将列名中的特殊字符替换为下划线,请在数据上运行以下自定义脚本:
import re
string = open('a.txt').read()
new_str = re.sub('/', '_', string)
open('b.txt', 'w').write(new_str)

HIVE_METASTORE_ERROR: com.facebook.presto.spi.PrestoException: 未填充所需的表存储描述符

要解决此错误,请选择以下一个或多个解决方案:

  • 如果您的表已经分区,并且数据是以 Amazon Simple Storage Service(Amazon S3)Hive 分区格式加载的,则加载这些分区。运行与以下示例类似的命令:
    **注意:**确保将 doc_example_table 替换为您的表名称。
MSCK REPAIR TABLE doc_example_table
  • 如果 MSCK REPAIR TABLE 命令未解决问题,则删除该表并创建一个具有相同定义的新表。然后,在新表上运行 MSCK REPAIR TABLE 命令。
  • 在 Amazon S3 桶中创建一个单独的文件夹,然后将要查询的数据文件移至该文件夹中。创建一个指向该文件夹而不是桶的 AWS Glue 爬网程序。

HIVE_METASTORE_ERROR: com.facebook.presto.spi.PrestoException: java.io.IOException: 响应负载大小(11112222 字节)超过了允许的最大负载大小(6291556 字节)

要解决此错误,请选择以下一个或多个解决方案:

  • 将 Lambda 函数的响应负载作为对象上传到 Amazon S3 桶。然后,将此对象作为负载包含在 Lambda 函数响应中。有关为您的对象生成预签名 URL 的信息,请参阅使用预签名 URL 共享对象
  • 如果您的表已分区,并且您的用例允许,则仅查询特定的分区。
  • 创建 Lambda 函数时,请指定 Amazon S3 中的溢出位置。大于阈值的响应会溢出到指定的 S3 位置中。

相关信息

在 Athena 中进行故障排除

AWS 官方
AWS 官方已更新 1 年前