Firehose无法读取基于现有Schema创建的Glue表Schema相关问题咨询
问题解答
问题1:基于Glue Schema Registry创建的Glue表是否会出现Firehose无法读取Schema的情况?
该情况属实。出现The schema is invalid. The specified table has no columns.报错的核心原因是:直接通过Glue Schema Registry关联创建的表,列元数据没有显式写入表的StorageDescriptor.columns字段,而是挂载在Schema关联配置中。而Firehose做格式转换时必须从StorageDescriptor下读取列定义,因此会识别为表无字段。
问题2:Firehose是否支持自动更新手动创建的Glue表Schema?
不支持。Firehose本身没有主动更新Glue表元数据的能力,无论表是手动创建还是Crawler创建,只要输入数据Schema发生变更,都需要先更新Glue表的列定义,Firehose才会适配新的Schema完成转换。
优先使用Firehose实现JSON转Parquet的落地建议
你可以按以下步骤配置,既保留自定义表名的需求,也能直接用Firehose的格式转换能力:
- 手动创建Glue表时,必须按照你在Schema Registry中注册的结构,显式完整填写所有列名、数据类型,列的顺序要和注册的Schema完全一致,同时配置正确的存储参数:
- 输入格式:
org.apache.hadoop.mapred.TextInputFormat - 输出格式:
org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat - 序列化类:
org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe - 可在表参数中补充
schemaName、schemaRegistryId关联你注册的Schema,不影响Firehose读取
- 输入格式:
- 配置Firehose转换规则时,选择对应的Glue库和你手动创建的表,指定输出格式为Parquet即可正常运行
- 后续Schema演化时,你可以选择手动更新Glue表列定义,或配置Crawler定期扫描自动更新,Crawler不会修改你自定义的表名,适配高频率Schema变更场景更省心
内容的提问来源于stack exchange,提问作者Sogun
相关产品推荐
相关产品推荐

