Как указать данные для типа объединения avro без двусмысленности? - PullRequest
0 голосов
/ 25 апреля 2018

Я пишу программу на python, используя официальную библиотеку avro для python версии 1.8.2.

Это простая схема, чтобы показать мою проблему:

{
  "type": "record",
  "namespace": "com.example",
  "name": "NameUnion",
  "fields": [
    {
      "name": "name",
      "type": [
        {
          "type": "record",
          "namespace": "com.example",
          "name": "FullName",
          "fields": [
            {
              "name": "first",
              "type": "string"
            },
            {
              "name": "last",
              "type": "string"
            }
          ]
        },
        {
          "type": "record",
          "namespace": "com.example",
          "name": "ConcatenatedFullName",
          "fields": [
            {
              "name": "entireName",
              "type": "string"
            }
          ]
        }
      ]
    }
  ]
}

Возможные значения для этой схемы: {"name": {"first": "Hakuna", "last": "Matata"}} и {"name": {"entireName": "Hakuna Matata"}}.

Однако, это дает предел неопределенности, так как не всегда avro сможет обнаружить правильную схему, указанную в объединении. В этом случае любой элемент данных будет соответствовать 1 и только 1 действительной схеме, но может быть случай, когда в объединении будет более 1 схемы.

Интересно, можно ли было бы использовать элемент данных, подобный {"name": {"FullName": {"first": "Hakuna", "last": "Matata"}}}, где конкретное имя схемы объединения указано в элементе данных.

Возможно ли это? Как это сделать?

1 Ответ

0 голосов
/ 27 апреля 2018

После долгих исследований я обнаружил, что представление, содержащее информацию о типах, является стандартом кодирования Avro JSON .

К сожалению, это не поддерживается ни официальной библиотекой python, ни fastavro на дату написания этого текста.

...