Jestem całkiem nowy dla AVRO, więc proszę wybacz, jeśli brakuje mi czegoś oczywistego. Czy istnieje narzędzie AVRO do sprawdzania poprawności/wiersza poleceń, które sprawdza poprawność danych wejściowych w stosunku do schematu AVRO? Lub prawdopodobnie wskazuje, gdzie błąd znajduje się na wejściu json.AVRO Validation
Odpowiedz
Nie jestem tego świadomy. Napisałem ten mały skrypt Pythona, który powie ci, czy plik json pasuje do schematu, ale nie powie ci, gdzie błąd jest, jeśli jest.
To zależy od 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)
nie jestem pewien sens pytanie: skoro Avro Schema jest obowiązkowe przy przetwarzaniu danych Avro, jest zawsze w zasadzie potwierdzone domyślnie. Inaczej mówiąc, akt parsowania Avro będzie z konieczności go potwierdzał.
Niestety, biorąc pod uwagę, że w danych Avro jest bardzo mało metadanych, wszystkie niezgodne zmiany będą zasadniczo uszkodzeniem danych; i możesz po prostu dostać śmieci. Dzieje się tak, ponieważ nie ma identyfikatorów pól ani separatorów: wszystkie dane są interpretowane na podstawie tego, co musi być napisane w schemacie. Ten brak nadmiarowości powoduje, że dane są bardzo kompaktowe, ale oznacza to również, że nawet najmniejsze uszkodzenie danych może sprawić, że cały strumień danych stanie się bezużyteczny.
Dostaję to, co mówisz. Ale wyjątki Avro (w przypadku niedopasowania wejścia ze schematem) są niejasne i nie wskazują dokładnie na faktyczny problem na wejściu. Prawdopodobnie szukasz czegoś bardziej przyjaznego dla użytkownika. – airboss
Ach, tak, zrozumiano. Chociaż prawdopodobnie mógłbyś zaproponować ulepszenia do zespołu avro, użyj domyślnego parsera. Zgadzam się, że błędy nie są aż tak przydatne ...: - / – StaxMan
Zrobiłem weryfikator Avro dla JavaScript, który można uruchomić na JSON. Nie jest to jeszcze część wydania Avro, ale wkrótce powinno zostać zatwierdzone. Możesz znaleźć łatkę pod numerem https://issues.apache.org/jira/browse/AVRO-485.
- 1. Jak generować pliki avro bez schema używając apache avro?
- 2. Avro ewolucja schematu
- 3. Json na konwersję avro
- 4. Jak uprościć Apache Avro?
- 5. Scalanie dwóch schematów avro programowo
- 6. opcjonalna tablica w schemacie avro
- 7. avro gradle plugin przykładowe użycie
- 8. Korzystanie z apache avro reflect
- 9. Entity Framework Validation & usage
- 10. jQuery Plugin Validation & Form
- 11. C# - TextBox Validation
- 12. AJAX Rails Validation
- 13. Laravel File Upload Validation
- 14. Bean Validation API
- 15. Wyzwalanie jQuery Validation ręcznie?
- 16. Laravel5: Middleware or Validation?
- 17. Yii - Używanie Ajax Validation
- 18. Entity Framework Validation
- 19. JQuery Validation Internationalization Problem
- 20. laravel Password & Password_Confirmation Validation
- 21. Codeigniter: dropdown validation set_rules
- 22. jQuery validation onblur
- 23. Uri validation pack
- 24. Rails Dynamic Validation
- 25. ASP.net MVC Validation Hook
- 26. Django Javascript validation Form
- 27. GWT DateBox validation
- 28. Validation z ajax AutoCompleteExtender
- 29. Kafka Avro Consumer z problemami dekodera
- 30. Generowanie avro schematu z opcjonalnymi wartościami
Dzięki za scenariusz ... wypróbuje to. Ale fakt, że nie ma niczego, co wskazuje na faktyczny problem, to bugging. – airboss
@Anup Trzeba by rozbić schemat i dane wejściowe na porcje i sprawdzić poprawność tych fragmentów. Łamanie RecordSchema jest łatwe, ale jeśli wejście JSON jest nieprawidłowe, trudno jest się dowiedzieć, jak je zlikwidować. Jeśli masz jakieś sugestie, daj mi znać. – kojiro