我需要定义一个允许任何JSON数据的Avro模式。我正在重写一个现有的应用程序,新版本将需要有效负载来匹配特定的架构。但是,我们需要保持向后兼容,那就是荒凉的西部。
以前,我们没有架构,并且允许传递任何JSON。应用程序花费了大量时间来查找数据并从各种结构中进行解析。显然,这是一个非常脆弱且不可扩展的系统。在我们让所有客户转换之前,我们必须维护旧版本。因为我正在编码,所以我需要一个模式。我尝试了以下方法:
{
"namespace": "Clickstream",
"doc": "This is the default schema for all inputs that don't define the schema.",
"name": "legacy",
"type":"map",
"values":["string", "int", "long","boolean","float","double", "bytes", "null"]
}
这适用于大多数情况,除了带有数组的情况外,例如:
{
"actions":[
{
"type": "foo",
"value": "brown"
},
{
"type": "bar",
"value": "cow"
}
]
}
我想要的是一个Avro模式,该模式将允许我传递任何东西,最好是JSON对象,但愿意传递任何东西。