我对 AVRO 相当陌生,所以如果我遗漏了任何明显的东西,请原谅。是否有根据 AVRO 模式验证输入的 AVRO 验证器/命令行实用程序?或者可能指向错误在 json 输入中的位置。
问问题
14352 次
3 回答
7
不是我知道的。我写了这个小 Python 脚本,它会告诉你一个 json 文件是否匹配一个模式,但它不会告诉你错误在哪里,如果有的话。
这取决于Python avro 库。
#!/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)
于 2012-04-18T15:02:06.817 回答
1
我不确定您的问题是否有意义:由于在处理 Avro 数据时 Avro Schema 是强制性的,因此默认情况下它总是基本得到验证。换句话说,解析 Avro 的行为必然会验证它。
不幸的是,鉴于 Avro 数据中的元数据非常少,所有不兼容的更改本质上都是数据损坏;你很可能会得到垃圾。这是因为没有字段 ID 或分隔符:所有数据都根据 Schema 所说的必须遵循的内容进行解释。这种冗余的缺乏使数据非常紧凑,但也意味着即使是最小的数据损坏也可能使整个数据流无用。
于 2012-04-24T05:35:50.220 回答
1
我为 JavaScript 制作了一个 Avro 验证器,可以在 JSON 上运行。它还不是 Avro 版本的一部分,但应该很快就会提交。您可以在https://issues.apache.org/jira/browse/AVRO-485找到补丁。
于 2012-10-07T19:17:56.110 回答