AVRO相当新,所以请原谅我是否遗漏了任何明显的东西。 是否有AVRO验证器/命令行实用程序来验证AVRO模式的输入?或者可能指向错误在json输入中的位置。
答案 0 :(得分:7)
不是我知道的。我写了这个小小的python脚本,告诉你json文件是否与模式匹配,但它不会告诉你哪里错误是否存在。
#!/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找到该补丁。