AVRO验证

时间:2012-04-16 23:24:13

标签: json encoding validation avro

AVRO相当新,所以请原谅我是否遗漏了任何明显的东西。 是否有AVRO验证器/命令行实用程序来验证AVRO模式的输入?或者可能指向错误在json输入中的位置。

3 个答案:

答案 0 :(得分:7)

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

取决于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 :(得分:1)

我不确定你的问题是否有意义:因为Avro Schema在处理Avro数据时是强制性的,所以它默认情况下基本上都是经过验证的。换句话说,解析Avro的行为必然会验证它。

不幸的是,鉴于Avro数据中的元数据非常少,所有不兼容的更改都将主要是数据损坏;你可能只是得到垃圾。这是因为没有字段ID或分隔符:所有数据都是根据Schema说必须遵循的内容来解释的。缺乏冗余使数据非常紧凑,但也意味着即使是最小的数据损坏也可能使整个数据流无用。

答案 2 :(得分:1)

我为JavaScript制作了一个可以在JSON上运行的Avro验证程序。它还不是Avro版本的一部分,但应尽快实现。您可以在https://issues.apache.org/jira/browse/AVRO-485找到该补丁。