Bin ziemlich neu bei AVRO, also bitte entschuldigen Sie, wenn etwas offensichtlich fehlt. Gibt es ein AVRO Validator/Kommandozeilenprogramm, das Eingaben gegen ein AVRO Schema validiert? Oder zeigt wahrscheinlich auf, wo der Fehler in der JSON-Eingabe ist.AVRO Validation
Antwort
Nicht dass ich mir dessen bewusst bin. Ich schrieb dieses kleine Python-Skript, das Ihnen sagen wird, ob eine JSON-Datei mit einem Schema übereinstimmt, aber es wird Ihnen nicht sagen wo der Fehler ist, wenn es einen gibt.
Es hängt von der Python avro library ab.
#!/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)
Ich bin nicht Ihre Frage stellt sicher Sinn: da Avro Schema Verbindlich ist, wenn Avro Datenverarbeitung, ist es immer grundsätzlich standardmäßig validiert. Mit anderen Worten, die Analyse von Avro wird es notwendigerweise bestätigen.
Leider gibt es nur sehr wenige Metadaten in Avro-Daten. Alle inkompatiblen Änderungen sind im Wesentlichen Datenkorruption; und Sie können einfach nur Müll bekommen. Dies liegt daran, dass keine Feld-IDs oder Trennzeichen vorhanden sind: Alle Daten werden basierend darauf interpretiert, was Schema sagt, muss folgen. Dieser Mangel an Redundanz macht Daten sehr kompakt, bedeutet aber auch, dass selbst kleinste Datenbeschädigungen den gesamten Datenstrom nutzlos machen können.
Ich verstehe, was Sie sagen. Aber die Avro-Ausnahmen (im Falle einer Inkongruenz mit dem Schema) sind vage und zeigen nicht genau auf das tatsächliche Problem in der Eingabe. Wahrscheinlich, auf der Suche nach etwas benutzerfreundlicher. – airboss
Ah, ja, verstanden. Obwohl Sie wahrscheinlich Verbesserungen an Avro-Team, als Standard-Parser vorschlagen könnten. Ich stimme darin überein, dass Fehler in der Regel nicht so nützlich sind ...: - / – StaxMan
Ich habe einen Avro-Validator für JavaScript, die Sie auf JSON ausführen können. Es ist noch nicht Teil einer Avro-Version, sollte aber bald veröffentlicht werden. Sie finden den Patch unter https://issues.apache.org/jira/browse/AVRO-485.
Danke für das Skript ... werde es ausprobieren. Aber die Tatsache, dass es nichts gibt, das auf das eigentliche Problem verweist, ist Bugging. – airboss
@Anup Sie müssten das Schema und die Eingabe in Chunks zerlegen und diese Chunks validieren. Ein RecordSchema zu zerlegen ist einfach genug, aber wenn die JSON-Eingabe ungültig ist, ist es schwer zu wissen, wie man es bricht. Wenn Sie irgendwelche Vorschläge haben, lassen Sie es mich wissen. – kojiro