我正在将长JSON字符串传递给kafka主题,例如:
{
"glossary": {
"title": "example glossary",
"GlossDiv": {
"title": "S",
"GlossList": {
"GlossEntry": {
"ID": "SGML",
"SortAs": "SGML",
"GlossTerm": "Standard Generalized Markup Language",
"Acronym": "SGML",
"Abbrev": "ISO 8879:1986",
"GlossDef": {
"para": "A meta-markup language, used to create markup languages such as DocBook.",
"GlossSeeAlso": ["GML", "XML"]
},
"GlossSee": "markup"
}
}
}
}
}
,并希望从kafka主题创建具有所有字段的流,而没有在KSQL中指定每个字段,例如:
CREATE STREAM pageviews_original (*) WITH \
(kafka_topic='pageviews', value_format='JSON');
答案 0 :(得分:7)
如果希望KSQL自动选择字段名称,则需要使用Avro。如果使用Avro,则数据的架构将在Confluent Schema Registry中注册,当您使用该主题时,KSQL会自动检索该架构。
如果使用的是JSON,则必须告诉KSQL列是什么。您可以在JSON.parse()
语句中执行此操作,对嵌套元素使用CREATE STREAM
数据类型。
您可以通过列出STRUCT
中的高级字段,然后使用CREATE STREAM
访问要使用的字段的嵌套元素,来列出所有字段。请注意,5.0.0中没有问题,将为fixed in 5.0.1。同样,您不能将其用于显示的示例数据中确实具有的嵌套数组等。