You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Kinesis Data Firehose转换JSON到Parquet为何生成None列?

问题:Kinesis Data Firehose转Parquet后payload列全为None

转换生成的Parquet文件数据:

payload
0     None
1     None
2     None

从转换Lambda传入Firehose的JSON数据:

{
  "mainid": {
    "id1": "org-sam-test-2-glue-schema-org",
    "id2": "9dbcf7d824b821e968983e2f040918d64f75bd331ff8442265c56c13cc6d8be8",
    "id3": "f8676ed6-188a-488b-aff2-32b1d51cec51",
    "id4": "36fd2a6e-81e1-4516-810f-74e8adbb8ba1",
    "id5": "b30a3bf1-999f-4a07-b15b-c7cc29d33df9",
    "id6": "9dbcf7d824b821e968983e2f040918d64f75bd331ff8442265c56c13cc6d8be8"
  }
}

Glue表结构:

struct<mainid:struct<id1:string,id2:string,id3:string,id4:string,id5:string,id6:string>>

Firehose配置说明:已启用Apache Parquet格式转换,关联目标Glue表,配置了基于Glue表的模式转换。


解决方案

1. 修正Lambda输出的JSON格式与结构

首先,原Lambda输出的JSON存在格式问题(键名未加双引号),这会导致Firehose无法解析,必须先修正为标准JSON格式。

其次,Firehose默认会将顶层JSON对象映射为payload列,但当前Glue表结构的顶层是mainid,层级不匹配。需要将Lambda输出的数据包裹在payload字段中:

{
  "payload": {
    "mainid": {
      "id1": "org-sam-test-2-glue-schema-org",
      "id2": "9dbcf7d824b821e968983e2f040918d64f75bd331ff8442265c56c13cc6d8be8",
      "id3": "f8676ed6-188a-488b-aff2-32b1d51cec51",
      "id4": "36fd2a6e-81e1-4516-810f-74e8adbb8ba1",
      "id5": "b30a3bf1-999f-4a07-b15b-c7cc29d33df9",
      "id6": "9dbcf7d824b821e968983e2f040918d64f75bd331ff8442265c56c13cc6d8be8"
    }
  }
}

2. 调整Glue表结构匹配输入层级

如果不想修改Lambda输出,可直接调整Glue表结构,让顶层字段对应Firehose默认的payload:

struct<payload:struct<mainid:struct<id1:string,id2:string,id3:string,id4:string,id5:string,id6:string>>>

3. 检查Firehose转换配置细节

  • 确认「Record format conversion」已设置为Apache Parquet
  • 确认关联的Glue表结构与输入数据的层级完全对应
  • 若未使用动态分区,关闭「Enable dynamic partitioning」避免映射错误
  • 确保Firehose的「Input format」设置为JSON,且未配置额外的字段过滤规则

内容的提问来源于stack exchange,提问作者Sam Comber

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 15:50:39