Redshift Spectrum查询失败:解析的清单不是有效JSON对象
问题分析与解决
你遇到的Redshift Spectrum查询报错ERROR: Parsed manifest is not a valid JSON object,核心原因是系统错误地将CSV文件当作JSON格式的清单文件(manifest)来解析,而非直接读取CSV数据。以下是针对性的排查和解决步骤:
排查方向1:检查Glue表的存储格式配置
- 打开Glue控制台,找到对应表,查看
存储描述符(StorageDescriptor)的以下配置:- 输入格式(InputFormat):必须为
org.apache.hadoop.mapred.TextInputFormat - 输出格式(OutputFormat):必须为
org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat - SerDe信息(SerdeInfo):CSV对应的SerDe应为
org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe,同时需配置正确的列分隔符(如field.delim = ',')、是否跳过表头(如skip.header.line.count = 1)
- 输入格式(InputFormat):必须为
- 若配置错误,可通过Glue控制台编辑表,或用AWS CLI修正:
aws glue update-table --database-name your_db_name --table-input file://updated-table-config.json
排查方向2:确认Glue表的S3路径指向
- 确保Glue表的
Location字段指向的是CSV文件所在的子文件夹前缀,而非单个清单文件(如.manifest结尾的文件) - 检查S3路径下是否存在非CSV格式的文件(如清单文件、日志文件),爬虫可能误将这些文件纳入表的数据源,导致Spectrum解析混乱
排查方向3:验证Redshift外部模式关联
- 执行以下SQL确认外部模式关联的Glue数据库正确:
DESCRIBE SCHEMA "dw"."extSchemaNm"; - 若关联的Glue数据库错误,需重新创建外部模式:
CREATE EXTERNAL SCHEMA extSchemaNm FROM DATA CATALOG DATABASE 'your-glue-db-name' IAM_ROLE 'arn:aws:iam::your-account-id:role/your-redshift-spectrum-role';
排查方向4:直接测试CSV文件可读性
- 用Redshift的
S3_SCAN函数直接读取单个CSV文件,验证文件本身格式是否正常:SELECT * FROM S3_SCAN('s3://your-bucket/path/to/your-file.csv', 'csv'); - 若该查询成功,说明问题完全出在Glue表的配置上,需重点修正表的存储格式配置
内容的提问来源于stack exchange,提问作者RobD
相关产品推荐
相关产品推荐

