Tôi đang gặp phải một số sự cố khi thiết lập giá trị mặc định cho trường avro. Tôi có một giản đồ đơn giản như đưa ra dưới đây:Giá trị mặc định của trường Avro
data.avsc:
{
"namespace":"test",
"type":"record",
"name":"Data",
"fields":[
{ "name": "id", "type": [ "long", "null" ] },
{ "name": "value", "type": [ "string", "null" ] },
{ "name": "raw", "type": [ "bytes", "null" ] }
]
}
Tôi đang sử dụng v1.7.6 Avro-maven-plugin để tạo ra các mô hình java.
Khi tôi tạo ra một thể hiện của các mô hình sử dụng
Data data = Data.newBuilder().build();
, nó không thành công với một org.apache.avro.AvroRuntimeException ngoại lệ: org.apache.avro.AvroRuntimeException: Dòng id loại: UNION pos: 0 không được thiết lập và không có giá trị mặc định.
Nhưng nếu tôi xác định "mặc định" tài sản,
{ "name": "id", "type": [ "long", "null" ], "default": "null" },
Tôi không nhận được lỗi này. Tôi đọc trong tài liệu mà lược đồ đầu tiên trong liên minh trở thành lược đồ mặc định. Vì vậy, câu hỏi của tôi là, tại sao tôi vẫn cần chỉ định thuộc tính "mặc định"? Làm cách nào khác để tôi tạo trường tùy chọn?
Và nếu tôi cần xác định các giá trị mặc định, cách thức hoạt động của một liên minh; thế nào để tôi cần phải xác định giá trị mặc định cho mỗi lược đồ trong liên minh và làm thế nào để làm việc về thứ tự/cú pháp?
Cảm ơn.
Đơn giản chỉ cần đặt null đầu tiên trong loại công đoàn không làm cho nó tùy chọn có vẻ như - đó là cách tôi đã có nó và vẫn có lỗi. Thêm null mặc định là cần thiết ít nhất là trên Avro 1.7.5 mà tôi đang sử dụng. –
https://avro.apache.org/docs/1.7.7/spec.html#Unions không đề cập đến điều này. –