我在查询我的 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)
- 从 AWS Glue 控制台编辑表的现有架构,然后将 '/' 替换为 Athena 支持的任何其他字符。
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 字节)
要解决此错误,请选择以下一个或多个解决方案:
相关信息
在 Athena 中进行故障排除