对于AVRO来说还很陌生,因此,如果缺少任何明显的内容,请原谅。是否有一个AVRO验证程序/命令行实用程序可以根据AVRO模式验证输入?或可能指向json输入中的错误。
不是我所知道的。我写了这个小的python脚本,它将告诉您json文件是否与模式匹配,但是它不会告诉您where错误是否存在。
#!/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)
我不确定您的问题是否有意义:由于在处理Avro数据时Avro Schema是强制性的,因此默认情况下始终始终对其进行验证。换句话说,解析Avro的动作将有必要对其进行验证。
[不幸的是,鉴于Avro数据中元数据很少,所有不兼容的更改本质上都是数据损坏;而且您很可能会得到垃圾。这是因为没有字段ID或分隔符:所有数据都是根据Schema所必须遵循的内容进行解释的。冗余的缺乏使数据变得非常紧凑,但也意味着即使最小的数据损坏也可能使整个数据流无用。
我为JavaScript制作了Avro验证器,可以在JSON上运行。它尚未包含在Avro版本中,但应尽快提交。您可以在https://issues.apache.org/jira/browse/AVRO-485中找到补丁。
您可以使用此链接来帮助您验证Avro模式格式并抛出真实错误,这将有助于您调试和解决问题-