如何从kafka中的主题创建带有大量JSON字段的KSQL Stream?

时间:2018-10-01 19:54:43

标签: apache-kafka confluent ksql

我正在将长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');

1 个答案:

答案 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。同样,您不能将其用于显示的示例数据中确实具有的嵌套数组等。