AVRO にはかなり慣れていないので、明らかな何かが欠けている場合はご容赦ください。AVRO スキーマに対して入力を検証する AVRO バリデーター/コマンドライン ユーティリティはありますか? または、おそらく json 入力のどこにエラーがあるかを示しています。
3 に答える
私が知っていることではありません。jsonファイルがスキーマと一致するかどうかを通知するこの小さなPythonスクリプトを作成しましたが、エラーが存在する場合はエラーがどこにあるかは通知されません。
Pythonavroライブラリに依存します。
#!/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スキーマが必須であるため、基本的にデフォルトで常に検証されます. 別の言い方をすれば、Avro を解析する行為は必然的にそれを検証します。
残念ながら、Avro データにはメタデータがほとんどないため、互換性のない変更はすべて基本的にデータの破損になります。そして、あなたはただゴミを手に入れるかもしれません。これは、フィールド ID やセパレータがないためです。すべてのデータは、スキーマが従わなければならないという内容に基づいて解釈されます。この冗長性の欠如により、データは非常にコンパクトになりますが、最小のデータ破損でもデータ ストリーム全体が役に立たなくなる可能性があることを意味します。
JSON で実行できる JavaScript 用の Avro バリデーターを作成しました。これはまだ Avro リリースの一部ではありませんが、すぐにコミットされるはずです。パッチはhttps://issues.apache.org/jira/browse/AVRO-485にあります。