Исключение формата Avro Schema - «SecurityClassification» не является определенным именем - PullRequest
0 голосов
/ 17 октября 2018

Я пытаюсь использовать эту схему avro

{
  "type": "record",
  "name": "ComplianceEntity",
  "namespace": "com.linkedin.events.metadata",
  "fields": [
    {
      "name": "fieldPath",
      "type": "string"
    },
    {
      "name": "complianceDataType",
      "type": {
        "type": "enum",
        "name": "ComplianceDataType",

        "symbols": [
          "NONE",
          "MEMBER_ID"
        ],
        "symbolDocs": {
          "NONE": "None of the following types apply",
          "MEMBER_ID": "ID for LinkedIn members"
        }
      }
    },
    {
      "name": "complianceDataTypeUrn",
      "type": [
        "null",
        "string"
      ],
      "default": null
    },
    {
      "name": "fieldFormat",
      "type": [
        "null",
        {
          "type": "enum",
          "name": "FieldFormat",
          "symbols": [
            "NUMERIC"
          ],
          "symbolDocs": {
            "NUMERIC": "Numerical format, 12345"
          },
          "doc": "The field format"
        }
      ]
    },
    {
      "name": "securityClassification",
      "type": "SecurityClassification"
    },
    {
      "name": "valuePattern",
      "default": null,
      "type": [
        "null",
        "string"
      ]
    }
  ]
}

Для создания файла avro с помощью инструментов avro:

java -jar ./avro-tools-1.8.2.jar compile schema ComplianceEntity.avsc .

Но я получаю следующее сообщение об ошибке:

Исключение в потоке "main" org.apache.avro.SchemaParseException: "SecurityClassification" не является определенным именем.Тип поля "securityClassification" должен быть определенным именем или выражением {"type": ...}.

Может кто-нибудь сказать, почему SecurityClassification не идентифицируется как определенное имя?

1 Ответ

0 голосов
/ 17 октября 2018

Вы используете его как тип своего поля, однако не правильно определяете его, как для complianceDataType, поэтому вы получаете исключение avro

{
      "name": "securityClassification",
      "type": "SecurityClassification"
}

Убедитесь, что если выЕсли у вас есть более 1 схемы, вы передаете все из них, особенно схемы зависимостей.Поддерживается от AVRO 1.5.3 https://issues.apache.org/jira/browse/AVRO-877.

java -jar ./avro-tools-1.8.2.jar compile schema SecurityClassification.avsc ComplianceEntity.avsc .
...