8

AVRO にはかなり慣れていないので、明らかな何かが欠けている場合はご容赦ください。AVRO スキーマに対して入力を検証する AVRO バリデーター/コマンドライン ユーティリティはありますか? または、おそらく json 入力のどこにエラーがあるかを示しています。

4

3 に答える 3

7

私が知っていることではありません。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)
于 2012-04-18T15:02:06.817 に答える
1

あなたの質問が理にかなっているかどうかはわかりません.Avroデータを処理するときはAvroスキーマが必須であるため、基本的にデフォルトで常に検証されます. 別の言い方をすれば、Avro を解析する行為は必然的にそれを検証します。

残念ながら、Avro データにはメタデータがほとんどないため、互換性のない変更はすべて基本的にデータの破損になります。そして、あなたはただゴミを手に入れるかもしれません。これは、フィールド ID やセパレータがないためです。すべてのデータは、スキーマが従わなければならないという内容に基づいて解釈されます。この冗長性の欠如により、データは非常にコンパクトになりますが、最小のデータ破損でもデータ ストリーム全体が役に立たなくなる可能性があることを意味します。

于 2012-04-24T05:35:50.220 に答える
1

JSON で実行できる JavaScript 用の Avro バリデーターを作成しました。これはまだ Avro リリースの一部ではありませんが、すぐにコミットされるはずです。パッチはhttps://issues.apache.org/jira/browse/AVRO-485にあります。

于 2012-10-07T19:17:56.110 に答える