AVRO验证

问题描述 投票:8回答:4

对于AVRO来说还很陌生,因此,如果缺少任何明显的内容,请原谅。是否有一个AVRO验证程序/命令行实用程序可以根据AVRO模式验证输入?或可能指向json输入中的错误。

json encoding validation avro
4个回答
7
投票

不是我所知道的。我写了这个小的python脚本,它将告诉您json文件是否与模式匹配,但是它不会告诉您where错误是否存在。

取决于Python avro library

#!/usr/bin/env python

from avro.io import validate
from avro.schema import parse
from json import loads
from sys import argv

def main(argv):
    valid = set()
    invalid_avro = set()
    invalid_json = set()

    if len(argv) < 3:
        print "Give me an avro schema file and a whitespace-separated list of json files to validate against it."
    else:
        schema = parse(open(argv[1]).read())
        for arg in argv[2:]:
            try:
                json = loads(open(arg, 'r').read())
                if validate(schema, json):
                    valid.add(arg)
                else:
                    invalid_avro.add(arg)
            except ValueError:
                invalid_json.add(arg)
    print ' Valid files:\n\t' + '\n\t'.join(valid)
    print 'Invalid avro:\n\t' + '\n\t'.join(invalid_avro)
    print 'Invalid json:\n\t' + '\n\t'.join(invalid_json)

if '__main__' == __name__:
    main(argv)

1
投票

我不确定您的问题是否有意义:由于在处理Avro数据时Avro Schema是强制性的,因此默认情况下始终始终对其进行验证。换句话说,解析Avro的动作将有必要对其进行验证。

[不幸的是,鉴于Avro数据中元数据很少,所有不兼容的更改本质上都是数据损坏;而且您很可能会得到垃圾。这是因为没有字段ID或分隔符:所有数据都是根据Schema所必须遵循的内容进行解释的。冗余的缺乏使数据变得非常紧凑,但也意味着即使最小的数据损坏也可能使整个数据流无用。


1
投票

我为JavaScript制作了Avro验证器,可以在JSON上运行。它尚未包含在Avro版本中,但应尽快提交。您可以在https://issues.apache.org/jira/browse/AVRO-485中找到补丁。


0
投票

您可以使用此链接来帮助您验证Avro模式格式并抛出真实错误,这将有助于您调试和解决问题-

https://json-schema-validator.herokuapp.com/avro.jsp

© www.soinside.com 2019 - 2024. All rights reserved.