我正在根据avro
模式验证记录数据。以下是具有联合类型的模式:
{
"type":"record",
"name":"event",
"namespace":"test",
"fields":[
{
"name":"email",
"type":[
"null",
{
"type":"string",
"avro.java.string":"String"
}
]
}
]
}
我的记录是:
{
"emailAddress":"test@gmail.com"
}
现在,我想验证此特定字段是否具有正确的类型。以下是我的 Java 代码
// Schema
Schema dataSchema = schema.getField("data").schema();
// Converting my record into map
Map<String, Object> kafkaEvent = CustomRuleUtils.jsonStringToMap((String) kafkaEventData);
// Checking each field of schema (type and value) against this map
for (Schema.Field field : dataSchema.getFields()) {
// if record has that field (emailAddress)
if (kafkaEvent.get(field.name()) != null) {
// want to check type of this record is correct or not ("test@gmail.com" is type of schema
// HOW TO DO IT ????
kafkaEvent.get(field.name()).getClass();
field.schema().getTypes();
} else {
// invalid
}
}
如何检查该值是否属于模式中定义的类型之一。
您应该尝试一些Avro序列化程序,例如Confluent库,用您的模式序列化负载。如果库无法使用模式序列化/验证有效负载,它将引发异常。
问题内容: 我正在尝试让Python解析如下的Avro模式… …并且出现以下异常: 我究竟做错了什么? 问题答案: 根据网络上的其他消息来源,我将重写您的第二个地址定义:
根据Avro模式规范(适用于接头):https://avro.apache.org/docs/current/spec.html 如上所述,Unions使用JSON数组表示。例如,["null","string"]声明一个模式,该模式可以是null或string。 ( 请注意,当为类型为联合的记录字段指定默认值时,默认值的类型必须与联合的第一个元素匹配。 因此,对于包含“null”的联合,通常首先
我正在尝试使用以下方法在运行时获取Avro模式: 但由于我的POJO类包含以下泛型: 我得到以下例外情况: 我知道Avro不会支持泛型类型。是否有一种方法可以在运行时生成架构时从类中省略某些类字段?
我有一个JSON对象,其中一部分如下: 这里,坐标作为Object的数组发送。现在,对于这个JSON对象,我想创建avro模式(. avsc文件),到目前为止,如下所示: 但是,对于当前模式,我得到以下错误: 执行生成目标org.apache.avro:avro-maven-plugin:1.8.1:模式失败:未定义的名称:"对象" 如果有人能帮忙,我如何指定是否在avro架构中键入? 谢谢。
我从http://json-schema.org/draft-07/schema中注意到,它支持if then else语句根据值切换验证模式,但我不知道如何实现它们。
大家好,我需要为下面的示例创建AVRO模式; 当我按照建议更改所有者对象时,avro-tool返回错误。 ]} 测试: