联合字段的 Avro 无效默认值

Posted

技术标签:

【中文标题】联合字段的 Avro 无效默认值【英文标题】:Avro invalid default for union field 【发布时间】:2020-01-24 17:13:36 【问题描述】:

我正在尝试序列化,然后写入 hortonworks schema registry 一个 avro 架构,但在写入操作期间我收到以下错误消息。

Caused by: java.lang.RuntimeException: An exception was thrown while processing request with message: [Invalid default for field viewingMode: null not a ["type":"record","name":"aName","namespace":"domain.assembled","fields":["name":"aKey","type":"string"],"type":"record","name":"anotherName","namespace":"domain.assembled","fields":["name":"anotherKey","type":"string","name":"yetAnotherKey","type":"string"]]]
        at com.hortonworks.registries.schemaregistry.client.SchemaRegistryClient.handleSchemaIdVersionResponse(SchemaRegistryClient.java:678)
        at com.hortonworks.registries.schemaregistry.client.SchemaRegistryClient.doAddSchemaVersion(SchemaRegistryClient.java:664)
        at com.hortonworks.registries.schemaregistry.client.SchemaRegistryClient.lambda$addSchemaVersion$1(SchemaRegistryClient.java:591)

这是 avro 架构


    "type": "record",
    "name": "aSchema",
    "namespace": "domain.assembled",
    "fields": [
        
            "name": "viewingMode",
            "type": [
                
                    "name": "aName",
                    "type": "record",
                    "fields": [
                        "name": "aKey","type": "string"
                    ]
                ,
                
                    "name": "anotherName",
                    "type": "record",
                    "fields": [
                        "name": "anotherKey","type": "string",
                        "name": "yetAnotherKey","type": "string"
                    ]
                
            ]
        
    ]

如果我添加一个“null”作为联合的第一种类型,谁会成功。 avro 联合​​类型是否需要“null”?在我的情况下,这将是数据的不正确表示,所以我不热衷于这样做。 如果有什么不同,我使用的是 avro 1.9.1。

此外,如果标签不正确但找不到hortonworks-schema-registry 标签并且没有足够的代表来创建新标签,我们深表歉意。

【问题讨论】:

【参考方案1】:

原来是 hortonwork 的架构注册表有问题。 这实际上已经修复了here,我已经申请了一个新版本here。希望这很快就会发生。

【讨论】:

以上是关于联合字段的 Avro 无效默认值的主要内容,如果未能解决你的问题,请参考以下文章

为啥 kafka-avro-console-producer 不遵守该字段的默认值?

如何在Avro Union逻辑类型字段中指定转换器的默认值?

“create_date”时间戳字段的默认值无效

php中的mysql数据库的,字段默认值该怎么输入,啥格式?

在 BigQuery 中加载 avro 文件 - 默认值的类型为意外类型。预期为 null,但找到字符串:“null”

MYSQL 不接受 NOW() 作为日期时间字段的默认值 [重复]