【问题标题】:Compiling avro schemas (python) when the message contains more than one message当消息包含多条消息时编译 avro 模式(python)
【发布时间】:2012-01-30 22:41:29
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: python avro


    【解决方案1】:

    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
    

    【讨论】:

    • 感谢您的评论。一个问题:您的模式是否以 '`' 而不是 '{' 开头?我的架构文件通常以“{”开头并以“}”结尾
    • 不,我的也是从 { 开始的,但是 ``` 在那里是因为我相信这是注入其他模式的方法。
    • 你能解释一下为什么/如何工作吗?合并之前/之后的 avro/JSON 是什么样的?
    猜你喜欢
    • 2018-12-30
    • 1970-01-01
    • 2016-11-10
    • 1970-01-01
    • 1970-01-01
    • 2018-02-09
    • 1970-01-01
    • 2018-01-17
    • 2019-08-19
    相关资源
    最近更新 更多