CloudFormation创建AWS Glue表查询触发HIVE_METASTORE_ERROR报错
错误产生原因
- 核心触发点是Hive metastore对复杂数据类型的定义语法有严格要求,不允许类型描述字符串中出现多余空格。你在CloudFormation模板中定义
metadata列的类型为struct<email:string, name:string>,逗号和name:string之间的空格会被直接写入Glue Catalog元数据,Hive解析该类型定义时碰到未预期的空格就会抛出语法校验错误。 - 额外注意:报错信息中struct字段为
email:string, ip:string,和你模板中定义的email:string, name:string不一致,说明当前Glue Catalog中留存的表结构和你提供的模板不匹配,可能存在旧表残留的无效元数据,也会导致校验失败。
修复方案
- 修正CloudFormation模板中所有复杂类型的定义,移除所有多余空格:
把metadata列的Type配置从struct<email:string, name:string>修改为struct<email:string,name:string>,其他如array、map类型的定义也遵循同样规则,不要在逗号、尖括号周围加非必要空格。 - 手动删除AWS Glue控制台中已经创建的同名错误表,避免旧元数据干扰。
- 重新部署修正后的CloudFormation模板,完成后再执行查询即可正常返回结果。
- 可选优化:如果后续查询时出现JSON数据格式不兼容导致的报错,可以在SerdeInfo的Parameters中新增配置
"ignore.malformed.json": "true",跳过非法格式的脏数据。
内容的提问来源于stack exchange,提问作者Nikolas
相关产品推荐
相关产品推荐

