我正在向NiFi JoltTransformJSON发送一些记录,例如:
{"uid":"x1","timestamp_ms":1419717816375}
{"uid":"x2","timestamp_ms":1419717816376}
...
它们通过ComsumeKafkaRecord来,其RecordWriter是配置为“每个对象一行”的JsonRecordSetWriter。我通过数据出处证实,当我向Kafka发送5条记录时,有5条记录。
Shift转换的震动规格为
{
"*": "&0",
"timestamp_ms": "timestamp"
}
所以我只想重命名一个字段。我在“高级”部分中验证了此规范可按要求更改我的json。
但是,当我启动所有组件并发送5条消息时,我只从JoltTransformJson获得了第一条消息-已通过Data Provenance验证。
{"uid":"x1","timestamp":1419717816375}
这是怎么了?
更新:原来我必须使用JoltTransformRecord,然后按预期进行,即5条消息进出5条。
但是我仍然感到困惑的是,为什么JoltTransformJson会那样表现?
答案 0 :(得分:1)
之所以如此,是因为您将数据(每行一条记录)引用为JSON,而数据不是JSON。如果它是JSON,则它至少应以[]开头和结尾,并且每行(最后一行除外)都以逗号结尾。
由于JoltTransformJSON仅接受JSON,因此其行为是这样的。
关于您的编辑,JoltTransformRecord知道如何将记录作为不同的JSON对象分别处理,这就是它使用它的原因。