【发布时间】:2012-04-16 23:24:13
【问题描述】:
我对 AVRO 还很陌生,所以如果遗漏了任何明显的东西,请原谅。 是否有根据 AVRO 模式验证输入的 AVRO 验证器/命令行实用程序?或者可能指向错误在 json 输入中的位置。
【问题讨论】:
标签: json encoding validation avro
我对 AVRO 还很陌生,所以如果遗漏了任何明显的东西,请原谅。 是否有根据 AVRO 模式验证输入的 AVRO 验证器/命令行实用程序?或者可能指向错误在 json 输入中的位置。
【问题讨论】:
标签: json encoding validation avro
我不知道。我写了这个小 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)
【讨论】:
我不确定您的问题是否有意义:由于在处理 Avro 数据时 Avro Schema 是强制性的,因此默认情况下它基本上总是经过验证。换句话说,解析 Avro 的行为必然会验证它。
不幸的是,鉴于 Avro 数据中的元数据非常少,所有不兼容的更改本质上都是数据损坏;你很可能会得到垃圾。这是因为没有字段 ID 或分隔符:所有数据都根据 Schema 所说的必须遵循的内容进行解释。这种冗余的缺乏使数据非常紧凑,但也意味着即使是最小的数据损坏也可能使整个数据流无用。
【讨论】:
我为 JavaScript 制作了一个 Avro 验证器,可以在 JSON 上运行。它还不是 Avro 版本的一部分,但应该很快就会提交。你可以在https://issues.apache.org/jira/browse/AVRO-485找到补丁。
【讨论】: