Проверка AVRO

Я довольно новичок в AVRO, поэтому, пожалуйста, извините, если я пропустил что-то очевидное. Есть ли утилита Avro validator/commandline, которая проверяет входные данные для схемы AVRO ? Или, вероятно, указывает, где ошибка находится во входе json.

3 ответов


насколько мне известно, нет. Я написал этот маленький скрипт 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)

Я не уверен, что ваш вопрос имеет смысл: поскольку схема Avro обязательна при обработке данных Avro, она всегда в основном проверяется по умолчанию. Иными словами, акт разбора Avro по необходимости подтвердит его.

к сожалению, учитывая, что в данных Avro очень мало метаданных, все несовместимые изменения будут по существу повреждением данных; и вы можете просто получить мусор. Это потому, что нет идентификаторов полей или разделителей: все данные интерпретируются на основе того, что Схема говорит, что должна следовать. Это отсутствие избыточности делает данные очень компактными, но также означает, что даже малейшее повреждение данных может сделать весь поток данных бесполезным.


Я сделал валидатор Avro для JavaScript, который вы можете запустить на JSON. Это еще не часть выпуска Avro, но он должен быть совершен в ближайшее время. Вы можете найти патч вhttps://issues.apache.org/jira/browse/AVRO-485.