【问题标题】:Refering or Importing Avro Schemas in another Avro Schema在另一个 Avro Schema 中引用或导入 Avro Schema
【发布时间】:2021-08-23 18:20:28
【问题描述】:

我有一个主要的 avro 架构和其他小型 avro 架构。主要的 avro 架构指的是其他小的 avro 架构,如下所示:

项目.avsc

{
    "namespace":"com.example.common",
    "name":"Item",
    "type":"record",
    "fields":[
        {
            "name":"ItemId",
            "type":"com.example.common.ItemId"
        },
        {
            "name":"features",
            "type":"com.example.common.Features"
        }
    ]
}

ItemId.avsc

{
    "namespace":"com.example.common",
    "name":"ItemId",
    "type":"record",
    "fields":[
        {
            "name":"id",
            "type":"int"
        }
    ]
}

Features.avsc

{
    "namespace":"com.example.common",
    "name":"Features",
    "type":"record",
    "fields":[
        {
            "name":"Range",
            "type":{
                "type":"array",
                "items":"com.example.common.Range"
            }
        }
    ]
}

还有一个 Range.avsc 但我没写,问题太长了。

所有这些文件都在一个名为“com.example.common”的文件夹中

我写了一行简单的python代码来解析和打印Item.avsc的架构:

import avro.schema

schema = avro.schema.parse(open("./com.example.common/Item.avsc", "rb").read())
print(schema)

但它引发了:

avro.schema.SchemaParseException: Could not make an Avro Schema object from com.example.common.ItemId.
avro.schema.SchemaParseException: Type property "com.example.common.ItemId" not a valid Avro schema: Could not make an Avro Schema object from com.example.common.ItemId.

我们如何读取架构中的引用架构?

【问题讨论】:

    标签: python avro


    【解决方案1】:

    我不确定这是否可以使用标准 avro 库来完成,但如果您使用 fastavro 库,则有一个函数可以做到这一点。它被称为load_schemahttps://fastavro.readthedocs.io/en/latest/schema.html#fastavro._schema_py.load_schema

    将递归加载引用的模式,假设它们可以在同一目录中的文件中找到并使用约定 .avsc

    命名

    在您的情况下,代码如下所示:

    from fastavro.schema import load_schema
    parsed_schema = load_schema("./com.example.common/Item.avsc")
    

    【讨论】:

      猜你喜欢
      • 2019-12-21
      • 1970-01-01
      • 2018-09-27
      • 2019-09-13
      • 1970-01-01
      • 2017-10-06
      • 2021-11-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多