3

我使用import avro等来在 python 中编译 avro 模式。有时,我的 avro 架构如下所示:

{ name: "Message1" ..... }

{ name: "Message2", "fields": [ { "type": "Message1", "name": "previous_avro_schema" } ] } ...

请忽略错别字。我只是想传达信息。要点是我有两个 avro 模式。其中一个 avro 模式使用第二个 avro 模式作为其字段之一。如何调用avro.schema.parse(....)此类 avro 消息以便正确编译它们?

4

1 回答 1

0

Avro 的 Python 支持非常可悲,但你可以让一些东西同时工作,包括多个模式。您只需要将架构文件合并到一个文件中,并且需要确保它们以正确的顺序合并,因此依赖关系首先出现,您需要将名称替换为实际架构这是我使用的脚本合并它们:

def resolve(path):
    "fully resolve a schema that includes other schemas"
    data = open(path).read()
    # fill in any while they remain
    while True:
        beg = data.find('`')
        end = data.find('`', beg + 1)
        if beg < 0:
            break
        path = os.path.join(os.path.dirname(path), data[beg+1:end] + '.avsc')
        data = data[:beg] + resolve(path) + data[end+1:]
    return data
于 2012-01-30T23:15:23.187 回答