Có 4 cách có thể:
- Bao gồm nó trong tập tin pom như đã đề cập trong ticket này.
- Khai báo tất cả các loại của bạn trong một tệp avsc duy nhất.
- Sử dụng một trình phân tích cú pháp tĩnh duy nhất trước tiên phân tích tất cả các lần nhập và sau đó phân tích cú pháp các loại dữ liệu thực tế.
- (Đây là bản hack) Sử dụng tệp avdl và sử dụng các mục nhập như https://avro.apache.org/docs/1.7.7/idl.html#imports. Mặc dù, IDL dành cho các cuộc gọi RPC.
Ví dụ về 2. Khai báo tất cả các loại của bạn trong một tệp avsc duy nhất. Cũng trả lời khai báo mảng trên địa chỉ.
[
{
"type": "record",
"namespace": "com.company.model",
"name": "AddressRecord",
"fields": [
{
"name": "streetaddress",
"type": "string"
},
{
"name": "city",
"type": "string"
},
{
"name": "state",
"type": "string"
},
{
"name": "zip",
"type": "string"
}
]
},
{
"namespace": "com.company.model",
"type": "record",
"name": "Customer",
"fields": [
{
"name": "firstname",
"type": "string"
},
{
"name": "lastname",
"type": "string"
},
{
"name": "email",
"type": "string"
},
{
"name": "phone",
"type": "string"
},
{
"name": "address",
"type": {
"type": "array",
"items": "com.company.model.AddressRecord"
}
}
]
},
{
"namespace": "com.company.model",
"type": "record",
"name": "Customer2",
"fields": [
{
"name": "x",
"type": "string"
},
{
"name": "y",
"type": "string"
},
{
"name": "address",
"type": {
"type": "array",
"items": "com.company.model.AddressRecord"
}
}
]
}
]
Ví dụ cho 3. Sử dụng một phân tích cú pháp tĩnh duy nhất
Parser parser = new Parser(); // Make this static and reuse
parser.parse(<location of address.avsc file>);
parser.parse(<location of customer.avsc file>);
parser.parse(<location of customer2.avsc file>);
Nếu chúng ta muốn có một tổ chức của các Schema, có nghĩa là nếu chúng ta muốn tạo ra kỷ lục mới, chúng ta có thể hoặc là làm https://avro.apache.org/docs/1.5.4/api/java/org/apache/avro/Schema.Parser.html#getTypes() để lấy lược đồ hoặc
Parser parser = new Parser(); // Make this static and reuse
Schema addressSchema =parser.parse(<location of address.avsc file>);
Schema customerSchema=parser.parse(<location of customer.avsc file>);
Schema customer2Schema =parser.parse(<location of customer2.avsc file>);
Không rõ cách sử dụng trình phân tích cú pháp trong ví dụ # 3. Một khi nó được tạo ra, làm thế nào để đi về việc tạo một bản ghi (một bản ghi trống, không deserialize) – RedBullet
@ RedBullet Tôi đã chỉnh sửa câu trả lời của tôi để làm rõ nghi ngờ của bạn. Hy vọng nó là rõ ràng bây giờ. –
Trong # 2, loại gốc của bạn là một UNION, phải không? Vì vậy, điều đó sẽ cho phép người dùng tuần tự hóa bất kỳ loại cấp cao nhất nào như đối tượng gốc? Đó là một chút không may bởi vì nếu bạn chỉ muốn serialize các đối tượng khách hàng ở cấp cao nhất, bạn không thể thực sự làm cho nó hoạt động theo cách đó. – Shannon