Avro genericdata.Record 忽略数据类型
Avro genericdata.Record ignores data types
我有以下 avro 架构
{ "namespace": "example.avro",
"type": "record",
"name": "User",
"fields": [
{"name": "name", "type": "string"},
{"name": "favorite_number", "type": ["int", "null"]},
{"name": "favorite_color", "type": ["string", "null"]}
]
}
我使用以下代码片段设置记录
val schema = new Schema.Parser().parse(new File("data/user.avsc"))
val user1 = new GenericData.Record(schema) //strangely this schema only checks for valid fields NOT types.
user1.put("name", "Fred")
user1.put("favorite_number", "Jones")
我原以为这将无法根据架构进行验证
当我添加行时
user1.put("last_name", 100)
它会产生一个 运行 时间错误,这也是我在第一种情况下所期望的。
Exception in thread "main" org.apache.avro.AvroRuntimeException: Not a valid schema field: last_name
at org.apache.avro.generic.GenericData$Record.put(GenericData.java:125)
at csv2avro$.main(csv2avro.scala:40)
at csv2avro.main(csv2avro.scala)
这是怎么回事?
将它添加到记录中时不会失败,但在尝试序列化时会失败,因为它正试图匹配类型。据我所知,这是它唯一进行类型检查的地方。
我有以下 avro 架构
{ "namespace": "example.avro",
"type": "record",
"name": "User",
"fields": [
{"name": "name", "type": "string"},
{"name": "favorite_number", "type": ["int", "null"]},
{"name": "favorite_color", "type": ["string", "null"]}
]
}
我使用以下代码片段设置记录
val schema = new Schema.Parser().parse(new File("data/user.avsc"))
val user1 = new GenericData.Record(schema) //strangely this schema only checks for valid fields NOT types.
user1.put("name", "Fred")
user1.put("favorite_number", "Jones")
我原以为这将无法根据架构进行验证
当我添加行时
user1.put("last_name", 100)
它会产生一个 运行 时间错误,这也是我在第一种情况下所期望的。
Exception in thread "main" org.apache.avro.AvroRuntimeException: Not a valid schema field: last_name at org.apache.avro.generic.GenericData$Record.put(GenericData.java:125) at csv2avro$.main(csv2avro.scala:40) at csv2avro.main(csv2avro.scala)
这是怎么回事?
将它添加到记录中时不会失败,但在尝试序列化时会失败,因为它正试图匹配类型。据我所知,这是它唯一进行类型检查的地方。