Создание авро-схемы для массива с несколькими типами записей? - PullRequest
0 голосов
/ 03 мая 2018

Я создаю авро-схему для полезной нагрузки JSON, которая, как представляется, содержит массив из нескольких объектов. Я не уверен, как именно это представить в схеме. Ключ, о котором идет речь, content:

{
  "id": "channel-id",
  "name": "My Channel with a New Title",
  "description": "Herpy me derpy merpus herpsum ner berp berps derp ter tee",
  "privacyLevel": "<private|org>",
  "planId": "some-plan-id",
  "owner": "a-user-handle",
  "curators": [
    "user-handle-1",
    "user-handle-2"
  ],
  "members": 5,
  "content": [
    {
      "id": "docker",
      "slug": "docker",
      "index": 1,
      "type": "path"
    },
    {
      "id": "such-linkage",
      "slug": "such-linkage",
      "index": 2,
      "type": "external-link",
      "details": {
        "url": "http://some-dank-link.com",
        "title": "My Dank Link",
        "contentType": "External Link",
        "level": "Beginner",
        "duration": "PT34293H33M9S"
      }
    },
    {
      "id": "21f1e812-b10a-40df-8b52-3a1d05fc215c",
      "slug": "windows-azure-storage-in-depth",
      "index": 3,
      "type": "course"
    },
    {
      "id": "7c346c05-6416-42dd-80b2-d5e758de7926",
      "slug": "7c346c05-6416-42dd-80b2-d5e758de7926",
      "index": 4,
      "type": "project"
    }
  ],
  "imageUrls": ["https://url/to/an/image", "https://url/to/another/image"],
  "analyticsEnabled": true,
  "orgDiscoverable": false,
  "createdDate": "2015-12-31T01:23:45+00:00",
  "archiveDate": "2015-12-31T01:23:45+00:00",
  "messagePublishedAt": "2015-12-31T01:23:45+00:00"
}

1 Ответ

0 голосов
/ 04 мая 2018

Если вы спрашиваете, возможно ли создать массив с различными типами записей, это так. Avro поддерживает это через союз. это будет выглядеть так.

{
    "name": "myRecord",
    "type":"record",
    "fields":[
        {
            "name":"myArrayWithMultiplesTypes",
            "type":{
                "type": "array",  
                "items":[
                {
                    "name":"typeOne",
                    "type":"record",
                    "fields":[
                        {"name":"name", "type":"string"}
                    ]
                },
                {
                    "name":"typeTwo",
                    "type":"record",
                    "fields":[
                        {"name":"id", "type":"int"}
                    ]
                }
                ]
            }
        }
    ] 
}
...